MES-replacement listing

This page gives all the steps that are taken to arrive at tcc-boot0 executable that is similar to the one in the fosslinux/live-bootstrap project for this project, which does not rely on the GNU Mes compiler. (The header files and the source for a standard library that are part of the GNU Mes compiler, are used.)

This page is generated the scan_trace.cpp, which parses the trace.txt file that is produced by running the task3.sh Bash script (where the line with the chroot command is uncommented) for the commit 64abad6a.

Binary seeds files

File /bootstrap-seeds/POSIX/x86/kaem-optional-seed

Source file is 'src/kaem-minimal_s'.
No URL
 7F 45 4C 46 01 01 01 03 00 00
 00 00 00 00 00 00 02 00 03 00
 01 00 00 00 54 80 04 08 34 00
 00 00 04 08 00 00 00 00 00 00
 34 00 20 00 01 00 28 00 05 00
 02 00 01 00 00 00 00 00 00 00
 00 80 04 08 00 80 04 08 EE 0D
 00 00 EE 0D 00 00 07 00 00 00
 01 00 00 00 B8 2D 00 00 00 BB
 00 00 00 00 CD 80 A3 D2 87 04
 08 B8 A0 86 01 00 50 E8 22 00
 00 00 89 C5 89 C2 58 89 E3 50
 53 89 D0 E8 CB 00 00 00 89 C3
 B8 01 00 00 00 CD 80 5F 5A 59
 5B 58 CD 80 57 C3 5F 58 8B 1D
 D2 87 04 08 01 C3 B8 2D 00 00
 00 CD 80 8B 05 D2 87 04 08 89
 1D D2 87 04 08 57 C3 00 00 00
 00 58 89 45 00 58 50 8D 85 04
 00 00 00 5B 89 18 58 50 8D 85
 0C 00 00 00 50 B8 03 00 00 00
 50 8D 85 04 00 00 00 8B 00 50
 8D 85 08 00 00 00 50 B8 01 00
 00 00 50 B8 89 80 04 08 81 C5
 10 00 00 00 FF D0 81 ED 10 00
 00 00 5B 89 03 58 50 8D 85 0C
 00 00 00 8B 00 50 B8 01 00 00
 00 5B 39 C3 0F 94 C0 0F B6 C0
 85 C0 58 0F 84 14 00 00 00 50
 8D 85 08 00 00 00 8A 00 0F B6
 C0 0F BE C0 E9 06 00 00 00 50
 B8 FF FF FF FF 8B 5D 00 53 C3
 50 B8 00 00 00 00 8B 5D 00 53
 C3 58 89 45 00 58 50 8D 85 04
 00 00 00 5B 89 18 58 50 8D 85
 08 00 00 00 5B 89 18 58 50 B8
 B2 87 04 08 81 C5 0C 00 00 00
 FF D0 81 ED 0C 00 00 00 50 B8
 DF 87 04 08 50 8D 85 04 00 00
 00 8B 00 50 8D 85 08 00 00 00
 8B 00 50 B8 04 00 00 00 5B F7
 E3 50 B8 04 00 00 00 5B 01 D8
 5B 01 D8 5B 89 03 58 50 8D 85
 0C 00 00 00 50 B8 D6 87 04 08
 5B 89 03 58 50 8D 85 08 00 00
 00 8B 00 50 B8 01 00 00 00 5B
 39 C3 0F 9F C0 0F B6 C0 85 C0
 58 0F 84 28 00 00 00 50 8D 85
 0C 00 00 00 50 8D 85 04 00 00
 00 8B 00 50 B8 01 00 00 00 50
 B8 04 00 00 00 5B F7 E3 5B 01
 D8 8B 00 5B 89 03 58 50 8D 85
 10 00 00 00 50 B8 05 00 00 00
 50 8D 85 0C 00 00 00 8B 00 50
 B8 00 00 00 00 50 B8 FF 01 00
 00 50 B8 89 80 04 08 81 C5 14
 00 00 00 FF D0 81 ED 14 00 00
 00 5B 89 03 58 50 8D 85 10 00
 00 00 8B 00 50 B8 00 00 00 00
 5B 39 C3 0F 94 C0 0F B6 C0 85
 C0 58 0F 84 0B 00 00 00 50 B8
 01 00 00 00 8B 5D 00 53 C3 50
 8D 85 14 00 00 00 50 8D 85 04
 00 00 00 8B 00 50 8D 85 08 00
 00 00 8B 00 50 B8 01 00 00 00
 5B 01 D8 50 B8 04 00 00 00 5B
 F7 E3 5B 01 D8 5B 89 03 58 50
 8D 85 E0 00 00 00 50 8D 85 18
 00 00 00 5B 89 03 58 50 8D 85
 E4 00 00 00 50 8D 85 10 00 00
 00 8B 00 50 B8 B5 80 04 08 81
 C5 E8 00 00 00 FF D0 81 ED E8
 00 00 00 5B 89 03 58 50 8D 85
 E4 00 00 00 8B 00 50 B8 FF FF
 FF FF 5B 39 C3 0F 94 C0 0F B6
 C0 85 C0 0F 85 19 00 00 00 58
 50 8D 85 E4 00 00 00 8B 00 50
 B8 0A 00 00 00 5B 39 C3 0F 94
 C0 0F B6 C0 85 C0 0F 85 19 00
 00 00 58 50 8D 85 E4 00 00 00
 8B 00 50 B8 23 00 00 00 5B 39
 C3 0F 94 C0 0F B6 C0 85 C0 58
 0F 84 05 00 00 00 E9 33 00 00
 00 50 8D 85 E0 00 00 00 50 8B
 00 50 B8 01 00 00 00 5B 01 D8
 5B 89 03 50 B8 01 00 00 00 5B
 29 C3 89 D8 50 8D 85 E4 00 00
 00 8B 00 5B 88 03 58 E9 3D FF
 FF FF 50 8D 85 E0 00 00 00 8B
 00 50 B8 00 00 00 00 5B 88 03
 58 50 8D 85 10 01 00 00 50 B8
 00 00 00 00 5B 89 03 58 50 8D
 85 E0 00 00 00 50 8D 85 18 00
 00 00 5B 89 03 58 50 8D 85 E0
 00 00 00 8B 00 8A 00 0F B6 C0
 0F BE C0 50 B8 20 00 00 00 5B
 39 C3 0F 94 C0 0F B6 C0 85 C0
 0F 85 21 00 00 00 58 50 8D 85
 E0 00 00 00 8B 00 8A 00 0F B6
 C0 0F BE C0 50 B8 09 00 00 00
 5B 39 C3 0F 94 C0 0F B6 C0 85
 C0 0F 94 C0 0F B6 C0 85 C0 58
 0F 84 05 00 00 00 E9 27 00 00
 00 50 8D 85 E0 00 00 00 50 8B
 00 50 B8 01 00 00 00 5B 01 D8
 5B 89 03 50 B8 01 00 00 00 5B
 29 C3 89 D8 58 E9 7A FF FF FF
 50 8D 85 E0 00 00 00 8B 00 8A
 00 0F B6 C0 0F BE C0 50 B8 00
 00 00 00 5B 39 C3 0F 94 C0 0F
 B6 C0 85 C0 58 0F 84 05 00 00
 00 E9 FC 00 00 00 50 8D 85 E8
 00 00 00 50 8D 85 10 01 00 00
 50 8B 00 50 B8 01 00 00 00 5B
 01 D8 5B 89 03 50 B8 01 00 00
 00 5B 29 C3 89 D8 50 B8 04 00
 00 00 5B F7 E3 5B 01 D8 50 8D
 85 E0 00 00 00 8B 00 5B 89 03
 58 50 8D 85 E0 00 00 00 8B 00
 8A 00 0F B6 C0 0F BE C0 50 B8
 20 00 00 00 5B 39 C3 0F 9F C0
 0F B6 C0 85 C0 0F 94 C0 0F B6
 C0 85 C0 58 0F 84 05 00 00 00
 E9 27 00 00 00 50 8D 85 E0 00
 00 00 50 8B 00 50 B8 01 00 00
 00 5B 01 D8 5B 89 03 50 B8 01
 00 00 00 5B 29 C3 89 D8 58 E9
 A3 FF FF FF 50 8D 85 E0 00 00
 00 8B 00 8A 00 0F B6 C0 0F BE
 C0 50 B8 00 00 00 00 5B 39 C3
 0F 94 C0 0F B6 C0 85 C0 58 0F
 84 05 00 00 00 E9 30 00 00 00
 50 8D 85 E0 00 00 00 50 8B 00
 50 B8 01 00 00 00 5B 01 D8 5B
 89 03 50 B8 01 00 00 00 5B 29
 C3 89 D8 50 B8 00 00 00 00 5B
 88 03 58 E9 50 FE FF FF 50 8D
 85 E8 00 00 00 50 8D 85 10 01
 00 00 8B 00 50 B8 04 00 00 00
 5B F7 E3 5B 01 D8 50 B8 00 00
 00 00 5B 89 03 58 50 8D 85 10
 01 00 00 8B 00 50 B8 00 00 00
 00 5B 39 C3 0F 9F C0 0F B6 C0
 85 C0 58 0F 84 35 01 00 00 50
 8D 85 14 01 00 00 50 B8 02 00
 00 00 50 B8 00 00 00 00 50 B8
 00 00 00 00 50 B8 00 00 00 00
 50 B8 89 80 04 08 81 C5 18 01
 00 00 FF D0 81 ED 18 01 00 00
 5B 89 03 58 50 8D 85 14 01 00
 00 8B 00 50 B8 FF FF FF FF 5B
 39 C3 0F 94 C0 0F B6 C0 85 C0
 58 0F 84 0B 00 00 00 50 B8 01
 00 00 00 8B 5D 00 53 C3 50 8D
 85 14 01 00 00 8B 00 50 B8 00
 00 00 00 5B 39 C3 0F 94 C0 0F
 B6 C0 85 C0 58 0F 84 51 00 00
 00 50 B8 0B 00 00 00 50 8D 85
 E8 00 00 00 50 B8 00 00 00 00
 50 B8 04 00 00 00 5B F7 E3 5B
 01 D8 8B 00 50 8D 85 E8 00 00
 00 50 8D 85 14 00 00 00 8B 00
 50 B8 89 80 04 08 81 C5 18 01
 00 00 FF D0 81 ED 18 01 00 00
 58 50 B8 01 00 00 00 8B 5D 00
 53 C3 50 B8 07 00 00 00 50 8D
 85 14 01 00 00 8B 00 50 8D 85
 18 01 00 00 50 B8 00 00 00 00
 50 B8 89 80 04 08 81 C5 1C 01
 00 00 FF D0 81 ED 1C 01 00 00
 58 50 8D 85 18 01 00 00 8B 00
 50 B8 00 00 00 00 5B 39 C3 0F
 95 C0 0F B6 C0 85 C0 58 0F 84
 0E 00 00 00 50 8D 85 18 01 00
 00 8B 00 8B 5D 00 53 C3 50 8D
 85 E4 00 00 00 8B 00 50 B8 23
 00 00 00 5B 39 C3 0F 94 C0 0F
 B6 C0 85 C0 58 0F 84 7C 00 00
 00 50 8D 85 E4 00 00 00 50 8D
 85 10 00 00 00 8B 00 50 B8 B5
 80 04 08 81 C5 14 01 00 00 FF
 D0 81 ED 14 01 00 00 5B 89 03
 58 50 8D 85 E4 00 00 00 8B 00
 50 B8 FF FF FF FF 5B 39 C3 0F
 95 C0 0F B6 C0 85 C0 0F 84 19
 00 00 00 58 50 8D 85 E4 00 00
 00 8B 00 50 B8 0A 00 00 00 5B
 39 C3 0F 95 C0 0F B6 C0 85 C0
 0F 94 C0 0F B6 C0 85 C0 58 0F
 84 05 00 00 00 E9 05 00 00 00
 E9 84 FF FF FF 50 8D 85 E4 00
 00 00 8B 00 50 B8 FF FF FF FF
 5B 39 C3 0F 94 C0 0F B6 C0 85
 C0 58 0F 84 05 00 00 00 E9 05
 00 00 00 E9 01 FB FF FF 50 B8
 00 00 00 00 8B 5D 00 53 C3 50
 B8 00 00 00 00 8B 5D 00 53 C3
 58 89 45 00 58 50 B8 DF 87 04
 08 50 B8 00 00 00 00 5B 89 03
 58 50 B8 00 00 00 00 8B 5D 00
 53 C3 00 00 00 00 6B 61 65 6D
 2E 78 38 36 00 00 00 00 00 00
 2E 74 65 78 74 00 2E 73 68 73
 74 72 74 61 62 00 2E 73 79 6D
 74 61 62 00 2E 73 74 72 74 61
 62 00 00 00 00 00 00 00 00 00
 00 00 00 00 00 00 00 00 00 00
 00 00 00 00 00 00 00 00 00 00
 00 00 00 00 01 00 00 00 00 00
 00 00 01 00 00 00 01 00 00 00
 06 00 00 00 54 80 04 08 54 00
 00 00 7E 07 00 00 00 00 00 00
 00 00 00 00 01 00 00 00 00 00
 00 00 07 00 00 00 03 00 00 00
 00 00 00 00 E3 87 04 08 E3 07
 00 00 21 00 00 00 00 00 00 00
 00 00 00 00 01 00 00 00 00 00
 00 00 19 00 00 00 03 00 00 00
 00 00 00 00 CC 88 04 08 CC 08
 00 00 42 02 00 00 00 00 00 00
 00 00 00 00 01 00 00 00 00 00
 00 00 11 00 00 00 02 00 00 00
 00 00 00 00 0E 8B 04 08 0E 0B
 00 00 E0 02 00 00 03 00 00 00
 2E 00 00 00 01 00 00 00 10 00
 00 00 00 45 4C 46 5F 74 65 78
 74 00 5F 73 74 61 72 74 00 66
 5F 73 79 73 5F 69 6E 74 38 30
 00 66 5F 73 79 73 5F 6D 61 6C
 6C 6F 63 00 53 59 53 5F 4D 41
 4C 4C 4F 43 00 66 5F 66 68 67
 65 74 63 00 5F 66 68 67 65 74
 63 5F 65 6C 73 65 31 00 5F 66
 68 67 65 74 63 5F 65 6C 73 65
 5F 65 6E 64 31 00 66 5F 6D 61
 69 6E 00 5F 6D 61 69 6E 5F 65
 6C 73 65 31 00 5F 6D 61 69 6E
 5F 65 6C 73 65 32 00 5F 6D 61
 69 6E 5F 6C 6F 6F 70 33 00 5F
 6D 61 69 6E 5F 6C 6F 6F 70 34
 00 5F 6D 61 69 6E 5F 6F 72 5F
 65 6E 64 35 00 5F 6D 61 69 6E
 5F 6F 72 5F 65 6E 64 36 00 5F
 6D 61 69 6E 5F 65 6C 73 65 37
 00 5F 6D 61 69 6E 5F 6C 6F 6F
 70 5F 65 6E 64 34 00 5F 6D 61
 69 6E 5F 6C 6F 6F 70 38 00 5F
 6D 61 69 6E 5F 6C 6F 6F 70 39
 00 5F 6D 61 69 6E 5F 6F 72 5F
 65 6E 64 31 30 00 5F 6D 61 69
 6E 5F 65 6C 73 65 31 31 00 5F
 6D 61 69 6E 5F 6C 6F 6F 70 5F
 65 6E 64 39 00 5F 6D 61 69 6E
 5F 65 6C 73 65 31 32 00 5F 6D
 61 69 6E 5F 6C 6F 6F 70 31 33
 00 5F 6D 61 69 6E 5F 65 6C 73
 65 31 34 00 5F 6D 61 69 6E 5F
 6C 6F 6F 70 5F 65 6E 64 31 33
 00 5F 6D 61 69 6E 5F 65 6C 73
 65 31 35 00 5F 6D 61 69 6E 5F
 6C 6F 6F 70 5F 65 6E 64 38 00
 5F 6D 61 69 6E 5F 65 6C 73 65
 31 37 00 5F 6D 61 69 6E 5F 65
 6C 73 65 31 38 00 5F 6D 61 69
 6E 5F 65 6C 73 65 31 39 00 5F
 6D 61 69 6E 5F 65 6C 73 65 31
 36 00 5F 6D 61 69 6E 5F 6C 6F
 6F 70 32 31 00 5F 6D 61 69 6E
 5F 61 6E 64 5F 65 6E 64 32 32
 00 5F 6D 61 69 6E 5F 65 6C 73
 65 32 33 00 5F 6D 61 69 6E 5F
 6C 6F 6F 70 5F 65 6E 64 32 31
 00 5F 6D 61 69 6E 5F 65 6C 73
 65 32 30 00 5F 6D 61 69 6E 5F
 65 6C 73 65 32 34 00 5F 6D 61
 69 6E 5F 6C 6F 6F 70 5F 65 6E
 64 33 00 66 5F 5F 5F 69 6E 69
 74 5F 67 6C 6F 62 61 6C 73 5F
 5F 00 45 4C 46 5F 64 61 74 61
 00 53 59 53 5F 4D 41 4C 4C 4F
 43 00 73 74 72 69 6E 67 5F 30
 00 67 5F 5F 73 79 73 5F 65 6E
 76 00 45 4C 46 5F 65 6E 64 00
 00 00 00 00 00 00 00 00 00 00
 00 00 00 00 01 00 01 00 00 00
 54 80 04 08 00 00 00 00 02 00
 01 00 0A 00 00 00 54 80 04 08
 00 00 00 00 02 02 01 00 11 00
 00 00 89 80 04 08 00 00 00 00
 02 00 01 00 1D 00 00 00 92 80
 04 08 00 00 00 00 02 00 01 00
 1B 02 00 00 D2 87 04 08 00 00
 00 00 02 00 01 00 35 00 00 00
 B5 80 04 08 00 00 00 00 02 00
 01 00 3E 00 00 00 35 81 04 08
 00 00 00 00 02 02 01 00 4C 00
 00 00 3B 81 04 08 00 00 00 00
 02 02 01 00 5E 00 00 00 4B 81
 04 08 00 00 00 00 02 00 01 00
 65 00 00 00 05 82 04 08 00 00
 00 00 02 02 01 00 71 00 00 00
 6B 82 04 08 00 00 00 00 02 02
 01 00 7D 00 00 00 9D 82 04 08
 00 00 00 00 02 02 01 00 89 00
 00 00 AF 82 04 08 00 00 00 00
 02 02 01 00 95 00 00 00 10 83
 04 08 00 00 00 00 02 02 01 00
 A3 00 00 00 31 83 04 08 00 00
 00 00 02 02 01 00 B1 00 00 00
 3F 83 04 08 00 00 00 00 02 02
 01 00 BD 00 00 00 72 83 04 08
 00 00 00 00 02 02 01 00 CD 00
 00 00 A8 83 04 08 00 00 00 00
 02 02 01 00 D9 00 00 00 A8 83
 04 08 00 00 00 00 02 02 01 00
 E5 00 00 00 F1 83 04 08 00 00
 00 00 02 02 01 00 F4 00 00 00
 07 84 04 08 00 00 00 00 02 02
 01 00 01 01 00 00 2E 84 04 08
 00 00 00 00 02 02 01 00 11 01
 00 00 5C 84 04 08 00 00 00 00
 02 02 01 00 1E 01 00 00 9D 84
 04 08 00 00 00 00 02 02 01 00
 2B 01 00 00 D3 84 04 08 00 00
 00 00 02 02 01 00 38 01 00 00
 FA 84 04 08 00 00 00 00 02 02
 01 00 49 01 00 00 28 85 04 08
 00 00 00 00 02 02 01 00 56 01
 00 00 58 85 04 08 00 00 00 00
 02 02 01 00 66 01 00 00 02 86
 04 08 00 00 00 00 02 02 01 00
 73 01 00 00 74 86 04 08 00 00
 00 00 02 02 01 00 80 01 00 00
 D4 86 04 08 00 00 00 00 02 02
 01 00 8D 01 00 00 D4 86 04 08
 00 00 00 00 02 02 01 00 9A 01
 00 00 F5 86 04 08 00 00 00 00
 02 02 01 00 A7 01 00 00 56 87
 04 08 00 00 00 00 02 02 01 00
 B7 01 00 00 6C 87 04 08 00 00
 00 00 02 02 01 00 C4 01 00 00
 71 87 04 08 00 00 00 00 02 02
 01 00 D5 01 00 00 71 87 04 08
 00 00 00 00 02 02 01 00 E2 01
 00 00 97 87 04 08 00 00 00 00
 02 02 01 00 EF 01 00 00 9C 87
 04 08 00 00 00 00 02 02 01 00
 FF 01 00 00 B2 87 04 08 00 00
 00 00 02 00 01 00 12 02 00 00
 D2 87 04 08 00 00 00 00 02 00
 01 00 1B 02 00 00 D2 87 04 08
 00 00 00 00 02 00 01 00 26 02
 00 00 D6 87 04 08 00 00 00 00
 02 00 01 00 2F 02 00 00 DF 87
 04 08 00 00 00 00 02 00 01 00
 3A 02 00 00 EE 8D 04 08 00 00
 00 00 02 00 01 00

File /bootstrap-seeds/POSIX/x86/hex0-seed

Source file is 'src/hex0_s'.
No URL
 7F 45 4C 46 01 01 01 03 00 00
 00 00 00 00 00 00 02 00 03 00
 01 00 00 00 54 80 04 08 34 00
 00 00 E0 04 00 00 00 00 00 00
 34 00 20 00 01 00 28 00 05 00
 02 00 01 00 00 00 00 00 00 00
 00 80 04 08 00 80 04 08 BE 08
 00 00 BE 08 00 00 07 00 00 00
 01 00 00 00 B8 2D 00 00 00 BB
 00 00 00 00 CD 80 A3 B7 84 04
 08 B8 A0 86 01 00 50 E8 22 00
 00 00 89 C5 89 C2 58 89 E3 50
 53 89 D0 E8 35 00 00 00 89 C3
 B8 01 00 00 00 CD 80 5F 5A 59
 5B 58 CD 80 57 C3 5F 58 8B 1D
 B7 84 04 08 01 C3 B8 2D 00 00
 00 CD 80 8B 05 B7 84 04 08 89
 1D B7 84 04 08 57 C3 00 00 00
 00 58 89 45 00 58 50 8D 85 04
 00 00 00 5B 89 18 58 50 8D 85
 08 00 00 00 5B 89 18 58 50 B8
 97 84 04 08 81 C5 0C 00 00 00
 FF D0 81 ED 0C 00 00 00 50 B8
 BB 84 04 08 50 8D 85 04 00 00
 00 8B 00 50 8D 85 08 00 00 00
 8B 00 50 B8 04 00 00 00 5B F7
 E3 50 B8 04 00 00 00 5B 01 D8
 5B 01 D8 5B 89 03 58 50 8D 85
 0C 00 00 00 50 B8 05 00 00 00
 50 8D 85 04 00 00 00 8B 00 50
 B8 01 00 00 00 50 B8 04 00 00
 00 5B F7 E3 5B 01 D8 8B 00 50
 B8 00 00 00 00 50 B8 FF 01 00
 00 50 B8 89 80 04 08 81 C5 10
 00 00 00 FF D0 81 ED 10 00 00
 00 5B 89 03 58 50 8D 85 10 00
 00 00 50 B8 05 00 00 00 50 8D
 85 04 00 00 00 8B 00 50 B8 02
 00 00 00 50 B8 04 00 00 00 5B
 F7 E3 5B 01 D8 8B 00 50 B8 41
 02 00 00 50 B8 FF 01 00 00 50
 B8 89 80 04 08 81 C5 14 00 00
 00 FF D0 81 ED 14 00 00 00 5B
 89 03 58 50 8D 85 14 00 00 00
 50 B8 00 00 00 00 5B 89 03 58
 50 8D 85 18 00 00 00 50 B8 00
 00 00 00 5B 89 03 58 50 B8 03
 00 00 00 50 8D 85 0C 00 00 00
 8B 00 50 8D 85 1C 00 00 00 50
 B8 01 00 00 00 50 B8 89 80 04
 08 81 C5 20 00 00 00 FF D0 81
 ED 20 00 00 00 85 C0 0F 94 C0
 0F B6 C0 85 C0 58 0F 84 05 00
 00 00 E9 FF 01 00 00 50 8D 85
 1C 00 00 00 8A 00 0F B6 C0 50
 B8 20 00 00 00 5B 39 C3 0F 9E
 C0 0F B6 C0 85 C0 58 0F 84 05
 00 00 00 E9 D1 01 00 00 50 8D
 85 1C 00 00 00 8A 00 0F B6 C0
 50 B8 23 00 00 00 5B 39 C3 0F
 94 C0 0F B6 C0 85 C0 58 0F 84
 74 00 00 00 50 B8 03 00 00 00
 50 8D 85 0C 00 00 00 8B 00 50
 8D 85 1C 00 00 00 50 B8 01 00
 00 00 50 B8 89 80 04 08 81 C5
 20 00 00 00 FF D0 81 ED 20 00
 00 00 85 C0 0F 84 1C 00 00 00
 58 50 8D 85 1C 00 00 00 8A 00
 0F B6 C0 50 B8 0A 00 00 00 5B
 39 C3 0F 95 C0 0F B6 C0 85 C0
 0F 94 C0 0F B6 C0 85 C0 58 0F
 84 05 00 00 00 E9 05 00 00 00
 E9 91 FF FF FF E9 39 01 00 00
 50 B8 30 00 00 00 50 8D 85 1C
 00 00 00 8A 00 0F B6 C0 5B 39
 C3 0F 9E C0 0F B6 C0 85 C0 0F
 84 1C 00 00 00 58 50 8D 85 1C
 00 00 00 8A 00 0F B6 C0 50 B8
 39 00 00 00 5B 39 C3 0F 9E C0
 0F B6 C0 85 C0 58 0F 84 21 00
 00 00 50 8D 85 1C 00 00 00 50
 8A 00 0F B6 C0 50 B8 30 00 00
 00 5B 29 C3 89 D8 5B 88 03 58
 E9 27 00 00 00 50 8D 85 1C 00
 00 00 50 8A 00 0F B6 C0 50 B8
 41 00 00 00 50 B8 0A 00 00 00
 5B 29 C3 89 D8 5B 29 C3 89 D8
 5B 88 03 58 50 8D 85 14 00 00
 00 8B 00 85 C0 58 0F 84 64 00
 00 00 50 8D 85 1C 00 00 00 50
 8A 00 0F B6 C0 50 8D 85 18 00
 00 00 8B 00 5B 01 D8 5B 88 03
 58 50 B8 04 00 00 00 50 8D 85
 10 00 00 00 8B 00 50 8D 85 1C
 00 00 00 50 B8 01 00 00 00 50
 B8 89 80 04 08 81 C5 20 00 00
 00 FF D0 81 ED 20 00 00 00 58
 50 8D 85 14 00 00 00 50 B8 00
 00 00 00 5B 89 03 58 E9 33 00
 00 00 50 8D 85 18 00 00 00 50
 8D 85 1C 00 00 00 8A 00 0F B6
 C0 50 B8 04 00 00 00 89 C1 58
 D3 E0 5B 89 03 58 50 8D 85 14
 00 00 00 50 B8 01 00 00 00 5B
 89 03 58 E9 BB FD FF FF 50 B8
 06 00 00 00 50 8D 85 10 00 00
 00 8B 00 50 B8 00 00 00 00 50
 B8 00 00 00 00 50 B8 89 80 04
 08 81 C5 20 00 00 00 FF D0 81
 ED 20 00 00 00 58 50 B8 0F 00
 00 00 50 8D 85 04 00 00 00 8B
 00 50 B8 02 00 00 00 50 B8 04
 00 00 00 5B F7 E3 5B 01 D8 8B
 00 50 B8 FF 01 00 00 50 B8 00
 00 00 00 50 B8 89 80 04 08 81
 C5 20 00 00 00 FF D0 81 ED 20
 00 00 00 58 50 B8 00 00 00 00
 8B 5D 00 53 C3 58 89 45 00 58
 50 B8 BB 84 04 08 50 B8 00 00
 00 00 5B 89 03 58 50 B8 00 00
 00 00 8B 5D 00 53 C3 00 00 00
 00 00 00 00 00 00 2E 74 65 78
 74 00 2E 73 68 73 74 72 74 61
 62 00 2E 73 79 6D 74 61 62 00
 2E 73 74 72 74 61 62 00 00 00
 00 00 00 00 00 00 00 00 00 00
 00 00 00 00 00 00 00 00 00 00
 00 00 00 00 00 00 00 00 00 00
 01 00 00 00 00 00 00 00 01 00
 00 00 01 00 00 00 06 00 00 00
 54 80 04 08 54 00 00 00 63 04
 00 00 00 00 00 00 00 00 00 00
 01 00 00 00 00 00 00 00 07 00
 00 00 03 00 00 00 00 00 00 00
 BF 84 04 08 BF 04 00 00 21 00
 00 00 00 00 00 00 00 00 00 00
 01 00 00 00 00 00 00 00 19 00
 00 00 03 00 00 00 00 00 00 00
 A8 85 04 08 A8 05 00 00 56 01
 00 00 00 00 00 00 00 00 00 00
 01 00 00 00 00 00 00 00 11 00
 00 00 02 00 00 00 00 00 00 00
 FE 86 04 08 FE 06 00 00 C0 01
 00 00 03 00 00 00 1C 00 00 00
 01 00 00 00 10 00 00 00 00 45
 4C 46 5F 74 65 78 74 00 5F 73
 74 61 72 74 00 66 5F 73 79 73
 5F 69 6E 74 38 30 00 66 5F 73
 79 73 5F 6D 61 6C 6C 6F 63 00
 53 59 53 5F 4D 41 4C 4C 4F 43
 00 66 5F 6D 61 69 6E 00 5F 6D
 61 69 6E 5F 6C 6F 6F 70 31 00
 5F 6D 61 69 6E 5F 65 6C 73 65
 32 00 5F 6D 61 69 6E 5F 65 6C
 73 65 33 00 5F 6D 61 69 6E 5F
 6C 6F 6F 70 35 00 5F 6D 61 69
 6E 5F 61 6E 64 5F 65 6E 64 36
 00 5F 6D 61 69 6E 5F 65 6C 73
 65 37 00 5F 6D 61 69 6E 5F 6C
 6F 6F 70 5F 65 6E 64 35 00 5F
 6D 61 69 6E 5F 65 6C 73 65 34
 00 5F 6D 61 69 6E 5F 61 6E 64
 5F 65 6E 64 38 00 5F 6D 61 69
 6E 5F 65 6C 73 65 39 00 5F 6D
 61 69 6E 5F 65 6C 73 65 5F 65
 6E 64 39 00 5F 6D 61 69 6E 5F
 65 6C 73 65 31 30 00 5F 6D 61
 69 6E 5F 65 6C 73 65 5F 65 6E
 64 31 30 00 5F 6D 61 69 6E 5F
 65 6C 73 65 5F 65 6E 64 34 00
 5F 6D 61 69 6E 5F 65 6C 73 65
 5F 65 6E 64 33 00 5F 6D 61 69
 6E 5F 6C 6F 6F 70 5F 65 6E 64
 31 00 66 5F 5F 5F 69 6E 69 74
 5F 67 6C 6F 62 61 6C 73 5F 5F
 00 45 4C 46 5F 64 61 74 61 00
 53 59 53 5F 4D 41 4C 4C 4F 43
 00 67 5F 5F 73 79 73 5F 65 6E
 76 00 45 4C 46 5F 65 6E 64 00
 00 00 00 00 00 00 00 00 00 00
 00 00 00 00 01 00 01 00 00 00
 54 80 04 08 00 00 00 00 02 00
 01 00 0A 00 00 00 54 80 04 08
 00 00 00 00 02 02 01 00 11 00
 00 00 89 80 04 08 00 00 00 00
 02 00 01 00 1D 00 00 00 92 80
 04 08 00 00 00 00 02 00 01 00
 38 01 00 00 B7 84 04 08 00 00
 00 00 02 00 01 00 35 00 00 00
 B5 80 04 08 00 00 00 00 02 00
 01 00 3C 00 00 00 D3 81 04 08
 00 00 00 00 02 02 01 00 48 00
 00 00 19 82 04 08 00 00 00 00
 02 02 01 00 54 00 00 00 42 82
 04 08 00 00 00 00 02 02 01 00
 60 00 00 00 66 82 04 08 00 00
 00 00 02 02 01 00 6C 00 00 00
 BA 82 04 08 00 00 00 00 02 02
 01 00 7B 00 00 00 D0 82 04 08
 00 00 00 00 02 02 01 00 87 00
 00 00 D5 82 04 08 00 00 00 00
 02 02 01 00 97 00 00 00 DA 82
 04 08 00 00 00 00 02 02 01 00
 A3 00 00 00 19 83 04 08 00 00
 00 00 02 02 01 00 B2 00 00 00
 43 83 04 08 00 00 00 00 02 02
 01 00 BE 00 00 00 6A 83 04 08
 00 00 00 00 02 02 01 00 CE 00
 00 00 E0 83 04 08 00 00 00 00
 02 02 01 00 DB 00 00 00 13 84
 04 08 00 00 00 00 02 02 01 00
 EC 00 00 00 13 84 04 08 00 00
 00 00 02 02 01 00 FC 00 00 00
 13 84 04 08 00 00 00 00 02 02
 01 00 0C 01 00 00 18 84 04 08
 00 00 00 00 02 02 01 00 1C 01
 00 00 97 84 04 08 00 00 00 00
 02 00 01 00 2F 01 00 00 B7 84
 04 08 00 00 00 00 02 00 01 00
 38 01 00 00 B7 84 04 08 00 00
 00 00 02 00 01 00 43 01 00 00
 BB 84 04 08 00 00 00 00 02 00
 01 00 4E 01 00 00 BE 88 04 08
 00 00 00 00 02 00 01 00

Processes

Process 1

Process 2

(Executed by Process 1)

Process 3

(Executed by Process 2)

Process 4

(Executed by Process 2)

Process 5

(Executed by Process 1)

Process 6

(Executed by Process 5)

Process 7

(Executed by Process 5)

Process 8

(Executed by Process 5)

Process 9

(Executed by Process 5)

Process 10

(Executed by Process 5)

Process 11

(Executed by Process 5)

Process 12

(Executed by Process 5)

Process 13

(Executed by Process 5)

Process 14

(Executed by Process 5)

Process 15

(Executed by Process 5)

Process 16

(Executed by Process 5)

Process 17

(Executed by Process 5)

Process 18

(Executed by Process 5)

Process 19

(Executed by Process 5)

Process 20

(Executed by Process 5)

Process 21

(Executed by Process 1)

Process 22

(Executed by Process 21)

Process 23

(Executed by Process 21)

Process 24

(Executed by Process 21)

Process 25

(Executed by Process 21)

Process 26

(Executed by Process 21)

Process 27

(Executed by Process 21)

Process 28

(Executed by Process 21)

Process 29

(Executed by Process 21)

Process 30

(Executed by Process 21)

Process 31

(Executed by Process 21)

Process 32

(Executed by Process 21)

Process 33

(Executed by Process 21)

Process 34

(Executed by Process 21)

Process 35

(Executed by Process 21)

Process 36

(Executed by Process 21)

Process 37

(Executed by Process 21)

Process 38

(Executed by Process 21)

Process 39

(Executed by Process 21)

Process 40

(Executed by Process 21)

Process 41

(Executed by Process 21)

Process 42

(Executed by Process 21)

Process 43

(Executed by Process 21)

Process 44

(Executed by Process 21)

Process 45

(Executed by Process 21)

Process 46

(Executed by Process 21)

Process 47

(Executed by Process 21)

Process 48

(Executed by Process 21)

Process 49

(Executed by Process 21)

Process 50

(Executed by Process 21)

Process 51

(Executed by Process 21)

Process 52

(Executed by Process 21)

Process 53

(Executed by Process 21)

Process 54

(Executed by Process 21)

Process 55

(Executed by Process 21)

Process 56

(Executed by Process 21)

Process 57

(Executed by Process 21)

Process 58

(Executed by Process 21)

Process 59

(Executed by Process 21)

Process 60

(Executed by Process 21)

Process 61

(Executed by Process 21)

Process 62

(Executed by Process 1)

Process 63

(Executed by Process 62)

Process 64

(Executed by Process 62)

Process 65

(Executed by Process 62)

Process 66

(Executed by Process 62)

Process 67

(Executed by Process 62)

Process 68

(Executed by Process 62)

Process 69

(Executed by Process 62)

Process 70

(Executed by Process 62)

Process 71

(Executed by Process 62)

Process 72

(Executed by Process 62)

Process 73

(Executed by Process 62)

Process 74

(Executed by Process 62)

Process 75

(Executed by Process 62)

Process 76

(Executed by Process 62)

Process 77

(Executed by Process 62)

Process 78

(Executed by Process 62)

Process 79

(Executed by Process 62)

Process 80

(Executed by Process 62)

Process 81

(Executed by Process 62)

Process 82

(Executed by Process 62)

Process 83

(Executed by Process 62)

Process 84

(Executed by Process 62)

Process 85

(Executed by Process 62)

Process 86

(Executed by Process 62)

Process 87

(Executed by Process 62)

Process 88

(Executed by Process 62)

Process 89

(Executed by Process 62)

Process 90

(Executed by Process 62)

Process 91

(Executed by Process 62)

Process 92

(Executed by Process 62)

Process 93

(Executed by Process 62)

Process 94

(Executed by Process 62)

Process 95

(Executed by Process 62)

Process 96

(Executed by Process 62)

Process 97

(Executed by Process 62)

Process 98

(Executed by Process 62)

Process 99

(Executed by Process 62)

Process 100

(Executed by Process 62)

Process 101

(Executed by Process 62)

Process 102

(Executed by Process 62)

Process 103

(Executed by Process 62)

Process 104

(Executed by Process 62)

Process 105

(Executed by Process 62)

Process 106

(Executed by Process 62)

Process 107

(Executed by Process 62)

Process 108

(Executed by Process 62)

Process 109

(Executed by Process 62)

Process 110

(Executed by Process 62)

Process 111

(Executed by Process 62)

Process 112

(Executed by Process 62)

Process 113

(Executed by Process 62)

Process 114

(Executed by Process 62)

Process 115

(Executed by Process 62)

Process 116

(Executed by Process 62)

Process 117

(Executed by Process 62)

Process 118

(Executed by Process 1)

Process 119

(Executed by Process 118)

Process 120

(Executed by Process 118)

Process 121

(Executed by Process 120)

Process 122

(Executed by Process 120)

Process 123

(Executed by Process 120)

Process 124

(Executed by Process 120)

Process 125

(Executed by Process 120)

Process 126

(Executed by Process 120)

Process 127

(Executed by Process 120)

Process 128

(Executed by Process 120)

Process 129

(Executed by Process 120)

Process 130

(Executed by Process 120)

Process 131

(Executed by Process 120)

Process 132

(Executed by Process 120)

Process 133

(Executed by Process 120)

Process 134

(Executed by Process 120)

Process 135

(Executed by Process 120)

Process 136

(Executed by Process 120)

Process 137

(Executed by Process 120)

Process 138

(Executed by Process 137)

Process 139

(Executed by Process 138)

Process 140

(Executed by Process 138)

Process 141

(Executed by Process 138)

Process 142

(Executed by Process 138)

Process 143

(Executed by Process 138)

Process 144

(Executed by Process 138)

Process 145

(Executed by Process 138)

Process 146

(Executed by Process 137)

Process 147

(Executed by Process 146)

Process 148

(Executed by Process 146)

Process 149

(Executed by Process 146)

Process 150

(Executed by Process 146)

Process 151

(Executed by Process 146)

Process 152

(Executed by Process 146)

Process 153

(Executed by Process 146)

Process 154

(Executed by Process 137)

Process 155

(Executed by Process 154)

Process 156

(Executed by Process 154)

Process 157

(Executed by Process 154)

Process 158

(Executed by Process 154)

Process 159

(Executed by Process 154)

Process 160

(Executed by Process 154)

Process 161

(Executed by Process 154)

Process 162

(Executed by Process 154)

Process 163

(Executed by Process 154)

Process 164

(Executed by Process 154)

Process 165

(Executed by Process 154)

Process 166

(Executed by Process 154)

Process 167

(Executed by Process 154)

Process 168

(Executed by Process 154)

Process 169

(Executed by Process 154)

Process 170

(Executed by Process 154)

Process 171

(Executed by Process 154)

Process 172

(Executed by Process 154)

Process 173

(Executed by Process 154)

Process 174

(Executed by Process 154)

Process 175

(Executed by Process 154)

Process 176

(Executed by Process 154)

Process 177

(Executed by Process 154)

Process 178

(Executed by Process 154)

Process 179

(Executed by Process 154)

Process 180

(Executed by Process 154)

Process 181

(Executed by Process 154)

Process 182

(Executed by Process 154)

Process 183

(Executed by Process 154)

Process 184

(Executed by Process 154)

Process 185

(Executed by Process 154)

Process 186

(Executed by Process 154)

Process 187

(Executed by Process 154)

Process 188

(Executed by Process 154)

Process 189

(Executed by Process 154)

Process 190

(Executed by Process 154)

Process 191

(Executed by Process 154)

Process 192

(Executed by Process 154)

Process 193

(Executed by Process 154)

Process 194

(Executed by Process 154)

Process 195

(Executed by Process 154)

Process 196

(Executed by Process 154)

Process 197

(Executed by Process 154)

Process 198

(Executed by Process 154)

Process 199

(Executed by Process 154)

Process 200

(Executed by Process 154)

Process 201

(Executed by Process 154)

Process 202

(Executed by Process 154)

Process 203

(Executed by Process 154)

Process 204

(Executed by Process 154)

Process 205

(Executed by Process 154)

Process 206

(Executed by Process 154)

Process 207

(Executed by Process 154)

Process 208

(Executed by Process 154)

Process 209

(Executed by Process 154)

Process 210

(Executed by Process 154)

Process 211

(Executed by Process 154)

Process 212

(Executed by Process 154)

Process 213

(Executed by Process 154)

Process 214

(Executed by Process 154)

Process 215

(Executed by Process 154)

Process 216

(Executed by Process 154)

Process 217

(Executed by Process 154)

Process 218

(Executed by Process 154)

Process 219

(Executed by Process 154)

Process 220

(Executed by Process 154)

Process 221

(Executed by Process 154)

Process 222

(Executed by Process 154)

Process 223

(Executed by Process 154)

Process 224

(Executed by Process 154)

Process 225

(Executed by Process 154)

Process 226

(Executed by Process 154)

Process 227

(Executed by Process 154)

Process 228

(Executed by Process 154)

Process 229

(Executed by Process 154)

Process 230

(Executed by Process 154)

Process 231

(Executed by Process 154)

Process 232

(Executed by Process 154)

Process 233

(Executed by Process 154)

Process 234

(Executed by Process 154)

Process 235

(Executed by Process 154)

Process 236

(Executed by Process 154)

Process 237

(Executed by Process 154)

Process 238

(Executed by Process 154)

Process 239

(Executed by Process 154)

Process 240

(Executed by Process 154)

Process 241

(Executed by Process 154)

Process 242

(Executed by Process 154)

Process 243

(Executed by Process 154)

Process 244

(Executed by Process 154)

Process 245

(Executed by Process 154)

Process 246

(Executed by Process 154)

Process 247

(Executed by Process 154)

Process 248

(Executed by Process 154)

Process 249

(Executed by Process 154)

Process 250

(Executed by Process 154)

Process 251

(Executed by Process 154)

Process 252

(Executed by Process 154)

Process 253

(Executed by Process 154)

Process 254

(Executed by Process 154)

Process 255

(Executed by Process 154)

Process 256

(Executed by Process 154)

Process 257

(Executed by Process 154)

Process 258

(Executed by Process 154)

Process 259

(Executed by Process 154)

Process 260

(Executed by Process 154)

Process 261

(Executed by Process 154)

Process 262

(Executed by Process 154)

Process 263

(Executed by Process 154)

Process 264

(Executed by Process 154)

Input source files

File /kaem.x86

Source file is 'task3/kaem.x86'.
URL: https://github.com/FransFaase/MES-replacement/blob/64abad6a2a55cbef00ffa065e1c019c6a1932acf/task3/kaem.x86
#! /usr/bin/env bash
# Mes --- Maxwell Equations of Software
# Copyright © 2017,2019 Jan Nieuwenhuizen <janneke@gnu.org>
# Copyright © 2017,2019 Jeremiah Orians
#
# This file is part of Mes.
#
# Mes is free software; you can redistribute it and/or modify it
# under the terms of the GNU General Public License as published by
# the Free Software Foundation; either version 3 of the License, or (at
# your option) any later version.
#
# Mes is distributed in the hope that it will be useful, but
# WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with Mes.  If not, see <http://www.gnu.org/licenses/>.



# Can also be run by kaem or any other shell of your personal choice
# To run in kaem simply: kaem --verbose --strict

##################################################
# Phase 0-11 Build hex0 from bootstrapped binary #
##################################################

./bootstrap-seeds/POSIX/x86/kaem-optional-seed ./x86/tools-seed-kaem.kaem
./x86/artifact/kaem-0 ./x86/tools-mini-kaem.kaem
./usr/bin/kaem --file ./x86/check-tools.kaem
./usr/bin/kaem --file ./x86/tools-kaem.kaem

#######################################
# Run remaining phases with full kaem #
#######################################
./usr/bin/kaem --verbose --strict --file ./x86/after.kaem

File /x86/tools-seed-kaem.kaem

Source file is 'task3/tools-seed-kaem.kaem'.
URL: https://github.com/FransFaase/MES-replacement/blob/64abad6a2a55cbef00ffa065e1c019c6a1932acf/task3/tools-seed-kaem.kaem
#! /usr/bin/env bash

./bootstrap-seeds/POSIX/x86/hex0-seed ./x86/hex0_s.hex0 ./usr/bin/hex0

./usr/bin/hex0 ./x86/kaem-minimal_s.hex0 ./x86/artifact/kaem-0

File /x86/hex0_s.hex0

Source file is 'src/hex0_s.hex0'.
No URL
                             ### Copyright (C) 2016 Jeremiah Orians
                             ### Copyright (C) 2017 Jan Nieuwenhuizen <janneke@gnu.org>
                             ### This file is part of M2-Planet.
                             ###
                             ### M2-Planet is free software: you can redistribute it and/or modify
                             ### it under the terms of the GNU General Public License as published by
                             ### the Free Software Foundation, either version 3 of the License, or
                             ### (at your option) any later version.
                             ###
                             ### M2-Planet is distributed in the hope that it will be useful,
                             ### but WITHOUT ANY WARRANTY; without even the implied warranty of
                             ### MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
                             ### GNU General Public License for more details.
                             ###
                             ### You should have received a copy of the GNU General Public License
                             ### along with M2-Planet.  If not, see <http://www.gnu.org/licenses/>.
                             
                             ### stage0's hex2 format
                             ###    !<label>          1 byte relative
                             ###    $<label>          2 byte address
                             ###    @<label>          2 byte relative
                             ###    &<label>          4 byte address
                             ###    %<label>          4 byte relative
                             
                             ### if you wish to use this header, you need to add :ELF_end to the end of your
                             ### M1 or hex2 files.
                             
                             ## ELF Header
                             
                             
7F 45 4C 46                  # e_ident[EI_MAG0-3] ELF's magic number
                             
01                           # e_ident[EI_CLASS] Indicating 32 bit
01                           # e_ident[EI_DATA] Indicating little endianness
01                           # e_ident[EI_VERSION] Indicating original elf
                             
03                           # e_ident[EI_OSABI] Set at 3 because FreeBSD is strict
00                           # e_ident[EI_ABIVERSION] See above
                             
00 00 00 00 00 00 00         # e_ident[EI_PAD]
                             
02 00                        # e_type Indicating Executable
03 00                        # e_machine Indicating 386
01 00 00 00                  # e_version Indicating original elf
                             
54800408                     # e_entry Address of the entry point
34000000                     # e_phoff Address of program header table
E0040000                     # e_shoff Address of section header table
                             
00 00 00 00                  # e_flags
                             
34 00                        # e_ehsize Indicating our 52 Byte header
                             
20 00                        # e_phentsize size of a program header table
01 00                        # e_phnum number of entries in program table
                             
28 00                        # e_shentsize size of a section header table
05 00                        # e_shnum number of entries in section table
                             
02 00                        # e_shstrndx index of the section names
                             
                             
                             
                             
01 00 00 00                  # ph_type: PT-LOAD = 1
00 00 00 00                  # ph_offset
00800408                     # ph_vaddr
00800408                     # ph_physaddr
BE080000                     # ph_filesz
BE080000                     # ph_memsz
07 00 00 00                  # ph_flags: PF-X|PF-W|PF-R = 7
01 00 00 00                  # ph_alignment
                             
                             
                             #
                             #:ELF_text
                             #
                             #:_start
B8 2D000000                  #    mov_eax, %45                                # the Syscall # for SYS_BRK
BB 00000000                  #    mov_ebx, %0                                 # Get current brk
CD80                         #    int_80                                      # Let the kernel do the work
A3 B7840408                  #    mov_[DWORD],eax &SYS_MALLOC                 # Set our malloc pointer
                             #
                             #    # allocate memory for the second stack
B8 A0860100                  #    mov_eax, %100000
50                           #    push_eax                                    # (sys_malloc assums address)
E8 22000000                  #    call %f_sys_malloc
89C5                         #    mov_ebp,eax
                             #    
                             #    # setup argc and argv for the main function
89C2                         #    mov_edx,eax
58                           #    pop_eax
89E3                         #    mov_ebx,esp
50                           #    push_eax
53                           #    push_ebx
89D0                         #    mov_eax,edx
                             #
                             #    #call main
E8 35000000                  #    call %f_main
                             #    
                             #    # program completed Successfully
89C3                         #    mov_ebx,eax                                 # All is well
B8 01000000                  #    mov_eax, %1                                 # put the exit syscall number in eax
CD80                         #    int_80                                      # Call it a good day
                             #
                             ## These sys_ function follow the same calling conventions
                             ## as all the other functions. To access the arguments on the stack
                             ## the return address is stored in the edi address (which is only possible
                             ## because these functions do not call other function) and the function
                             ## address (which is stored in the eax register, the top of the stack)
                             ## needs to be popped as well.
                             #
                             #:f_sys_int80
5F                           #    pop_edi               # Save return address from the stack
5A                           #    pop_edx               # Get the arguments from the stack
59                           #    pop_ecx
5B                           #    pop_ebx
58                           #    pop_eax
CD80                         #    int_80                # call the Kernel
57                           #    push_edi              # restore return address to the stack
C3                           #    ret
                             #
                             #:f_sys_malloc
5F                           #    pop_edi
58                           #    pop_eax
8B1D B7840408                #    mov_ebx,[DWORD] &SYS_MALLOC                 # Using the current pointer
01C3                         #    add_ebx,eax                                 # Request the number of desired bytes
B8 2D000000                  #    mov_eax, %45                                # the Syscall # for SYS_BRK
CD80                         #    int_80                                      # call the Kernel
8B05 B7840408                #    mov_eax,[DWORD] &SYS_MALLOC                 # Return pointer
891D B7840408                #    mov_[DWORD],ebx &SYS_MALLOC                 # Update pointer
57                           #    push_edi
C3                           #    ret
                             #:SYS_MALLOC
00000000                     #    NULL
                             #
                             #    
                             #
                             #:f_main
58                           #  pop_eax
894500                       #  mov_[ebp],eax
58                           #  pop_eax
50                           #  push_eax              # argv (local)
8D85 04000000                #  lea_eax,[ebp+DWORD] %4
5B                           #  pop_ebx               # =:
8918                         #  mov_[eax],ebx
58                           #  pop_eax
50                           #  push_eax              # argc (local)
8D85 08000000                #  lea_eax,[ebp+DWORD] %8
5B                           #  pop_ebx               # =:
8918                         #  mov_[eax],ebx
58                           #  pop_eax
50                           #  push_eax              # __init_globals__ (function)
B8 97840408                  #  mov_eax, &f___init_globals__
81C5 0C000000                #  add_ebp, %12         # ()
FFD0                         #  call_eax
81ED 0C000000                #  sub_ebp, %12
50                           #  push_eax              # _sys_env (global)
B8 BB840408                  #  mov_eax, &g__sys_env
50                           #  push_eax              # argv (local)
8D85 04000000                #  lea_eax,[ebp+DWORD] %4
8B00                         #  mov_eax,[eax]         # ?
50                           #  push_eax              # argc (local)
8D85 08000000                #  lea_eax,[ebp+DWORD] %8
8B00                         #  mov_eax,[eax]         # ?
50                           #  push_eax              # 4
B8 04000000                  #  mov_eax, %4
5B                           #  pop_ebx               # *
F7E3                         #  mul_ebx
50                           #  push_eax              # 4
B8 04000000                  #  mov_eax, %4
5B                           #  pop_ebx               # +
01D8                         #  add_eax,ebx
5B                           #  pop_ebx               # +
01D8                         #  add_eax,ebx
5B                           #  pop_ebx               # =
8903                         #  mov_[ebx],eax
58                           #  pop_eax               # ;
50                           #  push_eax              # fin (local)
8D85 0C000000                #  lea_eax,[ebp+DWORD] %12
50                           #  push_eax              # 5
B8 05000000                  #  mov_eax, %5
50                           #  push_eax              # argv (local)
8D85 04000000                #  lea_eax,[ebp+DWORD] %4
8B00                         #  mov_eax,[eax]         # ?
50                           #  push_eax              # 1
B8 01000000                  #  mov_eax, %1
50                           #  push_eax              # 4
B8 04000000                  #  mov_eax, %4
5B                           #  pop_ebx               # *
F7E3                         #  mul_ebx
5B                           #  pop_ebx               # +
01D8                         #  add_eax,ebx
8B00                         #  mov_eax,[eax]         # ?
50                           #  push_eax              # 0
B8 00000000                  #  mov_eax, %0
50                           #  push_eax              # 511
B8 FF010000                  #  mov_eax, %511
50                           #  push_eax              # sys_int80 (function)
B8 89800408                  #  mov_eax, &f_sys_int80
81C5 10000000                #  add_ebp, %16         # ()
FFD0                         #  call_eax
81ED 10000000                #  sub_ebp, %16
5B                           #  pop_ebx               # =
8903                         #  mov_[ebx],eax
58                           #  pop_eax               # ;
50                           #  push_eax              # fout (local)
8D85 10000000                #  lea_eax,[ebp+DWORD] %16
50                           #  push_eax              # 5
B8 05000000                  #  mov_eax, %5
50                           #  push_eax              # argv (local)
8D85 04000000                #  lea_eax,[ebp+DWORD] %4
8B00                         #  mov_eax,[eax]         # ?
50                           #  push_eax              # 2
B8 02000000                  #  mov_eax, %2
50                           #  push_eax              # 4
B8 04000000                  #  mov_eax, %4
5B                           #  pop_ebx               # *
F7E3                         #  mul_ebx
5B                           #  pop_ebx               # +
01D8                         #  add_eax,ebx
8B00                         #  mov_eax,[eax]         # ?
50                           #  push_eax              # 577
B8 41020000                  #  mov_eax, %577
50                           #  push_eax              # 511
B8 FF010000                  #  mov_eax, %511
50                           #  push_eax              # sys_int80 (function)
B8 89800408                  #  mov_eax, &f_sys_int80
81C5 14000000                #  add_ebp, %20         # ()
FFD0                         #  call_eax
81ED 14000000                #  sub_ebp, %20
5B                           #  pop_ebx               # =
8903                         #  mov_[ebx],eax
58                           #  pop_eax               # ;
50                           #  push_eax              # state (local)
8D85 14000000                #  lea_eax,[ebp+DWORD] %20
50                           #  push_eax              # 0
B8 00000000                  #  mov_eax, %0
5B                           #  pop_ebx               # =
8903                         #  mov_[ebx],eax
58                           #  pop_eax               # ;
50                           #  push_eax              # first (local)
8D85 18000000                #  lea_eax,[ebp+DWORD] %24
50                           #  push_eax              # 0
B8 00000000                  #  mov_eax, %0
5B                           #  pop_ebx               # =
8903                         #  mov_[ebx],eax
58                           #  pop_eax               # ;
                             ## hex0.c 32
                             #:_main_loop1
50                           #  push_eax              # 3
B8 03000000                  #  mov_eax, %3
50                           #  push_eax              # fin (local)
8D85 0C000000                #  lea_eax,[ebp+DWORD] %12
8B00                         #  mov_eax,[eax]         # ?
50                           #  push_eax              # ch (local)
8D85 1C000000                #  lea_eax,[ebp+DWORD] %28
50                           #  push_eax              # 1
B8 01000000                  #  mov_eax, %1
50                           #  push_eax              # sys_int80 (function)
B8 89800408                  #  mov_eax, &f_sys_int80
81C5 20000000                #  add_ebp, %32         # ()
FFD0                         #  call_eax
81ED 20000000                #  sub_ebp, %32
85C0                         #  test_eax,eax          # !
0F94C0                       #  sete_al
0FB6C0                       #  movzx_eax,al
85C0                         #  test_eax,eax          # if
58                           #  pop_eax
0F84 05000000                #  je %_main_else2
E9 FF010000                  #  jmp %_main_loop_end1
                             ## hex0.c 33
                             ## hex0.c 34
                             #:_main_else2 # no else
50                           #  push_eax              # ch (local)
8D85 1C000000                #  lea_eax,[ebp+DWORD] %28
8A00                         #  mov_al,[eax]          # ?1
0FB6C0                       #  movzx_eax,al
50                           #  push_eax              # 32
B8 20000000                  #  mov_eax, %32
5B                           #  pop_ebx               # <=s
39C3                         #  cmp_eax_ebx
0F9EC0                       #  setle_al
0FB6C0                       #  movzx_eax,al
85C0                         #  test_eax,eax          # if
58                           #  pop_eax
0F84 05000000                #  je %_main_else3
                             ## hex0.c 35
E9 D1010000                  #  jmp %_main_else_end3
                             #:_main_else3
                             ## hex0.c 36
50                           #  push_eax              # ch (local)
8D85 1C000000                #  lea_eax,[ebp+DWORD] %28
8A00                         #  mov_al,[eax]          # ?1
0FB6C0                       #  movzx_eax,al
50                           #  push_eax              # 35
B8 23000000                  #  mov_eax, %35
5B                           #  pop_ebx               # ==
39C3                         #  cmp_eax_ebx
0F94C0                       #  sete_al
0FB6C0                       #  movzx_eax,al
85C0                         #  test_eax,eax          # if
58                           #  pop_eax
0F84 74000000                #  je %_main_else4
                             ## hex0.c 37
                             ## hex0.c 38
                             #:_main_loop5
50                           #  push_eax              # 3
B8 03000000                  #  mov_eax, %3
50                           #  push_eax              # fin (local)
8D85 0C000000                #  lea_eax,[ebp+DWORD] %12
8B00                         #  mov_eax,[eax]         # ?
50                           #  push_eax              # ch (local)
8D85 1C000000                #  lea_eax,[ebp+DWORD] %28
50                           #  push_eax              # 1
B8 01000000                  #  mov_eax, %1
50                           #  push_eax              # sys_int80 (function)
B8 89800408                  #  mov_eax, &f_sys_int80
81C5 20000000                #  add_ebp, %32         # ()
FFD0                         #  call_eax
81ED 20000000                #  sub_ebp, %32
85C0                         #  test_eax,eax          # &&
0F84 1C000000                #  je %_main_and_end6
58                           #  pop_eax
50                           #  push_eax              # ch (local)
8D85 1C000000                #  lea_eax,[ebp+DWORD] %28
8A00                         #  mov_al,[eax]          # ?1
0FB6C0                       #  movzx_eax,al
50                           #  push_eax              # 10
B8 0A000000                  #  mov_eax, %10
5B                           #  pop_ebx               # !=
39C3                         #  cmp_eax_ebx
0F95C0                       #  setne_al
0FB6C0                       #  movzx_eax,al
                             #:_main_and_end6
85C0                         #  test_eax,eax          # !
0F94C0                       #  sete_al
0FB6C0                       #  movzx_eax,al
85C0                         #  test_eax,eax          # if
58                           #  pop_eax
0F84 05000000                #  je %_main_else7
E9 05000000                  #  jmp %_main_loop_end5
                             ## hex0.c 39
                             #:_main_else7 # no else
E9 91FFFFFF                  #  jmp %_main_loop5
                             #:_main_loop_end5
E9 39010000                  #  jmp %_main_else_end4
                             #:_main_else4
                             ## hex0.c 42
                             ## hex0.c 43
50                           #  push_eax              # 48
B8 30000000                  #  mov_eax, %48
50                           #  push_eax              # ch (local)
8D85 1C000000                #  lea_eax,[ebp+DWORD] %28
8A00                         #  mov_al,[eax]          # ?1
0FB6C0                       #  movzx_eax,al
5B                           #  pop_ebx               # <=s
39C3                         #  cmp_eax_ebx
0F9EC0                       #  setle_al
0FB6C0                       #  movzx_eax,al
85C0                         #  test_eax,eax          # &&
0F84 1C000000                #  je %_main_and_end8
58                           #  pop_eax
50                           #  push_eax              # ch (local)
8D85 1C000000                #  lea_eax,[ebp+DWORD] %28
8A00                         #  mov_al,[eax]          # ?1
0FB6C0                       #  movzx_eax,al
50                           #  push_eax              # 57
B8 39000000                  #  mov_eax, %57
5B                           #  pop_ebx               # <=s
39C3                         #  cmp_eax_ebx
0F9EC0                       #  setle_al
0FB6C0                       #  movzx_eax,al
                             #:_main_and_end8
85C0                         #  test_eax,eax          # if
58                           #  pop_eax
0F84 21000000                #  je %_main_else9
                             ## hex0.c 44
50                           #  push_eax              # ch (local)
8D85 1C000000                #  lea_eax,[ebp+DWORD] %28
50                           #  push_eax              # $ (dup)
8A00                         #  mov_al,[eax]          # ?1
0FB6C0                       #  movzx_eax,al
50                           #  push_eax              # 48
B8 30000000                  #  mov_eax, %48
5B                           #  pop_ebx               # -
29C3                         #  sub_ebx,eax
89D8                         #  mov_eax,ebx
5B                           #  pop_ebx               # =1
8803                         #  mov_[ebx],al
58                           #  pop_eax               # ;
E9 27000000                  #  jmp %_main_else_end9
                             #:_main_else9
                             ## hex0.c 46
50                           #  push_eax              # ch (local)
8D85 1C000000                #  lea_eax,[ebp+DWORD] %28
50                           #  push_eax              # $ (dup)
8A00                         #  mov_al,[eax]          # ?1
0FB6C0                       #  movzx_eax,al
50                           #  push_eax              # 65
B8 41000000                  #  mov_eax, %65
50                           #  push_eax              # 10
B8 0A000000                  #  mov_eax, %10
5B                           #  pop_ebx               # -
29C3                         #  sub_ebx,eax
89D8                         #  mov_eax,ebx
5B                           #  pop_ebx               # -
29C3                         #  sub_ebx,eax
89D8                         #  mov_eax,ebx
5B                           #  pop_ebx               # =1
8803                         #  mov_[ebx],al
58                           #  pop_eax               # ;
                             #:_main_else_end9
                             ## hex0.c 47
50                           #  push_eax              # state (local)
8D85 14000000                #  lea_eax,[ebp+DWORD] %20
8B00                         #  mov_eax,[eax]         # ?
85C0                         #  test_eax,eax          # if
58                           #  pop_eax
0F84 64000000                #  je %_main_else10
                             ## hex0.c 48
                             ## hex0.c 49
50                           #  push_eax              # ch (local)
8D85 1C000000                #  lea_eax,[ebp+DWORD] %28
50                           #  push_eax              # $ (dup)
8A00                         #  mov_al,[eax]          # ?1
0FB6C0                       #  movzx_eax,al
50                           #  push_eax              # first (local)
8D85 18000000                #  lea_eax,[ebp+DWORD] %24
8B00                         #  mov_eax,[eax]         # ?
5B                           #  pop_ebx               # +
01D8                         #  add_eax,ebx
5B                           #  pop_ebx               # =1
8803                         #  mov_[ebx],al
58                           #  pop_eax               # ;
                             ## hex0.c 15
50                           #  push_eax              # 4
B8 04000000                  #  mov_eax, %4
50                           #  push_eax              # fout (local)
8D85 10000000                #  lea_eax,[ebp+DWORD] %16
8B00                         #  mov_eax,[eax]         # ?
50                           #  push_eax              # ch (local)
8D85 1C000000                #  lea_eax,[ebp+DWORD] %28
50                           #  push_eax              # 1
B8 01000000                  #  mov_eax, %1
50                           #  push_eax              # sys_int80 (function)
B8 89800408                  #  mov_eax, &f_sys_int80
81C5 20000000                #  add_ebp, %32         # ()
FFD0                         #  call_eax
81ED 20000000                #  sub_ebp, %32
58                           #  pop_eax               # ;
                             ## hex0.c 51
50                           #  push_eax              # state (local)
8D85 14000000                #  lea_eax,[ebp+DWORD] %20
50                           #  push_eax              # 0
B8 00000000                  #  mov_eax, %0
5B                           #  pop_ebx               # =
8903                         #  mov_[ebx],eax
58                           #  pop_eax               # ;
E9 33000000                  #  jmp %_main_else_end10
                             #:_main_else10
                             ## hex0.c 54
                             ## hex0.c 55
50                           #  push_eax              # first (local)
8D85 18000000                #  lea_eax,[ebp+DWORD] %24
50                           #  push_eax              # ch (local)
8D85 1C000000                #  lea_eax,[ebp+DWORD] %28
8A00                         #  mov_al,[eax]          # ?1
0FB6C0                       #  movzx_eax,al
50                           #  push_eax              # 4
B8 04000000                  #  mov_eax, %4
89C1                         #  mov_ecx,eax           # <<
58                           #  pop_eax
D3E0                         #  shl_eax,cl
5B                           #  pop_ebx               # =
8903                         #  mov_[ebx],eax
58                           #  pop_eax               # ;
                             ## hex0.c 56
50                           #  push_eax              # state (local)
8D85 14000000                #  lea_eax,[ebp+DWORD] %20
50                           #  push_eax              # 1
B8 01000000                  #  mov_eax, %1
5B                           #  pop_ebx               # =
8903                         #  mov_[ebx],eax
58                           #  pop_eax               # ;
                             #:_main_else_end10
                             #:_main_else_end4
                             #:_main_else_end3
E9 BBFDFFFF                  #  jmp %_main_loop1
                             #:_main_loop_end1
                             ## hex0.c 13
50                           #  push_eax              # 6
B8 06000000                  #  mov_eax, %6
50                           #  push_eax              # fout (local)
8D85 10000000                #  lea_eax,[ebp+DWORD] %16
8B00                         #  mov_eax,[eax]         # ?
50                           #  push_eax              # 0
B8 00000000                  #  mov_eax, %0
50                           #  push_eax              # 0
B8 00000000                  #  mov_eax, %0
50                           #  push_eax              # sys_int80 (function)
B8 89800408                  #  mov_eax, &f_sys_int80
81C5 20000000                #  add_ebp, %32         # ()
FFD0                         #  call_eax
81ED 20000000                #  sub_ebp, %32
58                           #  pop_eax               # ;
                             ## hex0.c 16
50                           #  push_eax              # 15
B8 0F000000                  #  mov_eax, %15
50                           #  push_eax              # argv (local)
8D85 04000000                #  lea_eax,[ebp+DWORD] %4
8B00                         #  mov_eax,[eax]         # ?
50                           #  push_eax              # 2
B8 02000000                  #  mov_eax, %2
50                           #  push_eax              # 4
B8 04000000                  #  mov_eax, %4
5B                           #  pop_ebx               # *
F7E3                         #  mul_ebx
5B                           #  pop_ebx               # +
01D8                         #  add_eax,ebx
8B00                         #  mov_eax,[eax]         # ?
50                           #  push_eax              # 511
B8 FF010000                  #  mov_eax, %511
50                           #  push_eax              # 0
B8 00000000                  #  mov_eax, %0
50                           #  push_eax              # sys_int80 (function)
B8 89800408                  #  mov_eax, &f_sys_int80
81C5 20000000                #  add_ebp, %32         # ()
FFD0                         #  call_eax
81ED 20000000                #  sub_ebp, %32
58                           #  pop_eax               # ;
50                           #  push_eax              # 0
B8 00000000                  #  mov_eax, %0
8B5D00                       #  mov_ebx,[ebp]         # return
53                           #  push_ebx
C3                           #  ret
                             #
                             #:f___init_globals__
58                           #  pop_eax
894500                       #  mov_[ebp],eax
58                           #  pop_eax
50                           #  push_eax              # _sys_env (global)
B8 BB840408                  #  mov_eax, &g__sys_env
50                           #  push_eax              # 0
B8 00000000                  #  mov_eax, %0
5B                           #  pop_ebx               # =
8903                         #  mov_[ebx],eax
58                           #  pop_eax               # ;
50                           #  push_eax              # 0
B8 00000000                  #  mov_eax, %0
8B5D00                       #  mov_ebx,[ebp]         # return
53                           #  push_ebx
C3                           #  ret
                             #
                             #:ELF_data
                             #
 00000000                    #:SYS_MALLOC NULL
                             #:g__sys_env
00000000                     #  NULL
                             #
                             #:ELF_end
                             # Generated sections
                             
00                           # NULL
                             
2E7465787400                 
                             
2E736873747274616200         
                             
2E73796D74616200             
                             
2E73747274616200             
                             
                             
00000000                     #sh_name
00000000                     #sh_type
00000000                     #sh_flags
00000000                     #sh_addr
00000000                     #sh_offset
00000000                     #sh_size
00000000                     #sh_link
00000000                     #sh_info
01000000                     #sh_addralign
00000000                     #sh_entsize
                             
                             
01000000                     #sh_name
01000000                     #sh_type
06000000                     #sh_flags
54800408                     #sh_addr
54000000                     #sh_offset
63040000                     #sh_size
00000000                     #sh_link
00000000                     #sh_info
01000000                     #sh_addralign
00000000                     #sh_entsize
                             
                             
07000000                     #sh_name
03000000                     #sh_type
00000000                     #sh_flags
BF840408                     #sh_addr
BF040000                     #sh_offset
21000000                     #sh_size
00000000                     #sh_link
00000000                     #sh_info
01000000                     #sh_addralign
00000000                     #sh_entsize
                             
                             
19000000                     #sh_name
03000000                     #sh_type
00000000                     #sh_flags
A8850408                     #sh_addr
A8050000                     #sh_offset
56010000                     #sh_size
00000000                     #sh_link
00000000                     #sh_info
01000000                     #sh_addralign
00000000                     #sh_entsize
                             
                             
11000000                     #sh_name
02000000                     #sh_type
00000000                     #sh_flags
FE860408                     #sh_addr
FE060000                     #sh_offset
C0010000                     #sh_size
03000000                     #sh_link
1C000000                     #sh_info
01000000                     #sh_addralign
10000000                     #sh_entsize
                             
                             # Generated string table
                             
00                           # NULL string
 454C465F7465787400          # "ELF_text"
 5F737461727400              # "_start"
 665F7379735F696E74383000    # "f_sys_int80"
 665F7379735F6D616C6C6F6300  # "f_sys_malloc"
 5359535F4D414C4C4F4300      # "SYS_MALLOC"
 665F6D61696E00              # "f_main"
 5F6D61696E5F6C6F6F703100    # "_main_loop1"
 5F6D61696E5F656C73653200    # "_main_else2"
 5F6D61696E5F656C73653300    # "_main_else3"
 5F6D61696E5F6C6F6F703500    # "_main_loop5"
 5F6D61696E5F616E645F656E643600# "_main_and_end6"
 5F6D61696E5F656C73653700    # "_main_else7"
 5F6D61696E5F6C6F6F705F656E643500# "_main_loop_end5"
 5F6D61696E5F656C73653400    # "_main_else4"
 5F6D61696E5F616E645F656E643800# "_main_and_end8"
 5F6D61696E5F656C73653900    # "_main_else9"
 5F6D61696E5F656C73655F656E643900# "_main_else_end9"
 5F6D61696E5F656C7365313000  # "_main_else10"
 5F6D61696E5F656C73655F656E64313000# "_main_else_end10"
 5F6D61696E5F656C73655F656E643400# "_main_else_end4"
 5F6D61696E5F656C73655F656E643300# "_main_else_end3"
 5F6D61696E5F6C6F6F705F656E643100# "_main_loop_end1"
 665F5F5F696E69745F676C6F62616C735F5F00# "f___init_globals__"
 454C465F6461746100          # "ELF_data"
 5359535F4D414C4C4F4300      # "SYS_MALLOC"
 675F5F7379735F656E7600      # "g__sys_env"
 454C465F656E6400            # "ELF_end"
                             # END Generated string table
                             
                             
                             # Generated symbol table
                             
                             # Required NULL symbol entry
00000000                     # st_name
00000000                     # st_value
00000000                     # st_size
00                           # st_info
00                           # st_other
0100                         # st_shndx
                             
01000000                     # st_name
54800408                     #st_value
00000000                     # st_size (unknown size)
02                           # st_info (FUNC)
00                           # st_other (default)
0100                         # st_shndx
                             
0A000000                     # st_name
54800408                     #st_value
00000000                     # st_size (unknown size)
02                           # st_info (FUNC)
02                           # st_other (hidden)
0100                         # st_shndx
                             
11000000                     # st_name
89800408                     #st_value
00000000                     # st_size (unknown size)
02                           # st_info (FUNC)
00                           # st_other (default)
0100                         # st_shndx
                             
1D000000                     # st_name
92800408                     #st_value
00000000                     # st_size (unknown size)
02                           # st_info (FUNC)
00                           # st_other (default)
0100                         # st_shndx
                             
38010000                     # st_name
B7840408                     #st_value
00000000                     # st_size (unknown size)
02                           # st_info (FUNC)
00                           # st_other (default)
0100                         # st_shndx
                             
35000000                     # st_name
B5800408                     #st_value
00000000                     # st_size (unknown size)
02                           # st_info (FUNC)
00                           # st_other (default)
0100                         # st_shndx
                             
3C000000                     # st_name
D3810408                     #st_value
00000000                     # st_size (unknown size)
02                           # st_info (FUNC)
02                           # st_other (hidden)
0100                         # st_shndx
                             
48000000                     # st_name
19820408                     #st_value
00000000                     # st_size (unknown size)
02                           # st_info (FUNC)
02                           # st_other (hidden)
0100                         # st_shndx
                             
54000000                     # st_name
42820408                     #st_value
00000000                     # st_size (unknown size)
02                           # st_info (FUNC)
02                           # st_other (hidden)
0100                         # st_shndx
                             
60000000                     # st_name
66820408                     #st_value
00000000                     # st_size (unknown size)
02                           # st_info (FUNC)
02                           # st_other (hidden)
0100                         # st_shndx
                             
6C000000                     # st_name
BA820408                     #st_value
00000000                     # st_size (unknown size)
02                           # st_info (FUNC)
02                           # st_other (hidden)
0100                         # st_shndx
                             
7B000000                     # st_name
D0820408                     #st_value
00000000                     # st_size (unknown size)
02                           # st_info (FUNC)
02                           # st_other (hidden)
0100                         # st_shndx
                             
87000000                     # st_name
D5820408                     #st_value
00000000                     # st_size (unknown size)
02                           # st_info (FUNC)
02                           # st_other (hidden)
0100                         # st_shndx
                             
97000000                     # st_name
DA820408                     #st_value
00000000                     # st_size (unknown size)
02                           # st_info (FUNC)
02                           # st_other (hidden)
0100                         # st_shndx
                             
A3000000                     # st_name
19830408                     #st_value
00000000                     # st_size (unknown size)
02                           # st_info (FUNC)
02                           # st_other (hidden)
0100                         # st_shndx
                             
B2000000                     # st_name
43830408                     #st_value
00000000                     # st_size (unknown size)
02                           # st_info (FUNC)
02                           # st_other (hidden)
0100                         # st_shndx
                             
BE000000                     # st_name
6A830408                     #st_value
00000000                     # st_size (unknown size)
02                           # st_info (FUNC)
02                           # st_other (hidden)
0100                         # st_shndx
                             
CE000000                     # st_name
E0830408                     #st_value
00000000                     # st_size (unknown size)
02                           # st_info (FUNC)
02                           # st_other (hidden)
0100                         # st_shndx
                             
DB000000                     # st_name
13840408                     #st_value
00000000                     # st_size (unknown size)
02                           # st_info (FUNC)
02                           # st_other (hidden)
0100                         # st_shndx
                             
EC000000                     # st_name
13840408                     #st_value
00000000                     # st_size (unknown size)
02                           # st_info (FUNC)
02                           # st_other (hidden)
0100                         # st_shndx
                             
FC000000                     # st_name
13840408                     #st_value
00000000                     # st_size (unknown size)
02                           # st_info (FUNC)
02                           # st_other (hidden)
0100                         # st_shndx
                             
0C010000                     # st_name
18840408                     #st_value
00000000                     # st_size (unknown size)
02                           # st_info (FUNC)
02                           # st_other (hidden)
0100                         # st_shndx
                             
1C010000                     # st_name
97840408                     #st_value
00000000                     # st_size (unknown size)
02                           # st_info (FUNC)
00                           # st_other (default)
0100                         # st_shndx
                             
2F010000                     # st_name
B7840408                     #st_value
00000000                     # st_size (unknown size)
02                           # st_info (FUNC)
00                           # st_other (default)
0100                         # st_shndx
                             
38010000                     # st_name
B7840408                     #st_value
00000000                     # st_size (unknown size)
02                           # st_info (FUNC)
00                           # st_other (default)
0100                         # st_shndx
                             
43010000                     # st_name
BB840408                     #st_value
00000000                     # st_size (unknown size)
02                           # st_info (FUNC)
00                           # st_other (default)
0100                         # st_shndx
                             
4E010000                     # st_name
BE880408                     #st_value
00000000                     # st_size (unknown size)
02                           # st_info (FUNC)
00                           # st_other (default)
0100                         # st_shndx
                             
                             # END Generated symbol table
                             
                             

File /x86/kaem-minimal_s.hex0

Source file is 'src/kaem-minimal_s.hex0'.
No URL
                             ### Copyright (C) 2016 Jeremiah Orians
                             ### Copyright (C) 2017 Jan Nieuwenhuizen <janneke@gnu.org>
                             ### This file is part of M2-Planet.
                             ###
                             ### M2-Planet is free software: you can redistribute it and/or modify
                             ### it under the terms of the GNU General Public License as published by
                             ### the Free Software Foundation, either version 3 of the License, or
                             ### (at your option) any later version.
                             ###
                             ### M2-Planet is distributed in the hope that it will be useful,
                             ### but WITHOUT ANY WARRANTY; without even the implied warranty of
                             ### MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
                             ### GNU General Public License for more details.
                             ###
                             ### You should have received a copy of the GNU General Public License
                             ### along with M2-Planet.  If not, see <http://www.gnu.org/licenses/>.
                             
                             ### stage0's hex2 format
                             ###    !<label>          1 byte relative
                             ###    $<label>          2 byte address
                             ###    @<label>          2 byte relative
                             ###    &<label>          4 byte address
                             ###    %<label>          4 byte relative
                             
                             ### if you wish to use this header, you need to add :ELF_end to the end of your
                             ### M1 or hex2 files.
                             
                             ## ELF Header
                             
                             
7F 45 4C 46                  # e_ident[EI_MAG0-3] ELF's magic number
                             
01                           # e_ident[EI_CLASS] Indicating 32 bit
01                           # e_ident[EI_DATA] Indicating little endianness
01                           # e_ident[EI_VERSION] Indicating original elf
                             
03                           # e_ident[EI_OSABI] Set at 3 because FreeBSD is strict
00                           # e_ident[EI_ABIVERSION] See above
                             
00 00 00 00 00 00 00         # e_ident[EI_PAD]
                             
02 00                        # e_type Indicating Executable
03 00                        # e_machine Indicating 386
01 00 00 00                  # e_version Indicating original elf
                             
54800408                     # e_entry Address of the entry point
34000000                     # e_phoff Address of program header table
04080000                     # e_shoff Address of section header table
                             
00 00 00 00                  # e_flags
                             
34 00                        # e_ehsize Indicating our 52 Byte header
                             
20 00                        # e_phentsize size of a program header table
01 00                        # e_phnum number of entries in program table
                             
28 00                        # e_shentsize size of a section header table
05 00                        # e_shnum number of entries in section table
                             
02 00                        # e_shstrndx index of the section names
                             
                             
                             
                             
01 00 00 00                  # ph_type: PT-LOAD = 1
00 00 00 00                  # ph_offset
00800408                     # ph_vaddr
00800408                     # ph_physaddr
EE0D0000                     # ph_filesz
EE0D0000                     # ph_memsz
07 00 00 00                  # ph_flags: PF-X|PF-W|PF-R = 7
01 00 00 00                  # ph_alignment
                             
                             
                             #
                             #:ELF_text
                             #
                             #:_start
B8 2D000000                  #    mov_eax, %45                                # the Syscall # for SYS_BRK
BB 00000000                  #    mov_ebx, %0                                 # Get current brk
CD80                         #    int_80                                      # Let the kernel do the work
A3 D2870408                  #    mov_[DWORD],eax &SYS_MALLOC                 # Set our malloc pointer
                             #
                             #    # allocate memory for the second stack
B8 A0860100                  #    mov_eax, %100000
50                           #    push_eax                                    # (sys_malloc assums address)
E8 22000000                  #    call %f_sys_malloc
89C5                         #    mov_ebp,eax
                             #    
                             #    # setup argc and argv for the main function
89C2                         #    mov_edx,eax
58                           #    pop_eax
89E3                         #    mov_ebx,esp
50                           #    push_eax
53                           #    push_ebx
89D0                         #    mov_eax,edx
                             #
                             #    #call main
E8 CB000000                  #    call %f_main
                             #    
                             #    # program completed Successfully
89C3                         #    mov_ebx,eax                                 # All is well
B8 01000000                  #    mov_eax, %1                                 # put the exit syscall number in eax
CD80                         #    int_80                                      # Call it a good day
                             #
                             ## These sys_ function follow the same calling conventions
                             ## as all the other functions. To access the arguments on the stack
                             ## the return address is stored in the edi address (which is only possible
                             ## because these functions do not call other function) and the function
                             ## address (which is stored in the eax register, the top of the stack)
                             ## needs to be popped as well.
                             #
                             #:f_sys_int80
5F                           #    pop_edi               # Save return address from the stack
5A                           #    pop_edx               # Get the arguments from the stack
59                           #    pop_ecx
5B                           #    pop_ebx
58                           #    pop_eax
CD80                         #    int_80                # call the Kernel
57                           #    push_edi              # restore return address to the stack
C3                           #    ret
                             #
                             #:f_sys_malloc
5F                           #    pop_edi
58                           #    pop_eax
8B1D D2870408                #    mov_ebx,[DWORD] &SYS_MALLOC                 # Using the current pointer
01C3                         #    add_ebx,eax                                 # Request the number of desired bytes
B8 2D000000                  #    mov_eax, %45                                # the Syscall # for SYS_BRK
CD80                         #    int_80                                      # call the Kernel
8B05 D2870408                #    mov_eax,[DWORD] &SYS_MALLOC                 # Return pointer
891D D2870408                #    mov_[DWORD],ebx &SYS_MALLOC                 # Update pointer
57                           #    push_edi
C3                           #    ret
                             #:SYS_MALLOC
00000000                     #    NULL
                             #
                             #    
                             #
                             #:f_fhgetc
58                           #  pop_eax
894500                       #  mov_[ebp],eax
58                           #  pop_eax
50                           #  push_eax              # fh (local)
8D85 04000000                #  lea_eax,[ebp+DWORD] %4
5B                           #  pop_ebx               # =:
8918                         #  mov_[eax],ebx
58                           #  pop_eax
50                           #  push_eax              # result (local)
8D85 0C000000                #  lea_eax,[ebp+DWORD] %12
50                           #  push_eax              # 3
B8 03000000                  #  mov_eax, %3
50                           #  push_eax              # fh (local)
8D85 04000000                #  lea_eax,[ebp+DWORD] %4
8B00                         #  mov_eax,[eax]         # ?
50                           #  push_eax              # ch (local)
8D85 08000000                #  lea_eax,[ebp+DWORD] %8
50                           #  push_eax              # 1
B8 01000000                  #  mov_eax, %1
50                           #  push_eax              # sys_int80 (function)
B8 89800408                  #  mov_eax, &f_sys_int80
81C5 10000000                #  add_ebp, %16         # ()
FFD0                         #  call_eax
81ED 10000000                #  sub_ebp, %16
5B                           #  pop_ebx               # =
8903                         #  mov_[ebx],eax
58                           #  pop_eax               # ;
                             ## kaem-minimal.c 25
50                           #  push_eax              # result (local)
8D85 0C000000                #  lea_eax,[ebp+DWORD] %12
8B00                         #  mov_eax,[eax]         # ?
50                           #  push_eax              # 1
B8 01000000                  #  mov_eax, %1
5B                           #  pop_ebx               # ==
39C3                         #  cmp_eax_ebx
0F94C0                       #  sete_al
0FB6C0                       #  movzx_eax,al
85C0                         #  test_eax,eax          # if
58                           #  pop_eax
0F84 14000000                #  je %_fhgetc_else1
50                           #  push_eax              # ch (local)
8D85 08000000                #  lea_eax,[ebp+DWORD] %8
8A00                         #  mov_al,[eax]          # ?1
0FB6C0                       #  movzx_eax,al
0FBEC0                       #  movsx_eax,al          # char
E9 06000000                  #  jmp %_fhgetc_else_end1
                             #:_fhgetc_else1
50                           #  push_eax              # 4294967295
B8 FFFFFFFF                  #  mov_eax, %4294967295
                             #:_fhgetc_else_end1
8B5D00                       #  mov_ebx,[ebp]         # return
53                           #  push_ebx
C3                           #  ret
50                           #  push_eax              # 0
B8 00000000                  #  mov_eax, %0
8B5D00                       #  mov_ebx,[ebp]         # return
53                           #  push_ebx
C3                           #  ret
                             #
                             #:f_main
58                           #  pop_eax
894500                       #  mov_[ebp],eax
58                           #  pop_eax
50                           #  push_eax              # argv (local)
8D85 04000000                #  lea_eax,[ebp+DWORD] %4
5B                           #  pop_ebx               # =:
8918                         #  mov_[eax],ebx
58                           #  pop_eax
50                           #  push_eax              # argc (local)
8D85 08000000                #  lea_eax,[ebp+DWORD] %8
5B                           #  pop_ebx               # =:
8918                         #  mov_[eax],ebx
58                           #  pop_eax
50                           #  push_eax              # __init_globals__ (function)
B8 B2870408                  #  mov_eax, &f___init_globals__
81C5 0C000000                #  add_ebp, %12         # ()
FFD0                         #  call_eax
81ED 0C000000                #  sub_ebp, %12
50                           #  push_eax              # _sys_env (global)
B8 DF870408                  #  mov_eax, &g__sys_env
50                           #  push_eax              # argv (local)
8D85 04000000                #  lea_eax,[ebp+DWORD] %4
8B00                         #  mov_eax,[eax]         # ?
50                           #  push_eax              # argc (local)
8D85 08000000                #  lea_eax,[ebp+DWORD] %8
8B00                         #  mov_eax,[eax]         # ?
50                           #  push_eax              # 4
B8 04000000                  #  mov_eax, %4
5B                           #  pop_ebx               # *
F7E3                         #  mul_ebx
50                           #  push_eax              # 4
B8 04000000                  #  mov_eax, %4
5B                           #  pop_ebx               # +
01D8                         #  add_eax,ebx
5B                           #  pop_ebx               # +
01D8                         #  add_eax,ebx
5B                           #  pop_ebx               # =
8903                         #  mov_[ebx],eax
58                           #  pop_eax               # ;
50                           #  push_eax              # input_fn (local)
8D85 0C000000                #  lea_eax,[ebp+DWORD] %12
50                           #  push_eax              # 'kaem.x86'
B8 D6870408                  #  mov_eax, &string_0
5B                           #  pop_ebx               # =
8903                         #  mov_[ebx],eax
58                           #  pop_eax               # ;
                             ## kaem-minimal.c 31
50                           #  push_eax              # argc (local)
8D85 08000000                #  lea_eax,[ebp+DWORD] %8
8B00                         #  mov_eax,[eax]         # ?
50                           #  push_eax              # 1
B8 01000000                  #  mov_eax, %1
5B                           #  pop_ebx               # >s
39C3                         #  cmp_eax_ebx
0F9FC0                       #  setg_al
0FB6C0                       #  movzx_eax,al
85C0                         #  test_eax,eax          # if
58                           #  pop_eax
0F84 28000000                #  je %_main_else1
                             ## kaem-minimal.c 32
                             ## kaem-minimal.c 33
50                           #  push_eax              # input_fn (local)
8D85 0C000000                #  lea_eax,[ebp+DWORD] %12
50                           #  push_eax              # argv (local)
8D85 04000000                #  lea_eax,[ebp+DWORD] %4
8B00                         #  mov_eax,[eax]         # ?
50                           #  push_eax              # 1
B8 01000000                  #  mov_eax, %1
50                           #  push_eax              # 4
B8 04000000                  #  mov_eax, %4
5B                           #  pop_ebx               # *
F7E3                         #  mul_ebx
5B                           #  pop_ebx               # +
01D8                         #  add_eax,ebx
8B00                         #  mov_eax,[eax]         # ?
5B                           #  pop_ebx               # =
8903                         #  mov_[ebx],eax
58                           #  pop_eax               # ;
                             #:_main_else1 # no else
50                           #  push_eax              # fh (local)
8D85 10000000                #  lea_eax,[ebp+DWORD] %16
50                           #  push_eax              # 5
B8 05000000                  #  mov_eax, %5
50                           #  push_eax              # input_fn (local)
8D85 0C000000                #  lea_eax,[ebp+DWORD] %12
8B00                         #  mov_eax,[eax]         # ?
50                           #  push_eax              # 0
B8 00000000                  #  mov_eax, %0
50                           #  push_eax              # 511
B8 FF010000                  #  mov_eax, %511
50                           #  push_eax              # sys_int80 (function)
B8 89800408                  #  mov_eax, &f_sys_int80
81C5 14000000                #  add_ebp, %20         # ()
FFD0                         #  call_eax
81ED 14000000                #  sub_ebp, %20
5B                           #  pop_ebx               # =
8903                         #  mov_[ebx],eax
58                           #  pop_eax               # ;
                             ## kaem-minimal.c 37
50                           #  push_eax              # fh (local)
8D85 10000000                #  lea_eax,[ebp+DWORD] %16
8B00                         #  mov_eax,[eax]         # ?
50                           #  push_eax              # 0
B8 00000000                  #  mov_eax, %0
5B                           #  pop_ebx               # ==
39C3                         #  cmp_eax_ebx
0F94C0                       #  sete_al
0FB6C0                       #  movzx_eax,al
85C0                         #  test_eax,eax          # if
58                           #  pop_eax
0F84 0B000000                #  je %_main_else2
                             ## kaem-minimal.c 38
                             ## kaem-minimal.c 39
50                           #  push_eax              # 1
B8 01000000                  #  mov_eax, %1
8B5D00                       #  mov_ebx,[ebp]         # return
53                           #  push_ebx
C3                           #  ret
                             #:_main_else2 # no else
50                           #  push_eax              # env (local)
8D85 14000000                #  lea_eax,[ebp+DWORD] %20
50                           #  push_eax              # argv (local)
8D85 04000000                #  lea_eax,[ebp+DWORD] %4
8B00                         #  mov_eax,[eax]         # ?
50                           #  push_eax              # argc (local)
8D85 08000000                #  lea_eax,[ebp+DWORD] %8
8B00                         #  mov_eax,[eax]         # ?
50                           #  push_eax              # 1
B8 01000000                  #  mov_eax, %1
5B                           #  pop_ebx               # +
01D8                         #  add_eax,ebx
50                           #  push_eax              # 4
B8 04000000                  #  mov_eax, %4
5B                           #  pop_ebx               # *
F7E3                         #  mul_ebx
5B                           #  pop_ebx               # +
01D8                         #  add_eax,ebx
5B                           #  pop_ebx               # =
8903                         #  mov_[ebx],eax
58                           #  pop_eax               # ;
                             ## kaem-minimal.c 44
                             #:_main_loop3
                             ## kaem-minimal.c 45
50                           #  push_eax              # s (local)
8D85 E0000000                #  lea_eax,[ebp+DWORD] %224
50                           #  push_eax              # line (local)
8D85 18000000                #  lea_eax,[ebp+DWORD] %24
5B                           #  pop_ebx               # =
8903                         #  mov_[ebx],eax
58                           #  pop_eax               # ;
                             ## kaem-minimal.c 49
                             #:_main_loop4
                             ## kaem-minimal.c 50
                             ## kaem-minimal.c 51
50                           #  push_eax              # ch (local)
8D85 E4000000                #  lea_eax,[ebp+DWORD] %228
50                           #  push_eax              # fh (local)
8D85 10000000                #  lea_eax,[ebp+DWORD] %16
8B00                         #  mov_eax,[eax]         # ?
50                           #  push_eax              # fhgetc (function)
B8 B5800408                  #  mov_eax, &f_fhgetc
81C5 E8000000                #  add_ebp, %232         # ()
FFD0                         #  call_eax
81ED E8000000                #  sub_ebp, %232
5B                           #  pop_ebx               # =
8903                         #  mov_[ebx],eax
58                           #  pop_eax               # ;
                             ## kaem-minimal.c 52
50                           #  push_eax              # ch (local)
8D85 E4000000                #  lea_eax,[ebp+DWORD] %228
8B00                         #  mov_eax,[eax]         # ?
50                           #  push_eax              # 4294967295
B8 FFFFFFFF                  #  mov_eax, %4294967295
5B                           #  pop_ebx               # ==
39C3                         #  cmp_eax_ebx
0F94C0                       #  sete_al
0FB6C0                       #  movzx_eax,al
85C0                         #  test_eax,eax          # ||
0F85 19000000                #  jne %_main_or_end5
58                           #  pop_eax
50                           #  push_eax              # ch (local)
8D85 E4000000                #  lea_eax,[ebp+DWORD] %228
8B00                         #  mov_eax,[eax]         # ?
50                           #  push_eax              # 10
B8 0A000000                  #  mov_eax, %10
5B                           #  pop_ebx               # ==
39C3                         #  cmp_eax_ebx
0F94C0                       #  sete_al
0FB6C0                       #  movzx_eax,al
                             #:_main_or_end5
85C0                         #  test_eax,eax          # ||
0F85 19000000                #  jne %_main_or_end6
58                           #  pop_eax
50                           #  push_eax              # ch (local)
8D85 E4000000                #  lea_eax,[ebp+DWORD] %228
8B00                         #  mov_eax,[eax]         # ?
50                           #  push_eax              # 35
B8 23000000                  #  mov_eax, %35
5B                           #  pop_ebx               # ==
39C3                         #  cmp_eax_ebx
0F94C0                       #  sete_al
0FB6C0                       #  movzx_eax,al
                             #:_main_or_end6
85C0                         #  test_eax,eax          # if
58                           #  pop_eax
0F84 05000000                #  je %_main_else7
                             ## kaem-minimal.c 53
E9 33000000                  #  jmp %_main_loop_end4
                             ## kaem-minimal.c 54
                             #:_main_else7 # no else
50                           #  push_eax              # s (local)
8D85 E0000000                #  lea_eax,[ebp+DWORD] %224
50                           #  push_eax              # $ (dup)
8B00                         #  mov_eax,[eax]         # ?
50                           #  push_eax              # 1
B8 01000000                  #  mov_eax, %1
5B                           #  pop_ebx               # +
01D8                         #  add_eax,ebx
5B                           #  pop_ebx               # =
8903                         #  mov_[ebx],eax
50                           #  push_eax              # 1
B8 01000000                  #  mov_eax, %1
5B                           #  pop_ebx               # -
29C3                         #  sub_ebx,eax
89D8                         #  mov_eax,ebx
50                           #  push_eax              # ch (local)
8D85 E4000000                #  lea_eax,[ebp+DWORD] %228
8B00                         #  mov_eax,[eax]         # ?
5B                           #  pop_ebx               # =1
8803                         #  mov_[ebx],al
58                           #  pop_eax               # ;
E9 3DFFFFFF                  #  jmp %_main_loop4
                             #:_main_loop_end4
                             ## kaem-minimal.c 56
50                           #  push_eax              # s (local)
8D85 E0000000                #  lea_eax,[ebp+DWORD] %224
8B00                         #  mov_eax,[eax]         # ?
50                           #  push_eax              # 0
B8 00000000                  #  mov_eax, %0
5B                           #  pop_ebx               # =1
8803                         #  mov_[ebx],al
58                           #  pop_eax               # ;
50                           #  push_eax              # nr_tokens (local)
8D85 10010000                #  lea_eax,[ebp+DWORD] %272
50                           #  push_eax              # 0
B8 00000000                  #  mov_eax, %0
5B                           #  pop_ebx               # =
8903                         #  mov_[ebx],eax
58                           #  pop_eax               # ;
                             ## kaem-minimal.c 60
50                           #  push_eax              # s (local)
8D85 E0000000                #  lea_eax,[ebp+DWORD] %224
50                           #  push_eax              # line (local)
8D85 18000000                #  lea_eax,[ebp+DWORD] %24
5B                           #  pop_ebx               # =
8903                         #  mov_[ebx],eax
58                           #  pop_eax               # ;
                             ## kaem-minimal.c 62
                             #:_main_loop8
                             ## kaem-minimal.c 63
                             ## kaem-minimal.c 64
                             #:_main_loop9
50                           #  push_eax              # s (local)
8D85 E0000000                #  lea_eax,[ebp+DWORD] %224
8B00                         #  mov_eax,[eax]         # ?
8A00                         #  mov_al,[eax]          # ?1
0FB6C0                       #  movzx_eax,al
0FBEC0                       #  movsx_eax,al          # char
50                           #  push_eax              # 32
B8 20000000                  #  mov_eax, %32
5B                           #  pop_ebx               # ==
39C3                         #  cmp_eax_ebx
0F94C0                       #  sete_al
0FB6C0                       #  movzx_eax,al
85C0                         #  test_eax,eax          # ||
0F85 21000000                #  jne %_main_or_end10
58                           #  pop_eax
50                           #  push_eax              # s (local)
8D85 E0000000                #  lea_eax,[ebp+DWORD] %224
8B00                         #  mov_eax,[eax]         # ?
8A00                         #  mov_al,[eax]          # ?1
0FB6C0                       #  movzx_eax,al
0FBEC0                       #  movsx_eax,al          # char
50                           #  push_eax              # 9
B8 09000000                  #  mov_eax, %9
5B                           #  pop_ebx               # ==
39C3                         #  cmp_eax_ebx
0F94C0                       #  sete_al
0FB6C0                       #  movzx_eax,al
                             #:_main_or_end10
85C0                         #  test_eax,eax          # !
0F94C0                       #  sete_al
0FB6C0                       #  movzx_eax,al
85C0                         #  test_eax,eax          # if
58                           #  pop_eax
0F84 05000000                #  je %_main_else11
E9 27000000                  #  jmp %_main_loop_end9
                             ## kaem-minimal.c 65
                             #:_main_else11 # no else
50                           #  push_eax              # s (local)
8D85 E0000000                #  lea_eax,[ebp+DWORD] %224
50                           #  push_eax              # $ (dup)
8B00                         #  mov_eax,[eax]         # ?
50                           #  push_eax              # 1
B8 01000000                  #  mov_eax, %1
5B                           #  pop_ebx               # +
01D8                         #  add_eax,ebx
5B                           #  pop_ebx               # =
8903                         #  mov_[ebx],eax
50                           #  push_eax              # 1
B8 01000000                  #  mov_eax, %1
5B                           #  pop_ebx               # -
29C3                         #  sub_ebx,eax
89D8                         #  mov_eax,ebx
58                           #  pop_eax               # ;
E9 7AFFFFFF                  #  jmp %_main_loop9
                             #:_main_loop_end9
                             ## kaem-minimal.c 66
50                           #  push_eax              # s (local)
8D85 E0000000                #  lea_eax,[ebp+DWORD] %224
8B00                         #  mov_eax,[eax]         # ?
8A00                         #  mov_al,[eax]          # ?1
0FB6C0                       #  movzx_eax,al
0FBEC0                       #  movsx_eax,al          # char
50                           #  push_eax              # 0
B8 00000000                  #  mov_eax, %0
5B                           #  pop_ebx               # ==
39C3                         #  cmp_eax_ebx
0F94C0                       #  sete_al
0FB6C0                       #  movzx_eax,al
85C0                         #  test_eax,eax          # if
58                           #  pop_eax
0F84 05000000                #  je %_main_else12
                             ## kaem-minimal.c 67
E9 FC000000                  #  jmp %_main_loop_end8
                             ## kaem-minimal.c 68
                             #:_main_else12 # no else
50                           #  push_eax              # tokens (local)
8D85 E8000000                #  lea_eax,[ebp+DWORD] %232
50                           #  push_eax              # nr_tokens (local)
8D85 10010000                #  lea_eax,[ebp+DWORD] %272
50                           #  push_eax              # $ (dup)
8B00                         #  mov_eax,[eax]         # ?
50                           #  push_eax              # 1
B8 01000000                  #  mov_eax, %1
5B                           #  pop_ebx               # +
01D8                         #  add_eax,ebx
5B                           #  pop_ebx               # =
8903                         #  mov_[ebx],eax
50                           #  push_eax              # 1
B8 01000000                  #  mov_eax, %1
5B                           #  pop_ebx               # -
29C3                         #  sub_ebx,eax
89D8                         #  mov_eax,ebx
50                           #  push_eax              # 4
B8 04000000                  #  mov_eax, %4
5B                           #  pop_ebx               # *
F7E3                         #  mul_ebx
5B                           #  pop_ebx               # +
01D8                         #  add_eax,ebx
50                           #  push_eax              # s (local)
8D85 E0000000                #  lea_eax,[ebp+DWORD] %224
8B00                         #  mov_eax,[eax]         # ?
5B                           #  pop_ebx               # =
8903                         #  mov_[ebx],eax
58                           #  pop_eax               # ;
                             ## kaem-minimal.c 69
                             #:_main_loop13
50                           #  push_eax              # s (local)
8D85 E0000000                #  lea_eax,[ebp+DWORD] %224
8B00                         #  mov_eax,[eax]         # ?
8A00                         #  mov_al,[eax]          # ?1
0FB6C0                       #  movzx_eax,al
0FBEC0                       #  movsx_eax,al          # char
50                           #  push_eax              # 32
B8 20000000                  #  mov_eax, %32
5B                           #  pop_ebx               # >s
39C3                         #  cmp_eax_ebx
0F9FC0                       #  setg_al
0FB6C0                       #  movzx_eax,al
85C0                         #  test_eax,eax          # !
0F94C0                       #  sete_al
0FB6C0                       #  movzx_eax,al
85C0                         #  test_eax,eax          # if
58                           #  pop_eax
0F84 05000000                #  je %_main_else14
E9 27000000                  #  jmp %_main_loop_end13
                             ## kaem-minimal.c 70
                             #:_main_else14 # no else
50                           #  push_eax              # s (local)
8D85 E0000000                #  lea_eax,[ebp+DWORD] %224
50                           #  push_eax              # $ (dup)
8B00                         #  mov_eax,[eax]         # ?
50                           #  push_eax              # 1
B8 01000000                  #  mov_eax, %1
5B                           #  pop_ebx               # +
01D8                         #  add_eax,ebx
5B                           #  pop_ebx               # =
8903                         #  mov_[ebx],eax
50                           #  push_eax              # 1
B8 01000000                  #  mov_eax, %1
5B                           #  pop_ebx               # -
29C3                         #  sub_ebx,eax
89D8                         #  mov_eax,ebx
58                           #  pop_eax               # ;
E9 A3FFFFFF                  #  jmp %_main_loop13
                             #:_main_loop_end13
                             ## kaem-minimal.c 71
50                           #  push_eax              # s (local)
8D85 E0000000                #  lea_eax,[ebp+DWORD] %224
8B00                         #  mov_eax,[eax]         # ?
8A00                         #  mov_al,[eax]          # ?1
0FB6C0                       #  movzx_eax,al
0FBEC0                       #  movsx_eax,al          # char
50                           #  push_eax              # 0
B8 00000000                  #  mov_eax, %0
5B                           #  pop_ebx               # ==
39C3                         #  cmp_eax_ebx
0F94C0                       #  sete_al
0FB6C0                       #  movzx_eax,al
85C0                         #  test_eax,eax          # if
58                           #  pop_eax
0F84 05000000                #  je %_main_else15
                             ## kaem-minimal.c 72
E9 30000000                  #  jmp %_main_loop_end8
                             ## kaem-minimal.c 73
                             #:_main_else15 # no else
50                           #  push_eax              # s (local)
8D85 E0000000                #  lea_eax,[ebp+DWORD] %224
50                           #  push_eax              # $ (dup)
8B00                         #  mov_eax,[eax]         # ?
50                           #  push_eax              # 1
B8 01000000                  #  mov_eax, %1
5B                           #  pop_ebx               # +
01D8                         #  add_eax,ebx
5B                           #  pop_ebx               # =
8903                         #  mov_[ebx],eax
50                           #  push_eax              # 1
B8 01000000                  #  mov_eax, %1
5B                           #  pop_ebx               # -
29C3                         #  sub_ebx,eax
89D8                         #  mov_eax,ebx
50                           #  push_eax              # 0
B8 00000000                  #  mov_eax, %0
5B                           #  pop_ebx               # =1
8803                         #  mov_[ebx],al
58                           #  pop_eax               # ;
E9 50FEFFFF                  #  jmp %_main_loop8
                             #:_main_loop_end8
                             ## kaem-minimal.c 75
50                           #  push_eax              # tokens (local)
8D85 E8000000                #  lea_eax,[ebp+DWORD] %232
50                           #  push_eax              # nr_tokens (local)
8D85 10010000                #  lea_eax,[ebp+DWORD] %272
8B00                         #  mov_eax,[eax]         # ?
50                           #  push_eax              # 4
B8 04000000                  #  mov_eax, %4
5B                           #  pop_ebx               # *
F7E3                         #  mul_ebx
5B                           #  pop_ebx               # +
01D8                         #  add_eax,ebx
50                           #  push_eax              # 0
B8 00000000                  #  mov_eax, %0
5B                           #  pop_ebx               # =
8903                         #  mov_[ebx],eax
58                           #  pop_eax               # ;
                             ## kaem-minimal.c 77
50                           #  push_eax              # nr_tokens (local)
8D85 10010000                #  lea_eax,[ebp+DWORD] %272
8B00                         #  mov_eax,[eax]         # ?
50                           #  push_eax              # 0
B8 00000000                  #  mov_eax, %0
5B                           #  pop_ebx               # >s
39C3                         #  cmp_eax_ebx
0F9FC0                       #  setg_al
0FB6C0                       #  movzx_eax,al
85C0                         #  test_eax,eax          # if
58                           #  pop_eax
0F84 35010000                #  je %_main_else16
                             ## kaem-minimal.c 78
50                           #  push_eax              # f (local)
8D85 14010000                #  lea_eax,[ebp+DWORD] %276
50                           #  push_eax              # 2
B8 02000000                  #  mov_eax, %2
50                           #  push_eax              # 0
B8 00000000                  #  mov_eax, %0
50                           #  push_eax              # 0
B8 00000000                  #  mov_eax, %0
50                           #  push_eax              # 0
B8 00000000                  #  mov_eax, %0
50                           #  push_eax              # sys_int80 (function)
B8 89800408                  #  mov_eax, &f_sys_int80
81C5 18010000                #  add_ebp, %280         # ()
FFD0                         #  call_eax
81ED 18010000                #  sub_ebp, %280
5B                           #  pop_ebx               # =
8903                         #  mov_[ebx],eax
58                           #  pop_eax               # ;
                             ## kaem-minimal.c 81
50                           #  push_eax              # f (local)
8D85 14010000                #  lea_eax,[ebp+DWORD] %276
8B00                         #  mov_eax,[eax]         # ?
50                           #  push_eax              # 4294967295
B8 FFFFFFFF                  #  mov_eax, %4294967295
5B                           #  pop_ebx               # ==
39C3                         #  cmp_eax_ebx
0F94C0                       #  sete_al
0FB6C0                       #  movzx_eax,al
85C0                         #  test_eax,eax          # if
58                           #  pop_eax
0F84 0B000000                #  je %_main_else17
                             ## kaem-minimal.c 82
                             ## kaem-minimal.c 83
50                           #  push_eax              # 1
B8 01000000                  #  mov_eax, %1
8B5D00                       #  mov_ebx,[ebp]         # return
53                           #  push_ebx
C3                           #  ret
                             ## kaem-minimal.c 85
                             #:_main_else17 # no else
50                           #  push_eax              # f (local)
8D85 14010000                #  lea_eax,[ebp+DWORD] %276
8B00                         #  mov_eax,[eax]         # ?
50                           #  push_eax              # 0
B8 00000000                  #  mov_eax, %0
5B                           #  pop_ebx               # ==
39C3                         #  cmp_eax_ebx
0F94C0                       #  sete_al
0FB6C0                       #  movzx_eax,al
85C0                         #  test_eax,eax          # if
58                           #  pop_eax
0F84 51000000                #  je %_main_else18
                             ## kaem-minimal.c 86
                             ## kaem-minimal.c 16
50                           #  push_eax              # 11
B8 0B000000                  #  mov_eax, %11
50                           #  push_eax              # tokens (local)
8D85 E8000000                #  lea_eax,[ebp+DWORD] %232
50                           #  push_eax              # 0
B8 00000000                  #  mov_eax, %0
50                           #  push_eax              # 4
B8 04000000                  #  mov_eax, %4
5B                           #  pop_ebx               # *
F7E3                         #  mul_ebx
5B                           #  pop_ebx               # +
01D8                         #  add_eax,ebx
8B00                         #  mov_eax,[eax]         # ?
50                           #  push_eax              # tokens (local)
8D85 E8000000                #  lea_eax,[ebp+DWORD] %232
50                           #  push_eax              # env (local)
8D85 14000000                #  lea_eax,[ebp+DWORD] %20
8B00                         #  mov_eax,[eax]         # ?
50                           #  push_eax              # sys_int80 (function)
B8 89800408                  #  mov_eax, &f_sys_int80
81C5 18010000                #  add_ebp, %280         # ()
FFD0                         #  call_eax
81ED 18010000                #  sub_ebp, %280
58                           #  pop_eax               # ;
                             ## kaem-minimal.c 89
50                           #  push_eax              # 1
B8 01000000                  #  mov_eax, %1
8B5D00                       #  mov_ebx,[ebp]         # return
53                           #  push_ebx
C3                           #  ret
                             #:_main_else18 # no else
                             ## kaem-minimal.c 17
50                           #  push_eax              # 7
B8 07000000                  #  mov_eax, %7
50                           #  push_eax              # f (local)
8D85 14010000                #  lea_eax,[ebp+DWORD] %276
8B00                         #  mov_eax,[eax]         # ?
50                           #  push_eax              # status (local)
8D85 18010000                #  lea_eax,[ebp+DWORD] %280
50                           #  push_eax              # 0
B8 00000000                  #  mov_eax, %0
50                           #  push_eax              # sys_int80 (function)
B8 89800408                  #  mov_eax, &f_sys_int80
81C5 1C010000                #  add_ebp, %284         # ()
FFD0                         #  call_eax
81ED 1C010000                #  sub_ebp, %284
58                           #  pop_eax               # ;
                             ## kaem-minimal.c 95
50                           #  push_eax              # status (local)
8D85 18010000                #  lea_eax,[ebp+DWORD] %280
8B00                         #  mov_eax,[eax]         # ?
50                           #  push_eax              # 0
B8 00000000                  #  mov_eax, %0
5B                           #  pop_ebx               # !=
39C3                         #  cmp_eax_ebx
0F95C0                       #  setne_al
0FB6C0                       #  movzx_eax,al
85C0                         #  test_eax,eax          # if
58                           #  pop_eax
0F84 0E000000                #  je %_main_else19
                             ## kaem-minimal.c 96
                             ## kaem-minimal.c 97
50                           #  push_eax              # status (local)
8D85 18010000                #  lea_eax,[ebp+DWORD] %280
8B00                         #  mov_eax,[eax]         # ?
8B5D00                       #  mov_ebx,[ebp]         # return
53                           #  push_ebx
C3                           #  ret
                             #:_main_else19 # no else
                             ## kaem-minimal.c 101
                             #:_main_else16 # no else
50                           #  push_eax              # ch (local)
8D85 E4000000                #  lea_eax,[ebp+DWORD] %228
8B00                         #  mov_eax,[eax]         # ?
50                           #  push_eax              # 35
B8 23000000                  #  mov_eax, %35
5B                           #  pop_ebx               # ==
39C3                         #  cmp_eax_ebx
0F94C0                       #  sete_al
0FB6C0                       #  movzx_eax,al
85C0                         #  test_eax,eax          # if
58                           #  pop_eax
0F84 7C000000                #  je %_main_else20
                             ## kaem-minimal.c 102
                             ## kaem-minimal.c 103
                             #:_main_loop21
                             ## kaem-minimal.c 104
                             ## kaem-minimal.c 105
50                           #  push_eax              # ch (local)
8D85 E4000000                #  lea_eax,[ebp+DWORD] %228
50                           #  push_eax              # fh (local)
8D85 10000000                #  lea_eax,[ebp+DWORD] %16
8B00                         #  mov_eax,[eax]         # ?
50                           #  push_eax              # fhgetc (function)
B8 B5800408                  #  mov_eax, &f_fhgetc
81C5 14010000                #  add_ebp, %276         # ()
FFD0                         #  call_eax
81ED 14010000                #  sub_ebp, %276
5B                           #  pop_ebx               # =
8903                         #  mov_[ebx],eax
58                           #  pop_eax               # ;
50                           #  push_eax              # ch (local)
8D85 E4000000                #  lea_eax,[ebp+DWORD] %228
8B00                         #  mov_eax,[eax]         # ?
50                           #  push_eax              # 4294967295
B8 FFFFFFFF                  #  mov_eax, %4294967295
5B                           #  pop_ebx               # !=
39C3                         #  cmp_eax_ebx
0F95C0                       #  setne_al
0FB6C0                       #  movzx_eax,al
85C0                         #  test_eax,eax          # &&
0F84 19000000                #  je %_main_and_end22
58                           #  pop_eax
50                           #  push_eax              # ch (local)
8D85 E4000000                #  lea_eax,[ebp+DWORD] %228
8B00                         #  mov_eax,[eax]         # ?
50                           #  push_eax              # 10
B8 0A000000                  #  mov_eax, %10
5B                           #  pop_ebx               # !=
39C3                         #  cmp_eax_ebx
0F95C0                       #  setne_al
0FB6C0                       #  movzx_eax,al
                             #:_main_and_end22
85C0                         #  test_eax,eax          # !
0F94C0                       #  sete_al
0FB6C0                       #  movzx_eax,al
85C0                         #  test_eax,eax          # if
58                           #  pop_eax
0F84 05000000                #  je %_main_else23
E9 05000000                  #  jmp %_main_loop_end21
                             #:_main_else23 # no else
E9 84FFFFFF                  #  jmp %_main_loop21
                             #:_main_loop_end21
                             ## kaem-minimal.c 108
                             #:_main_else20 # no else
50                           #  push_eax              # ch (local)
8D85 E4000000                #  lea_eax,[ebp+DWORD] %228
8B00                         #  mov_eax,[eax]         # ?
50                           #  push_eax              # 4294967295
B8 FFFFFFFF                  #  mov_eax, %4294967295
5B                           #  pop_ebx               # ==
39C3                         #  cmp_eax_ebx
0F94C0                       #  sete_al
0FB6C0                       #  movzx_eax,al
85C0                         #  test_eax,eax          # if
58                           #  pop_eax
0F84 05000000                #  je %_main_else24
                             ## kaem-minimal.c 109
E9 05000000                  #  jmp %_main_loop_end3
                             #:_main_else24 # no else
E9 01FBFFFF                  #  jmp %_main_loop3
                             #:_main_loop_end3
                             ## kaem-minimal.c 111
50                           #  push_eax              # 0
B8 00000000                  #  mov_eax, %0
8B5D00                       #  mov_ebx,[ebp]         # return
53                           #  push_ebx
C3                           #  ret
50                           #  push_eax              # 0
B8 00000000                  #  mov_eax, %0
8B5D00                       #  mov_ebx,[ebp]         # return
53                           #  push_ebx
C3                           #  ret
                             #
                             #:f___init_globals__
58                           #  pop_eax
894500                       #  mov_[ebp],eax
58                           #  pop_eax
50                           #  push_eax              # _sys_env (global)
B8 DF870408                  #  mov_eax, &g__sys_env
50                           #  push_eax              # 0
B8 00000000                  #  mov_eax, %0
5B                           #  pop_ebx               # =
8903                         #  mov_[ebx],eax
58                           #  pop_eax               # ;
50                           #  push_eax              # 0
B8 00000000                  #  mov_eax, %0
8B5D00                       #  mov_ebx,[ebp]         # return
53                           #  push_ebx
C3                           #  ret
                             #
                             #:ELF_data
                             #
 00000000                    #:SYS_MALLOC NULL
 6B61656D2E78383600          #:string_0  "kaem.x86"
                             #:g__sys_env
00000000                     #  NULL
                             #
                             #:ELF_end
                             # Generated sections
                             
00                           # NULL
                             
2E7465787400                 
                             
2E736873747274616200         
                             
2E73796D74616200             
                             
2E73747274616200             
                             
                             
00000000                     #sh_name
00000000                     #sh_type
00000000                     #sh_flags
00000000                     #sh_addr
00000000                     #sh_offset
00000000                     #sh_size
00000000                     #sh_link
00000000                     #sh_info
01000000                     #sh_addralign
00000000                     #sh_entsize
                             
                             
01000000                     #sh_name
01000000                     #sh_type
06000000                     #sh_flags
54800408                     #sh_addr
54000000                     #sh_offset
7E070000                     #sh_size
00000000                     #sh_link
00000000                     #sh_info
01000000                     #sh_addralign
00000000                     #sh_entsize
                             
                             
07000000                     #sh_name
03000000                     #sh_type
00000000                     #sh_flags
E3870408                     #sh_addr
E3070000                     #sh_offset
21000000                     #sh_size
00000000                     #sh_link
00000000                     #sh_info
01000000                     #sh_addralign
00000000                     #sh_entsize
                             
                             
19000000                     #sh_name
03000000                     #sh_type
00000000                     #sh_flags
CC880408                     #sh_addr
CC080000                     #sh_offset
42020000                     #sh_size
00000000                     #sh_link
00000000                     #sh_info
01000000                     #sh_addralign
00000000                     #sh_entsize
                             
                             
11000000                     #sh_name
02000000                     #sh_type
00000000                     #sh_flags
0E8B0408                     #sh_addr
0E0B0000                     #sh_offset
E0020000                     #sh_size
03000000                     #sh_link
2E000000                     #sh_info
01000000                     #sh_addralign
10000000                     #sh_entsize
                             
                             # Generated string table
                             
00                           # NULL string
 454C465F7465787400          # "ELF_text"
 5F737461727400              # "_start"
 665F7379735F696E74383000    # "f_sys_int80"
 665F7379735F6D616C6C6F6300  # "f_sys_malloc"
 5359535F4D414C4C4F4300      # "SYS_MALLOC"
 665F66686765746300          # "f_fhgetc"
 5F6668676574635F656C73653100# "_fhgetc_else1"
 5F6668676574635F656C73655F656E643100# "_fhgetc_else_end1"
 665F6D61696E00              # "f_main"
 5F6D61696E5F656C73653100    # "_main_else1"
 5F6D61696E5F656C73653200    # "_main_else2"
 5F6D61696E5F6C6F6F703300    # "_main_loop3"
 5F6D61696E5F6C6F6F703400    # "_main_loop4"
 5F6D61696E5F6F725F656E643500# "_main_or_end5"
 5F6D61696E5F6F725F656E643600# "_main_or_end6"
 5F6D61696E5F656C73653700    # "_main_else7"
 5F6D61696E5F6C6F6F705F656E643400# "_main_loop_end4"
 5F6D61696E5F6C6F6F703800    # "_main_loop8"
 5F6D61696E5F6C6F6F703900    # "_main_loop9"
 5F6D61696E5F6F725F656E64313000# "_main_or_end10"
 5F6D61696E5F656C7365313100  # "_main_else11"
 5F6D61696E5F6C6F6F705F656E643900# "_main_loop_end9"
 5F6D61696E5F656C7365313200  # "_main_else12"
 5F6D61696E5F6C6F6F70313300  # "_main_loop13"
 5F6D61696E5F656C7365313400  # "_main_else14"
 5F6D61696E5F6C6F6F705F656E64313300# "_main_loop_end13"
 5F6D61696E5F656C7365313500  # "_main_else15"
 5F6D61696E5F6C6F6F705F656E643800# "_main_loop_end8"
 5F6D61696E5F656C7365313700  # "_main_else17"
 5F6D61696E5F656C7365313800  # "_main_else18"
 5F6D61696E5F656C7365313900  # "_main_else19"
 5F6D61696E5F656C7365313600  # "_main_else16"
 5F6D61696E5F6C6F6F70323100  # "_main_loop21"
 5F6D61696E5F616E645F656E64323200# "_main_and_end22"
 5F6D61696E5F656C7365323300  # "_main_else23"
 5F6D61696E5F6C6F6F705F656E64323100# "_main_loop_end21"
 5F6D61696E5F656C7365323000  # "_main_else20"
 5F6D61696E5F656C7365323400  # "_main_else24"
 5F6D61696E5F6C6F6F705F656E643300# "_main_loop_end3"
 665F5F5F696E69745F676C6F62616C735F5F00# "f___init_globals__"
 454C465F6461746100          # "ELF_data"
 5359535F4D414C4C4F4300      # "SYS_MALLOC"
 737472696E675F3000          # "string_0"
 675F5F7379735F656E7600      # "g__sys_env"
 454C465F656E6400            # "ELF_end"
                             # END Generated string table
                             
                             
                             # Generated symbol table
                             
                             # Required NULL symbol entry
00000000                     # st_name
00000000                     # st_value
00000000                     # st_size
00                           # st_info
00                           # st_other
0100                         # st_shndx
                             
01000000                     # st_name
54800408                     #st_value
00000000                     # st_size (unknown size)
02                           # st_info (FUNC)
00                           # st_other (default)
0100                         # st_shndx
                             
0A000000                     # st_name
54800408                     #st_value
00000000                     # st_size (unknown size)
02                           # st_info (FUNC)
02                           # st_other (hidden)
0100                         # st_shndx
                             
11000000                     # st_name
89800408                     #st_value
00000000                     # st_size (unknown size)
02                           # st_info (FUNC)
00                           # st_other (default)
0100                         # st_shndx
                             
1D000000                     # st_name
92800408                     #st_value
00000000                     # st_size (unknown size)
02                           # st_info (FUNC)
00                           # st_other (default)
0100                         # st_shndx
                             
1B020000                     # st_name
D2870408                     #st_value
00000000                     # st_size (unknown size)
02                           # st_info (FUNC)
00                           # st_other (default)
0100                         # st_shndx
                             
35000000                     # st_name
B5800408                     #st_value
00000000                     # st_size (unknown size)
02                           # st_info (FUNC)
00                           # st_other (default)
0100                         # st_shndx
                             
3E000000                     # st_name
35810408                     #st_value
00000000                     # st_size (unknown size)
02                           # st_info (FUNC)
02                           # st_other (hidden)
0100                         # st_shndx
                             
4C000000                     # st_name
3B810408                     #st_value
00000000                     # st_size (unknown size)
02                           # st_info (FUNC)
02                           # st_other (hidden)
0100                         # st_shndx
                             
5E000000                     # st_name
4B810408                     #st_value
00000000                     # st_size (unknown size)
02                           # st_info (FUNC)
00                           # st_other (default)
0100                         # st_shndx
                             
65000000                     # st_name
05820408                     #st_value
00000000                     # st_size (unknown size)
02                           # st_info (FUNC)
02                           # st_other (hidden)
0100                         # st_shndx
                             
71000000                     # st_name
6B820408                     #st_value
00000000                     # st_size (unknown size)
02                           # st_info (FUNC)
02                           # st_other (hidden)
0100                         # st_shndx
                             
7D000000                     # st_name
9D820408                     #st_value
00000000                     # st_size (unknown size)
02                           # st_info (FUNC)
02                           # st_other (hidden)
0100                         # st_shndx
                             
89000000                     # st_name
AF820408                     #st_value
00000000                     # st_size (unknown size)
02                           # st_info (FUNC)
02                           # st_other (hidden)
0100                         # st_shndx
                             
95000000                     # st_name
10830408                     #st_value
00000000                     # st_size (unknown size)
02                           # st_info (FUNC)
02                           # st_other (hidden)
0100                         # st_shndx
                             
A3000000                     # st_name
31830408                     #st_value
00000000                     # st_size (unknown size)
02                           # st_info (FUNC)
02                           # st_other (hidden)
0100                         # st_shndx
                             
B1000000                     # st_name
3F830408                     #st_value
00000000                     # st_size (unknown size)
02                           # st_info (FUNC)
02                           # st_other (hidden)
0100                         # st_shndx
                             
BD000000                     # st_name
72830408                     #st_value
00000000                     # st_size (unknown size)
02                           # st_info (FUNC)
02                           # st_other (hidden)
0100                         # st_shndx
                             
CD000000                     # st_name
A8830408                     #st_value
00000000                     # st_size (unknown size)
02                           # st_info (FUNC)
02                           # st_other (hidden)
0100                         # st_shndx
                             
D9000000                     # st_name
A8830408                     #st_value
00000000                     # st_size (unknown size)
02                           # st_info (FUNC)
02                           # st_other (hidden)
0100                         # st_shndx
                             
E5000000                     # st_name
F1830408                     #st_value
00000000                     # st_size (unknown size)
02                           # st_info (FUNC)
02                           # st_other (hidden)
0100                         # st_shndx
                             
F4000000                     # st_name
07840408                     #st_value
00000000                     # st_size (unknown size)
02                           # st_info (FUNC)
02                           # st_other (hidden)
0100                         # st_shndx
                             
01010000                     # st_name
2E840408                     #st_value
00000000                     # st_size (unknown size)
02                           # st_info (FUNC)
02                           # st_other (hidden)
0100                         # st_shndx
                             
11010000                     # st_name
5C840408                     #st_value
00000000                     # st_size (unknown size)
02                           # st_info (FUNC)
02                           # st_other (hidden)
0100                         # st_shndx
                             
1E010000                     # st_name
9D840408                     #st_value
00000000                     # st_size (unknown size)
02                           # st_info (FUNC)
02                           # st_other (hidden)
0100                         # st_shndx
                             
2B010000                     # st_name
D3840408                     #st_value
00000000                     # st_size (unknown size)
02                           # st_info (FUNC)
02                           # st_other (hidden)
0100                         # st_shndx
                             
38010000                     # st_name
FA840408                     #st_value
00000000                     # st_size (unknown size)
02                           # st_info (FUNC)
02                           # st_other (hidden)
0100                         # st_shndx
                             
49010000                     # st_name
28850408                     #st_value
00000000                     # st_size (unknown size)
02                           # st_info (FUNC)
02                           # st_other (hidden)
0100                         # st_shndx
                             
56010000                     # st_name
58850408                     #st_value
00000000                     # st_size (unknown size)
02                           # st_info (FUNC)
02                           # st_other (hidden)
0100                         # st_shndx
                             
66010000                     # st_name
02860408                     #st_value
00000000                     # st_size (unknown size)
02                           # st_info (FUNC)
02                           # st_other (hidden)
0100                         # st_shndx
                             
73010000                     # st_name
74860408                     #st_value
00000000                     # st_size (unknown size)
02                           # st_info (FUNC)
02                           # st_other (hidden)
0100                         # st_shndx
                             
80010000                     # st_name
D4860408                     #st_value
00000000                     # st_size (unknown size)
02                           # st_info (FUNC)
02                           # st_other (hidden)
0100                         # st_shndx
                             
8D010000                     # st_name
D4860408                     #st_value
00000000                     # st_size (unknown size)
02                           # st_info (FUNC)
02                           # st_other (hidden)
0100                         # st_shndx
                             
9A010000                     # st_name
F5860408                     #st_value
00000000                     # st_size (unknown size)
02                           # st_info (FUNC)
02                           # st_other (hidden)
0100                         # st_shndx
                             
A7010000                     # st_name
56870408                     #st_value
00000000                     # st_size (unknown size)
02                           # st_info (FUNC)
02                           # st_other (hidden)
0100                         # st_shndx
                             
B7010000                     # st_name
6C870408                     #st_value
00000000                     # st_size (unknown size)
02                           # st_info (FUNC)
02                           # st_other (hidden)
0100                         # st_shndx
                             
C4010000                     # st_name
71870408                     #st_value
00000000                     # st_size (unknown size)
02                           # st_info (FUNC)
02                           # st_other (hidden)
0100                         # st_shndx
                             
D5010000                     # st_name
71870408                     #st_value
00000000                     # st_size (unknown size)
02                           # st_info (FUNC)
02                           # st_other (hidden)
0100                         # st_shndx
                             
E2010000                     # st_name
97870408                     #st_value
00000000                     # st_size (unknown size)
02                           # st_info (FUNC)
02                           # st_other (hidden)
0100                         # st_shndx
                             
EF010000                     # st_name
9C870408                     #st_value
00000000                     # st_size (unknown size)
02                           # st_info (FUNC)
02                           # st_other (hidden)
0100                         # st_shndx
                             
FF010000                     # st_name
B2870408                     #st_value
00000000                     # st_size (unknown size)
02                           # st_info (FUNC)
00                           # st_other (default)
0100                         # st_shndx
                             
12020000                     # st_name
D2870408                     #st_value
00000000                     # st_size (unknown size)
02                           # st_info (FUNC)
00                           # st_other (default)
0100                         # st_shndx
                             
1B020000                     # st_name
D2870408                     #st_value
00000000                     # st_size (unknown size)
02                           # st_info (FUNC)
00                           # st_other (default)
0100                         # st_shndx
                             
26020000                     # st_name
D6870408                     #st_value
00000000                     # st_size (unknown size)
02                           # st_info (FUNC)
00                           # st_other (default)
0100                         # st_shndx
                             
2F020000                     # st_name
DF870408                     #st_value
00000000                     # st_size (unknown size)
02                           # st_info (FUNC)
00                           # st_other (default)
0100                         # st_shndx
                             
3A020000                     # st_name
EE8D0408                     #st_value
00000000                     # st_size (unknown size)
02                           # st_info (FUNC)
00                           # st_other (default)
0100                         # st_shndx
                             
                             # END Generated symbol table
                             
                             

File /x86/tools-mini-kaem.kaem

Source file is 'task3/tools-mini-kaem.kaem'.
URL: https://github.com/FransFaase/MES-replacement/blob/64abad6a2a55cbef00ffa065e1c019c6a1932acf/task3/tools-mini-kaem.kaem
#! /usr/bin/env bash

./usr/bin/hex0 ./x86/hex2_s.hex0 ./usr/bin/hex2

./usr/bin/hex2 -o ./usr/bin/blood-elf ./x86/ELF-x86-debug.hex2 ./x86/blood-elf_s.macro ./x86/blood-elf_s.blood_elf

./usr/bin/hex2 -o ./usr/bin/M1 ./x86/ELF-x86-debug.hex2 ./x86/M1_s.macro ./x86/M1_s.blood_elf

./usr/bin/blood-elf --file ./x86/stack_c_s.M1 --little-endian --output ./tmp/stack_c_s.blood_elf
./usr/bin/M1 -o ./tmp/stack_c_s.macro ./x86/stack_c_s.M1
./usr/bin/hex2 -o ./usr/bin/stack_c ./x86/ELF-x86-debug.hex2 ./tmp/stack_c_s.macro ./tmp/stack_c_s.blood_elf

./usr/bin/stack_c -i ./x86/stack_c_intro.M1 ./src/tcc_cc.sl -o tmp/tcc_cc.M1
./usr/bin/blood-elf --file tmp/tcc_cc.M1 --little-endian --output ./tmp/tcc_cc.blood_elf
./usr/bin/M1 ./tmp/tcc_cc.M1 -o ./tmp/tcc_cc.macro
./usr/bin/hex2 -o ./usr/bin/tcc_cc ./x86/ELF-x86-debug.hex2 ./tmp/tcc_cc.macro ./tmp/tcc_cc.blood_elf

./usr/bin/tcc_cc -o ./tmp/kaem.sl ./src/stdlib.c ./src/kaem.c
./usr/bin/stack_c -i ./x86/stack_c_intro.M1 ./tmp/kaem.sl -o tmp/kaem.M1
./usr/bin/blood-elf --file tmp/kaem.M1 --little-endian --output ./tmp/kaem.blood_elf
./usr/bin/M1 ./tmp/kaem.M1 -o ./tmp/kaem.macro
./usr/bin/hex2 -o ./usr/bin/kaem ./x86/ELF-x86-debug.hex2 ./tmp/kaem.macro ./tmp/kaem.blood_elf


File /x86/hex2_s.hex0

Source file is 'src/hex2_s.hex0'.
No URL
                             ### Copyright (C) 2016 Jeremiah Orians
                             ### Copyright (C) 2017 Jan Nieuwenhuizen <janneke@gnu.org>
                             ### This file is part of M2-Planet.
                             ###
                             ### M2-Planet is free software: you can redistribute it and/or modify
                             ### it under the terms of the GNU General Public License as published by
                             ### the Free Software Foundation, either version 3 of the License, or
                             ### (at your option) any later version.
                             ###
                             ### M2-Planet is distributed in the hope that it will be useful,
                             ### but WITHOUT ANY WARRANTY; without even the implied warranty of
                             ### MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
                             ### GNU General Public License for more details.
                             ###
                             ### You should have received a copy of the GNU General Public License
                             ### along with M2-Planet.  If not, see <http://www.gnu.org/licenses/>.
                             
                             ### stage0's hex2 format
                             ###    !<label>          1 byte relative
                             ###    $<label>          2 byte address
                             ###    @<label>          2 byte relative
                             ###    &<label>          4 byte address
                             ###    %<label>          4 byte relative
                             
                             ### if you wish to use this header, you need to add :ELF_end to the end of your
                             ### M1 or hex2 files.
                             
                             ## ELF Header
                             
                             
7F 45 4C 46                  # e_ident[EI_MAG0-3] ELF's magic number
                             
01                           # e_ident[EI_CLASS] Indicating 32 bit
01                           # e_ident[EI_DATA] Indicating little endianness
01                           # e_ident[EI_VERSION] Indicating original elf
                             
03                           # e_ident[EI_OSABI] Set at 3 because FreeBSD is strict
00                           # e_ident[EI_ABIVERSION] See above
                             
00 00 00 00 00 00 00         # e_ident[EI_PAD]
                             
02 00                        # e_type Indicating Executable
03 00                        # e_machine Indicating 386
01 00 00 00                  # e_version Indicating original elf
                             
54800408                     # e_entry Address of the entry point
34000000                     # e_phoff Address of program header table
35250000                     # e_shoff Address of section header table
                             
00 00 00 00                  # e_flags
                             
34 00                        # e_ehsize Indicating our 52 Byte header
                             
20 00                        # e_phentsize size of a program header table
01 00                        # e_phnum number of entries in program table
                             
28 00                        # e_shentsize size of a section header table
05 00                        # e_shnum number of entries in section table
                             
02 00                        # e_shstrndx index of the section names
                             
                             
                             
                             
01 00 00 00                  # ph_type: PT-LOAD = 1
00 00 00 00                  # ph_offset
00800408                     # ph_vaddr
00800408                     # ph_physaddr
6D3A0000                     # ph_filesz
6D3A0000                     # ph_memsz
07 00 00 00                  # ph_flags: PF-X|PF-W|PF-R = 7
01 00 00 00                  # ph_alignment
                             
                             
                             #
                             #:ELF_text
                             #
                             #:_start
B8 2D000000                  #    mov_eax, %45                                # the Syscall # for SYS_BRK
BB 00000000                  #    mov_ebx, %0                                 # Get current brk
CD80                         #    int_80                                      # Let the kernel do the work
A3 0BA10408                  #    mov_[DWORD],eax &SYS_MALLOC                 # Set our malloc pointer
                             #
                             #    # allocate memory for the second stack
B8 A0860100                  #    mov_eax, %100000
50                           #    push_eax                                    # (sys_malloc assums address)
E8 22000000                  #    call %f_sys_malloc
89C5                         #    mov_ebp,eax
                             #    
                             #    # setup argc and argv for the main function
89C2                         #    mov_edx,eax
58                           #    pop_eax
89E3                         #    mov_ebx,esp
50                           #    push_eax
53                           #    push_ebx
89D0                         #    mov_eax,edx
                             #
                             #    #call main
E8 931A0000                  #    call %f_main
                             #    
                             #    # program completed Successfully
89C3                         #    mov_ebx,eax                                 # All is well
B8 01000000                  #    mov_eax, %1                                 # put the exit syscall number in eax
CD80                         #    int_80                                      # Call it a good day
                             #
                             ## These sys_ function follow the same calling conventions
                             ## as all the other functions. To access the arguments on the stack
                             ## the return address is stored in the edi address (which is only possible
                             ## because these functions do not call other function) and the function
                             ## address (which is stored in the eax register, the top of the stack)
                             ## needs to be popped as well.
                             #
                             #:f_sys_int80
5F                           #    pop_edi               # Save return address from the stack
5A                           #    pop_edx               # Get the arguments from the stack
59                           #    pop_ecx
5B                           #    pop_ebx
58                           #    pop_eax
CD80                         #    int_80                # call the Kernel
57                           #    push_edi              # restore return address to the stack
C3                           #    ret
                             #
                             #:f_sys_malloc
5F                           #    pop_edi
58                           #    pop_eax
8B1D 0BA10408                #    mov_ebx,[DWORD] &SYS_MALLOC                 # Using the current pointer
01C3                         #    add_ebx,eax                                 # Request the number of desired bytes
B8 2D000000                  #    mov_eax, %45                                # the Syscall # for SYS_BRK
CD80                         #    int_80                                      # call the Kernel
8B05 0BA10408                #    mov_eax,[DWORD] &SYS_MALLOC                 # Return pointer
891D 0BA10408                #    mov_[DWORD],ebx &SYS_MALLOC                 # Update pointer
57                           #    push_edi
C3                           #    ret
                             #:SYS_MALLOC
00000000                     #    NULL
                             #
                             #    
                             #
                             #:f_malloc
58                           #  pop_eax
894500                       #  mov_[ebp],eax
58                           #  pop_eax
50                           #  push_eax              # size (local)
8D85 04000000                #  lea_eax,[ebp+DWORD] %4
5B                           #  pop_ebx               # =:
8918                         #  mov_[eax],ebx
58                           #  pop_eax
                             ## hex2.c 27
50                           #  push_eax              # size (local)
8D85 04000000                #  lea_eax,[ebp+DWORD] %4
8B00                         #  mov_eax,[eax]         # ?
50                           #  push_eax              # 3
B8 03000000                  #  mov_eax, %3
5B                           #  pop_ebx               # +
01D8                         #  add_eax,ebx
50                           #  push_eax              # 3
B8 03000000                  #  mov_eax, %3
F7D0                         #  not_eax               # ~
5B                           #  pop_ebx               # &
21D8                         #  and_eax,ebx
50                           #  push_eax              # sys_malloc (function)
B8 92800408                  #  mov_eax, &f_sys_malloc
81C5 08000000                #  add_ebp, %8         # ()
FFD0                         #  call_eax
81ED 08000000                #  sub_ebp, %8
8B5D00                       #  mov_ebx,[ebp]         # return
53                           #  push_ebx
C3                           #  ret
50                           #  push_eax              # 0
B8 00000000                  #  mov_eax, %0
8B5D00                       #  mov_ebx,[ebp]         # return
53                           #  push_ebx
C3                           #  ret
                             #
                             #:f_strcmp
58                           #  pop_eax
894500                       #  mov_[ebp],eax
58                           #  pop_eax
50                           #  push_eax              # s2 (local)
8D85 04000000                #  lea_eax,[ebp+DWORD] %4
5B                           #  pop_ebx               # =:
8918                         #  mov_[eax],ebx
58                           #  pop_eax
50                           #  push_eax              # s1 (local)
8D85 08000000                #  lea_eax,[ebp+DWORD] %8
5B                           #  pop_ebx               # =:
8918                         #  mov_[eax],ebx
58                           #  pop_eax
                             ## hex2.c 31
                             #:_strcmp_loop1
                             ## hex2.c 32
50                           #  push_eax              # result (local)
8D85 0C000000                #  lea_eax,[ebp+DWORD] %12
50                           #  push_eax              # s1 (local)
8D85 08000000                #  lea_eax,[ebp+DWORD] %8
8B00                         #  mov_eax,[eax]         # ?
8A00                         #  mov_al,[eax]          # ?1
0FB6C0                       #  movzx_eax,al
0FBEC0                       #  movsx_eax,al          # char
50                           #  push_eax              # s2 (local)
8D85 04000000                #  lea_eax,[ebp+DWORD] %4
8B00                         #  mov_eax,[eax]         # ?
8A00                         #  mov_al,[eax]          # ?1
0FB6C0                       #  movzx_eax,al
0FBEC0                       #  movsx_eax,al          # char
5B                           #  pop_ebx               # -
29C3                         #  sub_ebx,eax
89D8                         #  mov_eax,ebx
5B                           #  pop_ebx               # =
8903                         #  mov_[ebx],eax
58                           #  pop_eax               # ;
                             ## hex2.c 34
50                           #  push_eax              # result (local)
8D85 0C000000                #  lea_eax,[ebp+DWORD] %12
8B00                         #  mov_eax,[eax]         # ?
50                           #  push_eax              # 0
B8 00000000                  #  mov_eax, %0
5B                           #  pop_ebx               # !=
39C3                         #  cmp_eax_ebx
0F95C0                       #  setne_al
0FB6C0                       #  movzx_eax,al
85C0                         #  test_eax,eax          # ||
0F85 21000000                #  jne %_strcmp_or_end2
58                           #  pop_eax
50                           #  push_eax              # s1 (local)
8D85 08000000                #  lea_eax,[ebp+DWORD] %8
8B00                         #  mov_eax,[eax]         # ?
8A00                         #  mov_al,[eax]          # ?1
0FB6C0                       #  movzx_eax,al
0FBEC0                       #  movsx_eax,al          # char
50                           #  push_eax              # 0
B8 00000000                  #  mov_eax, %0
5B                           #  pop_ebx               # ==
39C3                         #  cmp_eax_ebx
0F94C0                       #  sete_al
0FB6C0                       #  movzx_eax,al
                             #:_strcmp_or_end2
85C0                         #  test_eax,eax          # if
58                           #  pop_eax
0F84 0E000000                #  je %_strcmp_else3
                             ## hex2.c 35
50                           #  push_eax              # result (local)
8D85 0C000000                #  lea_eax,[ebp+DWORD] %12
8B00                         #  mov_eax,[eax]         # ?
8B5D00                       #  mov_ebx,[ebp]         # return
53                           #  push_ebx
C3                           #  ret
                             ## hex2.c 36
                             #:_strcmp_else3 # no else
50                           #  push_eax              # s1 (local)
8D85 08000000                #  lea_eax,[ebp+DWORD] %8
50                           #  push_eax              # $ (dup)
8B00                         #  mov_eax,[eax]         # ?
50                           #  push_eax              # 1
B8 01000000                  #  mov_eax, %1
5B                           #  pop_ebx               # +
01D8                         #  add_eax,ebx
5B                           #  pop_ebx               # =
8903                         #  mov_[ebx],eax
50                           #  push_eax              # 1
B8 01000000                  #  mov_eax, %1
5B                           #  pop_ebx               # -
29C3                         #  sub_ebx,eax
89D8                         #  mov_eax,ebx
58                           #  pop_eax               # ;
                             ## hex2.c 37
50                           #  push_eax              # s2 (local)
8D85 04000000                #  lea_eax,[ebp+DWORD] %4
50                           #  push_eax              # $ (dup)
8B00                         #  mov_eax,[eax]         # ?
50                           #  push_eax              # 1
B8 01000000                  #  mov_eax, %1
5B                           #  pop_ebx               # +
01D8                         #  add_eax,ebx
5B                           #  pop_ebx               # =
8903                         #  mov_[ebx],eax
50                           #  push_eax              # 1
B8 01000000                  #  mov_eax, %1
5B                           #  pop_ebx               # -
29C3                         #  sub_ebx,eax
89D8                         #  mov_eax,ebx
58                           #  pop_eax               # ;
E9 2DFFFFFF                  #  jmp %_strcmp_loop1
                             #:_strcmp_loop_end1
                             ## hex2.c 39
50                           #  push_eax              # 0
B8 00000000                  #  mov_eax, %0
8B5D00                       #  mov_ebx,[ebp]         # return
53                           #  push_ebx
C3                           #  ret
50                           #  push_eax              # 0
B8 00000000                  #  mov_eax, %0
8B5D00                       #  mov_ebx,[ebp]         # return
53                           #  push_ebx
C3                           #  ret
                             #
                             #:f_strncmp
58                           #  pop_eax
894500                       #  mov_[ebp],eax
58                           #  pop_eax
50                           #  push_eax              # n (local)
8D85 04000000                #  lea_eax,[ebp+DWORD] %4
5B                           #  pop_ebx               # =:
8918                         #  mov_[eax],ebx
58                           #  pop_eax
50                           #  push_eax              # s2 (local)
8D85 08000000                #  lea_eax,[ebp+DWORD] %8
5B                           #  pop_ebx               # =:
8918                         #  mov_[eax],ebx
58                           #  pop_eax
50                           #  push_eax              # s1 (local)
8D85 0C000000                #  lea_eax,[ebp+DWORD] %12
5B                           #  pop_ebx               # =:
8918                         #  mov_[eax],ebx
58                           #  pop_eax
                             ## hex2.c 44
                             #:_strncmp_loop1
50                           #  push_eax              # n (local)
8D85 04000000                #  lea_eax,[ebp+DWORD] %4
8B00                         #  mov_eax,[eax]         # ?
50                           #  push_eax              # 0
B8 00000000                  #  mov_eax, %0
5B                           #  pop_ebx               # >
39C3                         #  cmp_eax_ebx
0F97C0                       #  seta_al
0FB6C0                       #  movzx_eax,al
85C0                         #  test_eax,eax          # !
0F94C0                       #  sete_al
0FB6C0                       #  movzx_eax,al
85C0                         #  test_eax,eax          # if
58                           #  pop_eax
0F84 05000000                #  je %_strncmp_else2
E9 F5000000                  #  jmp %_strncmp_loop_end1
                             ## hex2.c 45
                             #:_strncmp_else2 # no else
50                           #  push_eax              # result (local)
8D85 10000000                #  lea_eax,[ebp+DWORD] %16
50                           #  push_eax              # s1 (local)
8D85 0C000000                #  lea_eax,[ebp+DWORD] %12
8B00                         #  mov_eax,[eax]         # ?
8A00                         #  mov_al,[eax]          # ?1
0FB6C0                       #  movzx_eax,al
0FBEC0                       #  movsx_eax,al          # char
50                           #  push_eax              # s2 (local)
8D85 08000000                #  lea_eax,[ebp+DWORD] %8
8B00                         #  mov_eax,[eax]         # ?
8A00                         #  mov_al,[eax]          # ?1
0FB6C0                       #  movzx_eax,al
0FBEC0                       #  movsx_eax,al          # char
5B                           #  pop_ebx               # -
29C3                         #  sub_ebx,eax
89D8                         #  mov_eax,ebx
5B                           #  pop_ebx               # =
8903                         #  mov_[ebx],eax
58                           #  pop_eax               # ;
                             ## hex2.c 47
50                           #  push_eax              # result (local)
8D85 10000000                #  lea_eax,[ebp+DWORD] %16
8B00                         #  mov_eax,[eax]         # ?
50                           #  push_eax              # 0
B8 00000000                  #  mov_eax, %0
5B                           #  pop_ebx               # !=
39C3                         #  cmp_eax_ebx
0F95C0                       #  setne_al
0FB6C0                       #  movzx_eax,al
85C0                         #  test_eax,eax          # ||
0F85 21000000                #  jne %_strncmp_or_end3
58                           #  pop_eax
50                           #  push_eax              # s1 (local)
8D85 0C000000                #  lea_eax,[ebp+DWORD] %12
8B00                         #  mov_eax,[eax]         # ?
8A00                         #  mov_al,[eax]          # ?1
0FB6C0                       #  movzx_eax,al
0FBEC0                       #  movsx_eax,al          # char
50                           #  push_eax              # 0
B8 00000000                  #  mov_eax, %0
5B                           #  pop_ebx               # ==
39C3                         #  cmp_eax_ebx
0F94C0                       #  sete_al
0FB6C0                       #  movzx_eax,al
                             #:_strncmp_or_end3
85C0                         #  test_eax,eax          # if
58                           #  pop_eax
0F84 0E000000                #  je %_strncmp_else4
                             ## hex2.c 48
50                           #  push_eax              # result (local)
8D85 10000000                #  lea_eax,[ebp+DWORD] %16
8B00                         #  mov_eax,[eax]         # ?
8B5D00                       #  mov_ebx,[ebp]         # return
53                           #  push_ebx
C3                           #  ret
                             ## hex2.c 49
                             #:_strncmp_else4 # no else
50                           #  push_eax              # s1 (local)
8D85 0C000000                #  lea_eax,[ebp+DWORD] %12
50                           #  push_eax              # $ (dup)
8B00                         #  mov_eax,[eax]         # ?
50                           #  push_eax              # 1
B8 01000000                  #  mov_eax, %1
5B                           #  pop_ebx               # +
01D8                         #  add_eax,ebx
5B                           #  pop_ebx               # =
8903                         #  mov_[ebx],eax
50                           #  push_eax              # 1
B8 01000000                  #  mov_eax, %1
5B                           #  pop_ebx               # -
29C3                         #  sub_ebx,eax
89D8                         #  mov_eax,ebx
58                           #  pop_eax               # ;
                             ## hex2.c 50
50                           #  push_eax              # s2 (local)
8D85 08000000                #  lea_eax,[ebp+DWORD] %8
50                           #  push_eax              # $ (dup)
8B00                         #  mov_eax,[eax]         # ?
50                           #  push_eax              # 1
B8 01000000                  #  mov_eax, %1
5B                           #  pop_ebx               # +
01D8                         #  add_eax,ebx
5B                           #  pop_ebx               # =
8903                         #  mov_[ebx],eax
50                           #  push_eax              # 1
B8 01000000                  #  mov_eax, %1
5B                           #  pop_ebx               # -
29C3                         #  sub_ebx,eax
89D8                         #  mov_eax,ebx
58                           #  pop_eax               # ;
50                           #  push_eax              # n (local)
8D85 04000000                #  lea_eax,[ebp+DWORD] %4
50                           #  push_eax              # $ (dup)
8B00                         #  mov_eax,[eax]         # ?
50                           #  push_eax              # 1
B8 01000000                  #  mov_eax, %1
5B                           #  pop_ebx               # -
29C3                         #  sub_ebx,eax
89D8                         #  mov_eax,ebx
5B                           #  pop_ebx               # =
8903                         #  mov_[ebx],eax
50                           #  push_eax              # 1
B8 01000000                  #  mov_eax, %1
5B                           #  pop_ebx               # +
01D8                         #  add_eax,ebx
58                           #  pop_eax               # ;
E9 DDFEFFFF                  #  jmp %_strncmp_loop1
                             #:_strncmp_loop_end1
                             ## hex2.c 52
50                           #  push_eax              # 0
B8 00000000                  #  mov_eax, %0
8B5D00                       #  mov_ebx,[ebp]         # return
53                           #  push_ebx
C3                           #  ret
50                           #  push_eax              # 0
B8 00000000                  #  mov_eax, %0
8B5D00                       #  mov_ebx,[ebp]         # return
53                           #  push_ebx
C3                           #  ret
                             #
                             #:f_strlen
58                           #  pop_eax
894500                       #  mov_[ebp],eax
58                           #  pop_eax
50                           #  push_eax              # s (local)
8D85 04000000                #  lea_eax,[ebp+DWORD] %4
5B                           #  pop_ebx               # =:
8918                         #  mov_[eax],ebx
58                           #  pop_eax
50                           #  push_eax              # len (local)
8D85 08000000                #  lea_eax,[ebp+DWORD] %8
50                           #  push_eax              # 0
B8 00000000                  #  mov_eax, %0
5B                           #  pop_ebx               # =
8903                         #  mov_[ebx],eax
58                           #  pop_eax               # ;
                             ## hex2.c 58
                             #:_strlen_loop1
50                           #  push_eax              # s (local)
8D85 04000000                #  lea_eax,[ebp+DWORD] %4
8B00                         #  mov_eax,[eax]         # ?
8A00                         #  mov_al,[eax]          # ?1
0FB6C0                       #  movzx_eax,al
0FBEC0                       #  movsx_eax,al          # char
50                           #  push_eax              # 0
B8 00000000                  #  mov_eax, %0
5B                           #  pop_ebx               # !=
39C3                         #  cmp_eax_ebx
0F95C0                       #  setne_al
0FB6C0                       #  movzx_eax,al
85C0                         #  test_eax,eax          # !
0F94C0                       #  sete_al
0FB6C0                       #  movzx_eax,al
85C0                         #  test_eax,eax          # if
58                           #  pop_eax
0F84 05000000                #  je %_strlen_else2
E9 49000000                  #  jmp %_strlen_loop_end1
                             ## hex2.c 59
                             #:_strlen_else2 # no else
50                           #  push_eax              # len (local)
8D85 08000000                #  lea_eax,[ebp+DWORD] %8
50                           #  push_eax              # $ (dup)
8B00                         #  mov_eax,[eax]         # ?
50                           #  push_eax              # 1
B8 01000000                  #  mov_eax, %1
5B                           #  pop_ebx               # +
01D8                         #  add_eax,ebx
5B                           #  pop_ebx               # =
8903                         #  mov_[ebx],eax
50                           #  push_eax              # 1
B8 01000000                  #  mov_eax, %1
5B                           #  pop_ebx               # -
29C3                         #  sub_ebx,eax
89D8                         #  mov_eax,ebx
58                           #  pop_eax               # ;
50                           #  push_eax              # s (local)
8D85 04000000                #  lea_eax,[ebp+DWORD] %4
50                           #  push_eax              # $ (dup)
8B00                         #  mov_eax,[eax]         # ?
50                           #  push_eax              # 1
B8 01000000                  #  mov_eax, %1
5B                           #  pop_ebx               # +
01D8                         #  add_eax,ebx
5B                           #  pop_ebx               # =
8903                         #  mov_[ebx],eax
50                           #  push_eax              # 1
B8 01000000                  #  mov_eax, %1
5B                           #  pop_ebx               # -
29C3                         #  sub_ebx,eax
89D8                         #  mov_eax,ebx
58                           #  pop_eax               # ;
E9 81FFFFFF                  #  jmp %_strlen_loop1
                             #:_strlen_loop_end1
                             ## hex2.c 60
50                           #  push_eax              # len (local)
8D85 08000000                #  lea_eax,[ebp+DWORD] %8
8B00                         #  mov_eax,[eax]         # ?
8B5D00                       #  mov_ebx,[ebp]         # return
53                           #  push_ebx
C3                           #  ret
50                           #  push_eax              # 0
B8 00000000                  #  mov_eax, %0
8B5D00                       #  mov_ebx,[ebp]         # return
53                           #  push_ebx
C3                           #  ret
                             #
                             #:f_strncpy
58                           #  pop_eax
894500                       #  mov_[ebp],eax
58                           #  pop_eax
50                           #  push_eax              # n (local)
8D85 04000000                #  lea_eax,[ebp+DWORD] %4
5B                           #  pop_ebx               # =:
8918                         #  mov_[eax],ebx
58                           #  pop_eax
50                           #  push_eax              # src (local)
8D85 08000000                #  lea_eax,[ebp+DWORD] %8
5B                           #  pop_ebx               # =:
8918                         #  mov_[eax],ebx
58                           #  pop_eax
50                           #  push_eax              # dest (local)
8D85 0C000000                #  lea_eax,[ebp+DWORD] %12
5B                           #  pop_ebx               # =:
8918                         #  mov_[eax],ebx
58                           #  pop_eax
50                           #  push_eax              # d (local)
8D85 10000000                #  lea_eax,[ebp+DWORD] %16
50                           #  push_eax              # dest (local)
8D85 0C000000                #  lea_eax,[ebp+DWORD] %12
8B00                         #  mov_eax,[eax]         # ?
5B                           #  pop_ebx               # =
8903                         #  mov_[ebx],eax
58                           #  pop_eax               # ;
50                           #  push_eax              # s (local)
8D85 14000000                #  lea_eax,[ebp+DWORD] %20
50                           #  push_eax              # src (local)
8D85 08000000                #  lea_eax,[ebp+DWORD] %8
8B00                         #  mov_eax,[eax]         # ?
5B                           #  pop_ebx               # =
8903                         #  mov_[ebx],eax
58                           #  pop_eax               # ;
                             ## hex2.c 67
50                           #  push_eax              # i (local)
8D85 18000000                #  lea_eax,[ebp+DWORD] %24
50                           #  push_eax              # 0
B8 00000000                  #  mov_eax, %0
5B                           #  pop_ebx               # =
8903                         #  mov_[ebx],eax
58                           #  pop_eax               # ;
                             #:_strncpy_loop1
50                           #  push_eax              # i (local)
8D85 18000000                #  lea_eax,[ebp+DWORD] %24
8B00                         #  mov_eax,[eax]         # ?
50                           #  push_eax              # n (local)
8D85 04000000                #  lea_eax,[ebp+DWORD] %4
8B00                         #  mov_eax,[eax]         # ?
5B                           #  pop_ebx               # <s
39C3                         #  cmp_eax_ebx
0F9CC0                       #  setl_al
0FB6C0                       #  movzx_eax,al
85C0                         #  test_eax,eax          # !
0F94C0                       #  sete_al
0FB6C0                       #  movzx_eax,al
85C0                         #  test_eax,eax          # if
58                           #  pop_eax
0F84 05000000                #  je %_strncpy_else2
E9 97000000                  #  jmp %_strncpy_loop_end1
                             ## hex2.c 68
                             ## hex2.c 69
                             #:_strncpy_else2 # no else
50                           #  push_eax              # d (local)
8D85 10000000                #  lea_eax,[ebp+DWORD] %16
8B00                         #  mov_eax,[eax]         # ?
50                           #  push_eax              # i (local)
8D85 18000000                #  lea_eax,[ebp+DWORD] %24
8B00                         #  mov_eax,[eax]         # ?
5B                           #  pop_ebx               # +
01D8                         #  add_eax,ebx
50                           #  push_eax              # s (local)
8D85 14000000                #  lea_eax,[ebp+DWORD] %20
8B00                         #  mov_eax,[eax]         # ?
50                           #  push_eax              # i (local)
8D85 18000000                #  lea_eax,[ebp+DWORD] %24
8B00                         #  mov_eax,[eax]         # ?
5B                           #  pop_ebx               # +
01D8                         #  add_eax,ebx
8A00                         #  mov_al,[eax]          # ?1
0FB6C0                       #  movzx_eax,al
0FBEC0                       #  movsx_eax,al          # char
5B                           #  pop_ebx               # =1
8803                         #  mov_[ebx],al
58                           #  pop_eax               # ;
                             ## hex2.c 70
50                           #  push_eax              # s (local)
8D85 14000000                #  lea_eax,[ebp+DWORD] %20
8B00                         #  mov_eax,[eax]         # ?
50                           #  push_eax              # i (local)
8D85 18000000                #  lea_eax,[ebp+DWORD] %24
8B00                         #  mov_eax,[eax]         # ?
5B                           #  pop_ebx               # +
01D8                         #  add_eax,ebx
8A00                         #  mov_al,[eax]          # ?1
0FB6C0                       #  movzx_eax,al
0FBEC0                       #  movsx_eax,al          # char
50                           #  push_eax              # 0
B8 00000000                  #  mov_eax, %0
5B                           #  pop_ebx               # ==
39C3                         #  cmp_eax_ebx
0F94C0                       #  sete_al
0FB6C0                       #  movzx_eax,al
85C0                         #  test_eax,eax          # if
58                           #  pop_eax
0F84 05000000                #  je %_strncpy_else3
                             ## hex2.c 71
E9 27000000                  #  jmp %_strncpy_loop_end1
                             #:_strncpy_else3 # no else
50                           #  push_eax              # i (local)
8D85 18000000                #  lea_eax,[ebp+DWORD] %24
50                           #  push_eax              # $ (dup)
8B00                         #  mov_eax,[eax]         # ?
50                           #  push_eax              # 1
B8 01000000                  #  mov_eax, %1
5B                           #  pop_ebx               # +
01D8                         #  add_eax,ebx
5B                           #  pop_ebx               # =
8903                         #  mov_[ebx],eax
50                           #  push_eax              # 1
B8 01000000                  #  mov_eax, %1
5B                           #  pop_ebx               # -
29C3                         #  sub_ebx,eax
89D8                         #  mov_eax,ebx
58                           #  pop_eax               # ;
E9 38FFFFFF                  #  jmp %_strncpy_loop1
                             #:_strncpy_loop_end1
50                           #  push_eax              # 0
B8 00000000                  #  mov_eax, %0
8B5D00                       #  mov_ebx,[ebp]         # return
53                           #  push_ebx
C3                           #  ret
                             #
                             #:f_fhputc
58                           #  pop_eax
894500                       #  mov_[ebp],eax
58                           #  pop_eax
50                           #  push_eax              # fh (local)
8D85 04000000                #  lea_eax,[ebp+DWORD] %4
5B                           #  pop_ebx               # =:
8918                         #  mov_[eax],ebx
58                           #  pop_eax
50                           #  push_eax              # ch (local)
8D85 08000000                #  lea_eax,[ebp+DWORD] %8
5B                           #  pop_ebx               # =:
8918                         #  mov_[eax],ebx
58                           #  pop_eax
                             ## hex2.c 24
50                           #  push_eax              # 4
B8 04000000                  #  mov_eax, %4
50                           #  push_eax              # fh (local)
8D85 04000000                #  lea_eax,[ebp+DWORD] %4
8B00                         #  mov_eax,[eax]         # ?
50                           #  push_eax              # ch (local)
8D85 08000000                #  lea_eax,[ebp+DWORD] %8
50                           #  push_eax              # 1
B8 01000000                  #  mov_eax, %1
50                           #  push_eax              # sys_int80 (function)
B8 89800408                  #  mov_eax, &f_sys_int80
81C5 0C000000                #  add_ebp, %12         # ()
FFD0                         #  call_eax
81ED 0C000000                #  sub_ebp, %12
58                           #  pop_eax               # ;
50                           #  push_eax              # 0
B8 00000000                  #  mov_eax, %0
8B5D00                       #  mov_ebx,[ebp]         # return
53                           #  push_ebx
C3                           #  ret
                             #
                             #:f_fhgets
58                           #  pop_eax
894500                       #  mov_[ebp],eax
58                           #  pop_eax
50                           #  push_eax              # fh (local)
8D85 04000000                #  lea_eax,[ebp+DWORD] %4
5B                           #  pop_ebx               # =:
8918                         #  mov_[eax],ebx
58                           #  pop_eax
50                           #  push_eax              # size (local)
8D85 08000000                #  lea_eax,[ebp+DWORD] %8
5B                           #  pop_ebx               # =:
8918                         #  mov_[eax],ebx
58                           #  pop_eax
50                           #  push_eax              # buffer (local)
8D85 0C000000                #  lea_eax,[ebp+DWORD] %12
5B                           #  pop_ebx               # =:
8918                         #  mov_[eax],ebx
58                           #  pop_eax
50                           #  push_eax              # i (local)
8D85 10000000                #  lea_eax,[ebp+DWORD] %16
50                           #  push_eax              # 0
B8 00000000                  #  mov_eax, %0
5B                           #  pop_ebx               # =
8903                         #  mov_[ebx],eax
58                           #  pop_eax               # ;
                             ## hex2.c 89
                             #:_fhgets_loop1
50                           #  push_eax              # i (local)
8D85 10000000                #  lea_eax,[ebp+DWORD] %16
8B00                         #  mov_eax,[eax]         # ?
50                           #  push_eax              # size (local)
8D85 08000000                #  lea_eax,[ebp+DWORD] %8
8B00                         #  mov_eax,[eax]         # ?
50                           #  push_eax              # 1
B8 01000000                  #  mov_eax, %1
5B                           #  pop_ebx               # -
29C3                         #  sub_ebx,eax
89D8                         #  mov_eax,ebx
5B                           #  pop_ebx               # <s
39C3                         #  cmp_eax_ebx
0F9CC0                       #  setl_al
0FB6C0                       #  movzx_eax,al
85C0                         #  test_eax,eax          # !
0F94C0                       #  sete_al
0FB6C0                       #  movzx_eax,al
85C0                         #  test_eax,eax          # if
58                           #  pop_eax
0F84 05000000                #  je %_fhgets_else2
E9 EA000000                  #  jmp %_fhgets_loop_end1
                             ## hex2.c 90
                             #:_fhgets_else2 # no else
                             ## hex2.c 92
50                           #  push_eax              # 3
B8 03000000                  #  mov_eax, %3
50                           #  push_eax              # fh (local)
8D85 04000000                #  lea_eax,[ebp+DWORD] %4
8B00                         #  mov_eax,[eax]         # ?
50                           #  push_eax              # ch (local)
8D85 14000000                #  lea_eax,[ebp+DWORD] %20
50                           #  push_eax              # 1
B8 01000000                  #  mov_eax, %1
50                           #  push_eax              # sys_int80 (function)
B8 89800408                  #  mov_eax, &f_sys_int80
81C5 18000000                #  add_ebp, %24         # ()
FFD0                         #  call_eax
81ED 18000000                #  sub_ebp, %24
50                           #  push_eax              # 0
B8 00000000                  #  mov_eax, %0
5B                           #  pop_ebx               # ==
39C3                         #  cmp_eax_ebx
0F94C0                       #  sete_al
0FB6C0                       #  movzx_eax,al
85C0                         #  test_eax,eax          # if
58                           #  pop_eax
0F84 31000000                #  je %_fhgets_else3
                             ## hex2.c 93
                             ## hex2.c 94
50                           #  push_eax              # i (local)
8D85 10000000                #  lea_eax,[ebp+DWORD] %16
8B00                         #  mov_eax,[eax]         # ?
50                           #  push_eax              # 0
B8 00000000                  #  mov_eax, %0
5B                           #  pop_ebx               # ==
39C3                         #  cmp_eax_ebx
0F94C0                       #  sete_al
0FB6C0                       #  movzx_eax,al
85C0                         #  test_eax,eax          # if
58                           #  pop_eax
0F84 0B000000                #  je %_fhgets_else4
                             ## hex2.c 95
50                           #  push_eax              # 0
B8 00000000                  #  mov_eax, %0
8B5D00                       #  mov_ebx,[ebp]         # return
53                           #  push_ebx
C3                           #  ret
                             ## hex2.c 96
                             #:_fhgets_else4 # no else
E9 71000000                  #  jmp %_fhgets_loop_end1
                             ## hex2.c 98
                             #:_fhgets_else3 # no else
50                           #  push_eax              # buffer (local)
8D85 0C000000                #  lea_eax,[ebp+DWORD] %12
8B00                         #  mov_eax,[eax]         # ?
50                           #  push_eax              # i (local)
8D85 10000000                #  lea_eax,[ebp+DWORD] %16
50                           #  push_eax              # $ (dup)
8B00                         #  mov_eax,[eax]         # ?
50                           #  push_eax              # 1
B8 01000000                  #  mov_eax, %1
5B                           #  pop_ebx               # +
01D8                         #  add_eax,ebx
5B                           #  pop_ebx               # =
8903                         #  mov_[ebx],eax
50                           #  push_eax              # 1
B8 01000000                  #  mov_eax, %1
5B                           #  pop_ebx               # -
29C3                         #  sub_ebx,eax
89D8                         #  mov_eax,ebx
5B                           #  pop_ebx               # +
01D8                         #  add_eax,ebx
50                           #  push_eax              # ch (local)
8D85 14000000                #  lea_eax,[ebp+DWORD] %20
8A00                         #  mov_al,[eax]          # ?1
0FB6C0                       #  movzx_eax,al
0FBEC0                       #  movsx_eax,al          # char
5B                           #  pop_ebx               # =1
8803                         #  mov_[ebx],al
58                           #  pop_eax               # ;
                             ## hex2.c 99
50                           #  push_eax              # ch (local)
8D85 14000000                #  lea_eax,[ebp+DWORD] %20
8A00                         #  mov_al,[eax]          # ?1
0FB6C0                       #  movzx_eax,al
0FBEC0                       #  movsx_eax,al          # char
50                           #  push_eax              # 10
B8 0A000000                  #  mov_eax, %10
5B                           #  pop_ebx               # ==
39C3                         #  cmp_eax_ebx
0F94C0                       #  sete_al
0FB6C0                       #  movzx_eax,al
85C0                         #  test_eax,eax          # if
58                           #  pop_eax
0F84 05000000                #  je %_fhgets_else5
                             ## hex2.c 100
E9 05000000                  #  jmp %_fhgets_loop_end1
                             #:_fhgets_else5 # no else
E9 DAFEFFFF                  #  jmp %_fhgets_loop1
                             #:_fhgets_loop_end1
                             ## hex2.c 102
50                           #  push_eax              # buffer (local)
8D85 0C000000                #  lea_eax,[ebp+DWORD] %12
8B00                         #  mov_eax,[eax]         # ?
50                           #  push_eax              # i (local)
8D85 10000000                #  lea_eax,[ebp+DWORD] %16
8B00                         #  mov_eax,[eax]         # ?
5B                           #  pop_ebx               # +
01D8                         #  add_eax,ebx
50                           #  push_eax              # 0
B8 00000000                  #  mov_eax, %0
5B                           #  pop_ebx               # =1
8803                         #  mov_[ebx],al
58                           #  pop_eax               # ;
                             ## hex2.c 103
50                           #  push_eax              # 1
B8 01000000                  #  mov_eax, %1
8B5D00                       #  mov_ebx,[ebp]         # return
53                           #  push_ebx
C3                           #  ret
50                           #  push_eax              # 0
B8 00000000                  #  mov_eax, %0
8B5D00                       #  mov_ebx,[ebp]         # return
53                           #  push_ebx
C3                           #  ret
                             #
                             #:f_is_hex
58                           #  pop_eax
894500                       #  mov_[ebp],eax
58                           #  pop_eax
50                           #  push_eax              # ch (local)
8D85 04000000                #  lea_eax,[ebp+DWORD] %4
5B                           #  pop_ebx               # =:
8918                         #  mov_[eax],ebx
58                           #  pop_eax
                             ## hex2.c 110
50                           #  push_eax              # 48
B8 30000000                  #  mov_eax, %48
50                           #  push_eax              # ch (local)
8D85 04000000                #  lea_eax,[ebp+DWORD] %4
8A00                         #  mov_al,[eax]          # ?1
0FB6C0                       #  movzx_eax,al
0FBEC0                       #  movsx_eax,al          # char
5B                           #  pop_ebx               # <=s
39C3                         #  cmp_eax_ebx
0F9EC0                       #  setle_al
0FB6C0                       #  movzx_eax,al
85C0                         #  test_eax,eax          # &&
0F84 1F000000                #  je %_is_hex_and_end1
58                           #  pop_eax
50                           #  push_eax              # ch (local)
8D85 04000000                #  lea_eax,[ebp+DWORD] %4
8A00                         #  mov_al,[eax]          # ?1
0FB6C0                       #  movzx_eax,al
0FBEC0                       #  movsx_eax,al          # char
50                           #  push_eax              # 57
B8 39000000                  #  mov_eax, %57
5B                           #  pop_ebx               # <=s
39C3                         #  cmp_eax_ebx
0F9EC0                       #  setle_al
0FB6C0                       #  movzx_eax,al
                             #:_is_hex_and_end1
85C0                         #  test_eax,eax          # if
58                           #  pop_eax
0F84 1F000000                #  je %_is_hex_else2
                             ## hex2.c 111
50                           #  push_eax              # ch (local)
8D85 04000000                #  lea_eax,[ebp+DWORD] %4
8A00                         #  mov_al,[eax]          # ?1
0FB6C0                       #  movzx_eax,al
0FBEC0                       #  movsx_eax,al          # char
50                           #  push_eax              # 48
B8 30000000                  #  mov_eax, %48
5B                           #  pop_ebx               # -
29C3                         #  sub_ebx,eax
89D8                         #  mov_eax,ebx
8B5D00                       #  mov_ebx,[ebp]         # return
53                           #  push_ebx
C3                           #  ret
                             ## hex2.c 112
                             #:_is_hex_else2 # no else
50                           #  push_eax              # 65
B8 41000000                  #  mov_eax, %65
50                           #  push_eax              # ch (local)
8D85 04000000                #  lea_eax,[ebp+DWORD] %4
8A00                         #  mov_al,[eax]          # ?1
0FB6C0                       #  movzx_eax,al
0FBEC0                       #  movsx_eax,al          # char
5B                           #  pop_ebx               # <=s
39C3                         #  cmp_eax_ebx
0F9EC0                       #  setle_al
0FB6C0                       #  movzx_eax,al
85C0                         #  test_eax,eax          # &&
0F84 1F000000                #  je %_is_hex_and_end3
58                           #  pop_eax
50                           #  push_eax              # ch (local)
8D85 04000000                #  lea_eax,[ebp+DWORD] %4
8A00                         #  mov_al,[eax]          # ?1
0FB6C0                       #  movzx_eax,al
0FBEC0                       #  movsx_eax,al          # char
50                           #  push_eax              # 70
B8 46000000                  #  mov_eax, %70
5B                           #  pop_ebx               # <=s
39C3                         #  cmp_eax_ebx
0F9EC0                       #  setle_al
0FB6C0                       #  movzx_eax,al
                             #:_is_hex_and_end3
85C0                         #  test_eax,eax          # if
58                           #  pop_eax
0F84 2A000000                #  je %_is_hex_else4
                             ## hex2.c 113
50                           #  push_eax              # ch (local)
8D85 04000000                #  lea_eax,[ebp+DWORD] %4
8A00                         #  mov_al,[eax]          # ?1
0FB6C0                       #  movzx_eax,al
0FBEC0                       #  movsx_eax,al          # char
50                           #  push_eax              # 65
B8 41000000                  #  mov_eax, %65
50                           #  push_eax              # 10
B8 0A000000                  #  mov_eax, %10
5B                           #  pop_ebx               # -
29C3                         #  sub_ebx,eax
89D8                         #  mov_eax,ebx
5B                           #  pop_ebx               # -
29C3                         #  sub_ebx,eax
89D8                         #  mov_eax,ebx
8B5D00                       #  mov_ebx,[ebp]         # return
53                           #  push_ebx
C3                           #  ret
                             ## hex2.c 114
                             #:_is_hex_else4 # no else
50                           #  push_eax              # 4294967295
B8 FFFFFFFF                  #  mov_eax, %4294967295
8B5D00                       #  mov_ebx,[ebp]         # return
53                           #  push_ebx
C3                           #  ret
50                           #  push_eax              # 0
B8 00000000                  #  mov_eax, %0
8B5D00                       #  mov_ebx,[ebp]         # return
53                           #  push_ebx
C3                           #  ret
                             #
                             #:f_pos_for_label
58                           #  pop_eax
894500                       #  mov_[ebp],eax
58                           #  pop_eax
50                           #  push_eax              # len (local)
8D85 04000000                #  lea_eax,[ebp+DWORD] %4
5B                           #  pop_ebx               # =:
8918                         #  mov_[eax],ebx
58                           #  pop_eax
50                           #  push_eax              # name (local)
8D85 08000000                #  lea_eax,[ebp+DWORD] %8
5B                           #  pop_ebx               # =:
8918                         #  mov_[eax],ebx
58                           #  pop_eax
                             ## hex2.c 128
50                           #  push_eax              # label (local)
8D85 0C000000                #  lea_eax,[ebp+DWORD] %12
50                           #  push_eax              # labels (global)
B8 20A10408                  #  mov_eax, &g_labels
8B00                         #  mov_eax,[eax]         # ?
5B                           #  pop_ebx               # =
8903                         #  mov_[ebx],eax
58                           #  pop_eax               # ;
                             #:_pos_for_label_loop1
50                           #  push_eax              # label (local)
8D85 0C000000                #  lea_eax,[ebp+DWORD] %12
8B00                         #  mov_eax,[eax]         # ?
50                           #  push_eax              # 0
B8 00000000                  #  mov_eax, %0
5B                           #  pop_ebx               # !=
39C3                         #  cmp_eax_ebx
0F95C0                       #  setne_al
0FB6C0                       #  movzx_eax,al
85C0                         #  test_eax,eax          # !
0F94C0                       #  sete_al
0FB6C0                       #  movzx_eax,al
85C0                         #  test_eax,eax          # if
58                           #  pop_eax
0F84 05000000                #  je %_pos_for_label_else2
E9 C3000000                  #  jmp %_pos_for_label_loop_end1
                             ## hex2.c 129
                             #:_pos_for_label_else2 # no else
50                           #  push_eax              # label (local)
8D85 0C000000                #  lea_eax,[ebp+DWORD] %12
8B00                         #  mov_eax,[eax]         # ->
81C0 00000000                #  add_eax, %0
8B00                         #  mov_eax,[eax]         # ?
50                           #  push_eax              # name (local)
8D85 08000000                #  lea_eax,[ebp+DWORD] %8
8B00                         #  mov_eax,[eax]         # ?
50                           #  push_eax              # len (local)
8D85 04000000                #  lea_eax,[ebp+DWORD] %4
8B00                         #  mov_eax,[eax]         # ?
50                           #  push_eax              # strncmp (function)
B8 0A820408                  #  mov_eax, &f_strncmp
81C5 10000000                #  add_ebp, %16         # ()
FFD0                         #  call_eax
81ED 10000000                #  sub_ebp, %16
50                           #  push_eax              # 0
B8 00000000                  #  mov_eax, %0
5B                           #  pop_ebx               # ==
39C3                         #  cmp_eax_ebx
0F94C0                       #  sete_al
0FB6C0                       #  movzx_eax,al
85C0                         #  test_eax,eax          # &&
0F84 35000000                #  je %_pos_for_label_and_end3
58                           #  pop_eax
50                           #  push_eax              # label (local)
8D85 0C000000                #  lea_eax,[ebp+DWORD] %12
8B00                         #  mov_eax,[eax]         # ->
81C0 00000000                #  add_eax, %0
8B00                         #  mov_eax,[eax]         # ?
50                           #  push_eax              # len (local)
8D85 04000000                #  lea_eax,[ebp+DWORD] %4
8B00                         #  mov_eax,[eax]         # ?
5B                           #  pop_ebx               # +
01D8                         #  add_eax,ebx
8A00                         #  mov_al,[eax]          # ?1
0FB6C0                       #  movzx_eax,al
0FBEC0                       #  movsx_eax,al          # char
50                           #  push_eax              # 0
B8 00000000                  #  mov_eax, %0
5B                           #  pop_ebx               # ==
39C3                         #  cmp_eax_ebx
0F94C0                       #  sete_al
0FB6C0                       #  movzx_eax,al
                             #:_pos_for_label_and_end3
85C0                         #  test_eax,eax          # if
58                           #  pop_eax
0F84 16000000                #  je %_pos_for_label_else4
                             ## hex2.c 130
50                           #  push_eax              # label (local)
8D85 0C000000                #  lea_eax,[ebp+DWORD] %12
8B00                         #  mov_eax,[eax]         # ->
81C0 04000000                #  add_eax, %4
8B00                         #  mov_eax,[eax]         # ?
8B5D00                       #  mov_ebx,[ebp]         # return
53                           #  push_ebx
C3                           #  ret
                             #:_pos_for_label_else4 # no else
50                           #  push_eax              # label (local)
8D85 0C000000                #  lea_eax,[ebp+DWORD] %12
50                           #  push_eax              # label (local)
8D85 0C000000                #  lea_eax,[ebp+DWORD] %12
8B00                         #  mov_eax,[eax]         # ->
81C0 08000000                #  add_eax, %8
8B00                         #  mov_eax,[eax]         # ?
5B                           #  pop_ebx               # =
8903                         #  mov_[ebx],eax
58                           #  pop_eax               # ;
E9 0FFFFFFF                  #  jmp %_pos_for_label_loop1
                             #:_pos_for_label_loop_end1
                             ## hex2.c 131
50                           #  push_eax              # 0
B8 00000000                  #  mov_eax, %0
8B5D00                       #  mov_ebx,[ebp]         # return
53                           #  push_ebx
C3                           #  ret
50                           #  push_eax              # 0
B8 00000000                  #  mov_eax, %0
8B5D00                       #  mov_ebx,[ebp]         # return
53                           #  push_ebx
C3                           #  ret
                             #
                             #:f_process_file
58                           #  pop_eax
894500                       #  mov_[ebp],eax
58                           #  pop_eax
50                           #  push_eax              # end_of_line (local)
8D85 04000000                #  lea_eax,[ebp+DWORD] %4
5B                           #  pop_ebx               # =:
8918                         #  mov_[eax],ebx
58                           #  pop_eax
50                           #  push_eax              # output_byte (local)
8D85 08000000                #  lea_eax,[ebp+DWORD] %8
5B                           #  pop_ebx               # =:
8918                         #  mov_[eax],ebx
58                           #  pop_eax
50                           #  push_eax              # add_labels (local)
8D85 0C000000                #  lea_eax,[ebp+DWORD] %12
5B                           #  pop_ebx               # =:
8918                         #  mov_[eax],ebx
58                           #  pop_eax
50                           #  push_eax              # name (local)
8D85 10000000                #  lea_eax,[ebp+DWORD] %16
5B                           #  pop_ebx               # =:
8918                         #  mov_[eax],ebx
58                           #  pop_eax
50                           #  push_eax              # f (local)
8D85 14000000                #  lea_eax,[ebp+DWORD] %20
50                           #  push_eax              # 5
B8 05000000                  #  mov_eax, %5
50                           #  push_eax              # name (local)
8D85 10000000                #  lea_eax,[ebp+DWORD] %16
8B00                         #  mov_eax,[eax]         # ?
50                           #  push_eax              # 0
B8 00000000                  #  mov_eax, %0
50                           #  push_eax              # 511
B8 FF010000                  #  mov_eax, %511
50                           #  push_eax              # sys_int80 (function)
B8 89800408                  #  mov_eax, &f_sys_int80
81C5 18000000                #  add_ebp, %24         # ()
FFD0                         #  call_eax
81ED 18000000                #  sub_ebp, %24
5B                           #  pop_ebx               # =
8903                         #  mov_[ebx],eax
58                           #  pop_eax               # ;
                             ## hex2.c 137
50                           #  push_eax              # f (local)
8D85 14000000                #  lea_eax,[ebp+DWORD] %20
8B00                         #  mov_eax,[eax]         # ?
50                           #  push_eax              # 0
B8 00000000                  #  mov_eax, %0
5B                           #  pop_ebx               # <s
39C3                         #  cmp_eax_ebx
0F9CC0                       #  setl_al
0FB6C0                       #  movzx_eax,al
85C0                         #  test_eax,eax          # if
58                           #  pop_eax
0F84 0B000000                #  je %_process_file_else1
                             ## hex2.c 138
50                           #  push_eax              # 0
B8 00000000                  #  mov_eax, %0
8B5D00                       #  mov_ebx,[ebp]         # return
53                           #  push_ebx
C3                           #  ret
                             #:_process_file_else1 # no else
50                           #  push_eax              # line_nr (local)
8D85 18000000                #  lea_eax,[ebp+DWORD] %24
50                           #  push_eax              # 0
B8 00000000                  #  mov_eax, %0
5B                           #  pop_ebx               # =
8903                         #  mov_[ebx],eax
58                           #  pop_eax               # ;
                             ## hex2.c 141
                             #:_process_file_loop2
50                           #  push_eax              # line (static)
B8 2CA10408                  #  mov_eax, &static_0_line
50                           #  push_eax              # 999
B8 E7030000                  #  mov_eax, %999
50                           #  push_eax              # f (local)
8D85 14000000                #  lea_eax,[ebp+DWORD] %20
8B00                         #  mov_eax,[eax]         # ?
50                           #  push_eax              # fhgets (function)
B8 AB850408                  #  mov_eax, &f_fhgets
81C5 1C000000                #  add_ebp, %28         # ()
FFD0                         #  call_eax
81ED 1C000000                #  sub_ebp, %28
85C0                         #  test_eax,eax          # !
0F94C0                       #  sete_al
0FB6C0                       #  movzx_eax,al
85C0                         #  test_eax,eax          # if
58                           #  pop_eax
0F84 05000000                #  je %_process_file_else3
E9 EA0C0000                  #  jmp %_process_file_loop_end2
                             ## hex2.c 142
                             ## hex2.c 143
                             #:_process_file_else3 # no else
50                           #  push_eax              # line_nr (local)
8D85 18000000                #  lea_eax,[ebp+DWORD] %24
50                           #  push_eax              # $ (dup)
8B00                         #  mov_eax,[eax]         # ?
50                           #  push_eax              # 1
B8 01000000                  #  mov_eax, %1
5B                           #  pop_ebx               # +
01D8                         #  add_eax,ebx
5B                           #  pop_ebx               # =
8903                         #  mov_[ebx],eax
50                           #  push_eax              # 1
B8 01000000                  #  mov_eax, %1
5B                           #  pop_ebx               # -
29C3                         #  sub_ebx,eax
89D8                         #  mov_eax,ebx
58                           #  pop_eax               # ;
50                           #  push_eax              # space (local)
8D85 1C000000                #  lea_eax,[ebp+DWORD] %28
50                           #  push_eax              # 0
B8 00000000                  #  mov_eax, %0
5B                           #  pop_ebx               # =
8903                         #  mov_[ebx],eax
58                           #  pop_eax               # ;
50                           #  push_eax              # s (local)
8D85 20000000                #  lea_eax,[ebp+DWORD] %32
50                           #  push_eax              # line (static)
B8 2CA10408                  #  mov_eax, &static_0_line
5B                           #  pop_ebx               # =
8903                         #  mov_[ebx],eax
58                           #  pop_eax               # ;
                             ## hex2.c 146
                             #:_process_file_loop4
50                           #  push_eax              # s (local)
8D85 20000000                #  lea_eax,[ebp+DWORD] %32
8B00                         #  mov_eax,[eax]         # ?
8A00                         #  mov_al,[eax]          # ?1
0FB6C0                       #  movzx_eax,al
0FBEC0                       #  movsx_eax,al          # char
50                           #  push_eax              # 0
B8 00000000                  #  mov_eax, %0
5B                           #  pop_ebx               # !=
39C3                         #  cmp_eax_ebx
0F95C0                       #  setne_al
0FB6C0                       #  movzx_eax,al
85C0                         #  test_eax,eax          # &&
0F84 21000000                #  je %_process_file_and_end5
58                           #  pop_eax
50                           #  push_eax              # s (local)
8D85 20000000                #  lea_eax,[ebp+DWORD] %32
8B00                         #  mov_eax,[eax]         # ?
8A00                         #  mov_al,[eax]          # ?1
0FB6C0                       #  movzx_eax,al
0FBEC0                       #  movsx_eax,al          # char
50                           #  push_eax              # 35
B8 23000000                  #  mov_eax, %35
5B                           #  pop_ebx               # !=
39C3                         #  cmp_eax_ebx
0F95C0                       #  setne_al
0FB6C0                       #  movzx_eax,al
                             #:_process_file_and_end5
85C0                         #  test_eax,eax          # &&
0F84 21000000                #  je %_process_file_and_end6
58                           #  pop_eax
50                           #  push_eax              # s (local)
8D85 20000000                #  lea_eax,[ebp+DWORD] %32
8B00                         #  mov_eax,[eax]         # ?
8A00                         #  mov_al,[eax]          # ?1
0FB6C0                       #  movzx_eax,al
0FBEC0                       #  movsx_eax,al          # char
50                           #  push_eax              # 13
B8 0D000000                  #  mov_eax, %13
5B                           #  pop_ebx               # !=
39C3                         #  cmp_eax_ebx
0F95C0                       #  setne_al
0FB6C0                       #  movzx_eax,al
                             #:_process_file_and_end6
85C0                         #  test_eax,eax          # &&
0F84 21000000                #  je %_process_file_and_end7
58                           #  pop_eax
50                           #  push_eax              # s (local)
8D85 20000000                #  lea_eax,[ebp+DWORD] %32
8B00                         #  mov_eax,[eax]         # ?
8A00                         #  mov_al,[eax]          # ?1
0FB6C0                       #  movzx_eax,al
0FBEC0                       #  movsx_eax,al          # char
50                           #  push_eax              # 10
B8 0A000000                  #  mov_eax, %10
5B                           #  pop_ebx               # !=
39C3                         #  cmp_eax_ebx
0F95C0                       #  setne_al
0FB6C0                       #  movzx_eax,al
                             #:_process_file_and_end7
85C0                         #  test_eax,eax          # !
0F94C0                       #  sete_al
0FB6C0                       #  movzx_eax,al
85C0                         #  test_eax,eax          # if
58                           #  pop_eax
0F84 05000000                #  je %_process_file_else8
E9 D60A0000                  #  jmp %_process_file_loop_end4
                             ## hex2.c 147
                             #:_process_file_else8 # no else
50                           #  push_eax              # s (local)
8D85 20000000                #  lea_eax,[ebp+DWORD] %32
8B00                         #  mov_eax,[eax]         # ?
8A00                         #  mov_al,[eax]          # ?1
0FB6C0                       #  movzx_eax,al
0FBEC0                       #  movsx_eax,al          # char
50                           #  push_eax              # 32
B8 20000000                  #  mov_eax, %32
5B                           #  pop_ebx               # <=s
39C3                         #  cmp_eax_ebx
0F9EC0                       #  setle_al
0FB6C0                       #  movzx_eax,al
85C0                         #  test_eax,eax          # if
58                           #  pop_eax
0F84 38000000                #  je %_process_file_else9
                             ## hex2.c 148
                             ## hex2.c 149
50                           #  push_eax              # space (local)
8D85 1C000000                #  lea_eax,[ebp+DWORD] %28
50                           #  push_eax              # 1
B8 01000000                  #  mov_eax, %1
5B                           #  pop_ebx               # =
8903                         #  mov_[ebx],eax
58                           #  pop_eax               # ;
                             ## hex2.c 150
50                           #  push_eax              # s (local)
8D85 20000000                #  lea_eax,[ebp+DWORD] %32
50                           #  push_eax              # $ (dup)
8B00                         #  mov_eax,[eax]         # ?
50                           #  push_eax              # 1
B8 01000000                  #  mov_eax, %1
5B                           #  pop_ebx               # +
01D8                         #  add_eax,ebx
5B                           #  pop_ebx               # =
8903                         #  mov_[ebx],eax
50                           #  push_eax              # 1
B8 01000000                  #  mov_eax, %1
5B                           #  pop_ebx               # -
29C3                         #  sub_ebx,eax
89D8                         #  mov_eax,ebx
58                           #  pop_eax               # ;
E9 700A0000                  #  jmp %_process_file_else_end9
                             #:_process_file_else9
                             ## hex2.c 152
50                           #  push_eax              # s (local)
8D85 20000000                #  lea_eax,[ebp+DWORD] %32
8B00                         #  mov_eax,[eax]         # ?
8A00                         #  mov_al,[eax]          # ?1
0FB6C0                       #  movzx_eax,al
0FBEC0                       #  movsx_eax,al          # char
50                           #  push_eax              # 58
B8 3A000000                  #  mov_eax, %58
5B                           #  pop_ebx               # ==
39C3                         #  cmp_eax_ebx
0F94C0                       #  sete_al
0FB6C0                       #  movzx_eax,al
85C0                         #  test_eax,eax          # if
58                           #  pop_eax
0F84 DD010000                #  je %_process_file_else10
                             ## hex2.c 153
                             ## hex2.c 154
50                           #  push_eax              # s (local)
8D85 20000000                #  lea_eax,[ebp+DWORD] %32
50                           #  push_eax              # $ (dup)
8B00                         #  mov_eax,[eax]         # ?
50                           #  push_eax              # 1
B8 01000000                  #  mov_eax, %1
5B                           #  pop_ebx               # +
01D8                         #  add_eax,ebx
5B                           #  pop_ebx               # =
8903                         #  mov_[ebx],eax
50                           #  push_eax              # 1
B8 01000000                  #  mov_eax, %1
5B                           #  pop_ebx               # -
29C3                         #  sub_ebx,eax
89D8                         #  mov_eax,ebx
58                           #  pop_eax               # ;
50                           #  push_eax              # label (local)
8D85 24000000                #  lea_eax,[ebp+DWORD] %36
50                           #  push_eax              # s (local)
8D85 20000000                #  lea_eax,[ebp+DWORD] %32
8B00                         #  mov_eax,[eax]         # ?
5B                           #  pop_ebx               # =
8903                         #  mov_[ebx],eax
58                           #  pop_eax               # ;
50                           #  push_eax              # label_len (local)
8D85 28000000                #  lea_eax,[ebp+DWORD] %40
50                           #  push_eax              # 0
B8 00000000                  #  mov_eax, %0
5B                           #  pop_ebx               # =
8903                         #  mov_[ebx],eax
58                           #  pop_eax               # ;
                             ## hex2.c 157
                             #:_process_file_loop11
50                           #  push_eax              # s (local)
8D85 20000000                #  lea_eax,[ebp+DWORD] %32
8B00                         #  mov_eax,[eax]         # ?
8A00                         #  mov_al,[eax]          # ?1
0FB6C0                       #  movzx_eax,al
0FBEC0                       #  movsx_eax,al          # char
50                           #  push_eax              # 32
B8 20000000                  #  mov_eax, %32
5B                           #  pop_ebx               # >s
39C3                         #  cmp_eax_ebx
0F9FC0                       #  setg_al
0FB6C0                       #  movzx_eax,al
85C0                         #  test_eax,eax          # !
0F94C0                       #  sete_al
0FB6C0                       #  movzx_eax,al
85C0                         #  test_eax,eax          # if
58                           #  pop_eax
0F84 05000000                #  je %_process_file_else12
E9 49000000                  #  jmp %_process_file_loop_end11
                             ## hex2.c 158
                             #:_process_file_else12 # no else
50                           #  push_eax              # label_len (local)
8D85 28000000                #  lea_eax,[ebp+DWORD] %40
50                           #  push_eax              # $ (dup)
8B00                         #  mov_eax,[eax]         # ?
50                           #  push_eax              # 1
B8 01000000                  #  mov_eax, %1
5B                           #  pop_ebx               # +
01D8                         #  add_eax,ebx
5B                           #  pop_ebx               # =
8903                         #  mov_[ebx],eax
50                           #  push_eax              # 1
B8 01000000                  #  mov_eax, %1
5B                           #  pop_ebx               # -
29C3                         #  sub_ebx,eax
89D8                         #  mov_eax,ebx
58                           #  pop_eax               # ;
50                           #  push_eax              # s (local)
8D85 20000000                #  lea_eax,[ebp+DWORD] %32
50                           #  push_eax              # $ (dup)
8B00                         #  mov_eax,[eax]         # ?
50                           #  push_eax              # 1
B8 01000000                  #  mov_eax, %1
5B                           #  pop_ebx               # +
01D8                         #  add_eax,ebx
5B                           #  pop_ebx               # =
8903                         #  mov_[ebx],eax
50                           #  push_eax              # 1
B8 01000000                  #  mov_eax, %1
5B                           #  pop_ebx               # -
29C3                         #  sub_ebx,eax
89D8                         #  mov_eax,ebx
58                           #  pop_eax               # ;
E9 81FFFFFF                  #  jmp %_process_file_loop11
                             #:_process_file_loop_end11
                             ## hex2.c 159
50                           #  push_eax              # label_len (local)
8D85 28000000                #  lea_eax,[ebp+DWORD] %40
8B00                         #  mov_eax,[eax]         # ?
50                           #  push_eax              # 0
B8 00000000                  #  mov_eax, %0
5B                           #  pop_ebx               # >s
39C3                         #  cmp_eax_ebx
0F9FC0                       #  setg_al
0FB6C0                       #  movzx_eax,al
85C0                         #  test_eax,eax          # &&
0F84 0A000000                #  je %_process_file_and_end13
58                           #  pop_eax
50                           #  push_eax              # add_labels (local)
8D85 0C000000                #  lea_eax,[ebp+DWORD] %12
8B00                         #  mov_eax,[eax]         # ?
                             #:_process_file_and_end13
85C0                         #  test_eax,eax          # if
58                           #  pop_eax
0F84 DF000000                #  je %_process_file_else14
                             ## hex2.c 160
50                           #  push_eax              # new_label (local)
8D85 2C000000                #  lea_eax,[ebp+DWORD] %44
50                           #  push_eax              # 12
B8 0C000000                  #  mov_eax, %12
50                           #  push_eax              # malloc (function)
B8 B5800408                  #  mov_eax, &f_malloc
81C5 30000000                #  add_ebp, %48         # ()
FFD0                         #  call_eax
81ED 30000000                #  sub_ebp, %48
5B                           #  pop_ebx               # =
8903                         #  mov_[ebx],eax
58                           #  pop_eax               # ;
                             ## hex2.c 162
50                           #  push_eax              # new_label (local)
8D85 2C000000                #  lea_eax,[ebp+DWORD] %44
8B00                         #  mov_eax,[eax]         # ->
81C0 00000000                #  add_eax, %0
50                           #  push_eax              # label_len (local)
8D85 28000000                #  lea_eax,[ebp+DWORD] %40
8B00                         #  mov_eax,[eax]         # ?
50                           #  push_eax              # 1
B8 01000000                  #  mov_eax, %1
5B                           #  pop_ebx               # +
01D8                         #  add_eax,ebx
50                           #  push_eax              # malloc (function)
B8 B5800408                  #  mov_eax, &f_malloc
81C5 30000000                #  add_ebp, %48         # ()
FFD0                         #  call_eax
81ED 30000000                #  sub_ebp, %48
5B                           #  pop_ebx               # =
8903                         #  mov_[ebx],eax
58                           #  pop_eax               # ;
                             ## hex2.c 163
50                           #  push_eax              # new_label (local)
8D85 2C000000                #  lea_eax,[ebp+DWORD] %44
8B00                         #  mov_eax,[eax]         # ->
81C0 00000000                #  add_eax, %0
8B00                         #  mov_eax,[eax]         # ?
50                           #  push_eax              # label (local)
8D85 24000000                #  lea_eax,[ebp+DWORD] %36
8B00                         #  mov_eax,[eax]         # ?
50                           #  push_eax              # label_len (local)
8D85 28000000                #  lea_eax,[ebp+DWORD] %40
8B00                         #  mov_eax,[eax]         # ?
50                           #  push_eax              # strncpy (function)
B8 22840408                  #  mov_eax, &f_strncpy
81C5 30000000                #  add_ebp, %48         # ()
FFD0                         #  call_eax
81ED 30000000                #  sub_ebp, %48
58                           #  pop_eax               # ;
                             ## hex2.c 164
50                           #  push_eax              # new_label (local)
8D85 2C000000                #  lea_eax,[ebp+DWORD] %44
8B00                         #  mov_eax,[eax]         # ->
81C0 04000000                #  add_eax, %4
50                           #  push_eax              # ip (global)
B8 1CA10408                  #  mov_eax, &g_ip
8B00                         #  mov_eax,[eax]         # ?
5B                           #  pop_ebx               # =
8903                         #  mov_[ebx],eax
58                           #  pop_eax               # ;
                             ## hex2.c 165
50                           #  push_eax              # new_label (local)
8D85 2C000000                #  lea_eax,[ebp+DWORD] %44
8B00                         #  mov_eax,[eax]         # ->
81C0 08000000                #  add_eax, %8
50                           #  push_eax              # labels (global)
B8 20A10408                  #  mov_eax, &g_labels
8B00                         #  mov_eax,[eax]         # ?
5B                           #  pop_ebx               # =
8903                         #  mov_[ebx],eax
58                           #  pop_eax               # ;
                             ## hex2.c 166
50                           #  push_eax              # labels (global)
B8 20A10408                  #  mov_eax, &g_labels
50                           #  push_eax              # new_label (local)
8D85 2C000000                #  lea_eax,[ebp+DWORD] %44
8B00                         #  mov_eax,[eax]         # ?
5B                           #  pop_ebx               # =
8903                         #  mov_[ebx],eax
58                           #  pop_eax               # ;
                             #:_process_file_else14 # no else
E9 6A080000                  #  jmp %_process_file_else_end10
                             #:_process_file_else10
                             ## hex2.c 169
50                           #  push_eax              # s (local)
8D85 20000000                #  lea_eax,[ebp+DWORD] %32
8B00                         #  mov_eax,[eax]         # ?
8A00                         #  mov_al,[eax]          # ?1
0FB6C0                       #  movzx_eax,al
0FBEC0                       #  movsx_eax,al          # char
50                           #  push_eax              # is_hex (function)
B8 3D870408                  #  mov_eax, &f_is_hex
81C5 24000000                #  add_ebp, %36         # ()
FFD0                         #  call_eax
81ED 24000000                #  sub_ebp, %36
50                           #  push_eax              # 0
B8 00000000                  #  mov_eax, %0
5B                           #  pop_ebx               # >=sfv
39C3                         #  cmp_eax_ebx
0F9DC0                       #  setge_al
0FB6C0                       #  movzx_eax,al
85C0                         #  test_eax,eax          # &&
0F84 3E000000                #  je %_process_file_and_end15
58                           #  pop_eax
50                           #  push_eax              # s (local)
8D85 20000000                #  lea_eax,[ebp+DWORD] %32
8B00                         #  mov_eax,[eax]         # ?
50                           #  push_eax              # 1
B8 01000000                  #  mov_eax, %1
5B                           #  pop_ebx               # +
01D8                         #  add_eax,ebx
8A00                         #  mov_al,[eax]          # ?1
0FB6C0                       #  movzx_eax,al
0FBEC0                       #  movsx_eax,al          # char
50                           #  push_eax              # is_hex (function)
B8 3D870408                  #  mov_eax, &f_is_hex
81C5 24000000                #  add_ebp, %36         # ()
FFD0                         #  call_eax
81ED 24000000                #  sub_ebp, %36
50                           #  push_eax              # 0
B8 00000000                  #  mov_eax, %0
5B                           #  pop_ebx               # >=sfv
39C3                         #  cmp_eax_ebx
0F9DC0                       #  setge_al
0FB6C0                       #  movzx_eax,al
                             #:_process_file_and_end15
85C0                         #  test_eax,eax          # if
58                           #  pop_eax
0F84 05010000                #  je %_process_file_else16
                             ## hex2.c 170
50                           #  push_eax              # byte (local)
8D85 24000000                #  lea_eax,[ebp+DWORD] %36
50                           #  push_eax              # s (local)
8D85 20000000                #  lea_eax,[ebp+DWORD] %32
8B00                         #  mov_eax,[eax]         # ?
8A00                         #  mov_al,[eax]          # ?1
0FB6C0                       #  movzx_eax,al
0FBEC0                       #  movsx_eax,al          # char
50                           #  push_eax              # is_hex (function)
B8 3D870408                  #  mov_eax, &f_is_hex
81C5 28000000                #  add_ebp, %40         # ()
FFD0                         #  call_eax
81ED 28000000                #  sub_ebp, %40
50                           #  push_eax              # 4
B8 04000000                  #  mov_eax, %4
89C1                         #  mov_ecx,eax           # <<
58                           #  pop_eax
D3E0                         #  shl_eax,cl
50                           #  push_eax              # s (local)
8D85 20000000                #  lea_eax,[ebp+DWORD] %32
8B00                         #  mov_eax,[eax]         # ?
50                           #  push_eax              # 1
B8 01000000                  #  mov_eax, %1
5B                           #  pop_ebx               # +
01D8                         #  add_eax,ebx
8A00                         #  mov_al,[eax]          # ?1
0FB6C0                       #  movzx_eax,al
0FBEC0                       #  movsx_eax,al          # char
50                           #  push_eax              # is_hex (function)
B8 3D870408                  #  mov_eax, &f_is_hex
81C5 28000000                #  add_ebp, %40         # ()
FFD0                         #  call_eax
81ED 28000000                #  sub_ebp, %40
5B                           #  pop_ebx               # |
09D8                         #  or_eax,ebx
5B                           #  pop_ebx               # =
8903                         #  mov_[ebx],eax
58                           #  pop_eax               # ;
                             ## hex2.c 172
50                           #  push_eax              # output_byte (local)
8D85 08000000                #  lea_eax,[ebp+DWORD] %8
8B00                         #  mov_eax,[eax]         # ?
50                           #  push_eax              # 0
B8 00000000                  #  mov_eax, %0
5B                           #  pop_ebx               # !=
39C3                         #  cmp_eax_ebx
0F95C0                       #  setne_al
0FB6C0                       #  movzx_eax,al
85C0                         #  test_eax,eax          # if
58                           #  pop_eax
0F84 2A000000                #  je %_process_file_else17
                             ## hex2.c 173
50                           #  push_eax              # byte (local)
8D85 24000000                #  lea_eax,[ebp+DWORD] %36
8B00                         #  mov_eax,[eax]         # ?
50                           #  push_eax              # space (local)
8D85 1C000000                #  lea_eax,[ebp+DWORD] %28
8B00                         #  mov_eax,[eax]         # ?
50                           #  push_eax              # output_byte (local)
8D85 08000000                #  lea_eax,[ebp+DWORD] %8
8B00                         #  mov_eax,[eax]         # ?
81C5 28000000                #  add_ebp, %40         # ()
FFD0                         #  call_eax
81ED 28000000                #  sub_ebp, %40
58                           #  pop_eax               # ;
                             ## hex2.c 174
                             #:_process_file_else17 # no else
50                           #  push_eax              # space (local)
8D85 1C000000                #  lea_eax,[ebp+DWORD] %28
50                           #  push_eax              # 0
B8 00000000                  #  mov_eax, %0
5B                           #  pop_ebx               # =
8903                         #  mov_[ebx],eax
58                           #  pop_eax               # ;
                             ## hex2.c 175
50                           #  push_eax              # ip (global)
B8 1CA10408                  #  mov_eax, &g_ip
50                           #  push_eax              # $ (dup)
8B00                         #  mov_eax,[eax]         # ?
50                           #  push_eax              # 1
B8 01000000                  #  mov_eax, %1
5B                           #  pop_ebx               # +
01D8                         #  add_eax,ebx
5B                           #  pop_ebx               # =
8903                         #  mov_[ebx],eax
50                           #  push_eax              # 1
B8 01000000                  #  mov_eax, %1
5B                           #  pop_ebx               # -
29C3                         #  sub_ebx,eax
89D8                         #  mov_eax,ebx
58                           #  pop_eax               # ;
                             ## hex2.c 176
50                           #  push_eax              # s (local)
8D85 20000000                #  lea_eax,[ebp+DWORD] %32
50                           #  push_eax              # $ (dup)
8B00                         #  mov_eax,[eax]         # ?
50                           #  push_eax              # 2
B8 02000000                  #  mov_eax, %2
5B                           #  pop_ebx               # +
01D8                         #  add_eax,ebx
5B                           #  pop_ebx               # =
8903                         #  mov_[ebx],eax
58                           #  pop_eax               # ;
E9 E2060000                  #  jmp %_process_file_else_end16
                             #:_process_file_else16
                             ## hex2.c 178
50                           #  push_eax              # s (local)
8D85 20000000                #  lea_eax,[ebp+DWORD] %32
8B00                         #  mov_eax,[eax]         # ?
8A00                         #  mov_al,[eax]          # ?1
0FB6C0                       #  movzx_eax,al
0FBEC0                       #  movsx_eax,al          # char
50                           #  push_eax              # 38
B8 26000000                  #  mov_eax, %38
5B                           #  pop_ebx               # ==
39C3                         #  cmp_eax_ebx
0F94C0                       #  sete_al
0FB6C0                       #  movzx_eax,al
85C0                         #  test_eax,eax          # ||
0F85 21000000                #  jne %_process_file_or_end18
58                           #  pop_eax
50                           #  push_eax              # s (local)
8D85 20000000                #  lea_eax,[ebp+DWORD] %32
8B00                         #  mov_eax,[eax]         # ?
8A00                         #  mov_al,[eax]          # ?1
0FB6C0                       #  movzx_eax,al
0FBEC0                       #  movsx_eax,al          # char
50                           #  push_eax              # 37
B8 25000000                  #  mov_eax, %37
5B                           #  pop_ebx               # ==
39C3                         #  cmp_eax_ebx
0F94C0                       #  sete_al
0FB6C0                       #  movzx_eax,al
                             #:_process_file_or_end18
85C0                         #  test_eax,eax          # ||
0F85 21000000                #  jne %_process_file_or_end19
58                           #  pop_eax
50                           #  push_eax              # s (local)
8D85 20000000                #  lea_eax,[ebp+DWORD] %32
8B00                         #  mov_eax,[eax]         # ?
8A00                         #  mov_al,[eax]          # ?1
0FB6C0                       #  movzx_eax,al
0FBEC0                       #  movsx_eax,al          # char
50                           #  push_eax              # 33
B8 21000000                  #  mov_eax, %33
5B                           #  pop_ebx               # ==
39C3                         #  cmp_eax_ebx
0F94C0                       #  sete_al
0FB6C0                       #  movzx_eax,al
                             #:_process_file_or_end19
85C0                         #  test_eax,eax          # if
58                           #  pop_eax
0F84 3C040000                #  je %_process_file_else20
                             ## hex2.c 179
50                           #  push_eax              # mode (local)
8D85 24000000                #  lea_eax,[ebp+DWORD] %36
50                           #  push_eax              # s (local)
8D85 20000000                #  lea_eax,[ebp+DWORD] %32
50                           #  push_eax              # $ (dup)
8B00                         #  mov_eax,[eax]         # ?
50                           #  push_eax              # 1
B8 01000000                  #  mov_eax, %1
5B                           #  pop_ebx               # +
01D8                         #  add_eax,ebx
5B                           #  pop_ebx               # =
8903                         #  mov_[ebx],eax
50                           #  push_eax              # 1
B8 01000000                  #  mov_eax, %1
5B                           #  pop_ebx               # -
29C3                         #  sub_ebx,eax
89D8                         #  mov_eax,ebx
8A00                         #  mov_al,[eax]          # ?1
0FB6C0                       #  movzx_eax,al
0FBEC0                       #  movsx_eax,al          # char
5B                           #  pop_ebx               # =1
8803                         #  mov_[ebx],al
58                           #  pop_eax               # ;
50                           #  push_eax              # l (local)
8D85 28000000                #  lea_eax,[ebp+DWORD] %40
50                           #  push_eax              # 0
B8 00000000                  #  mov_eax, %0
5B                           #  pop_ebx               # =
8903                         #  mov_[ebx],eax
58                           #  pop_eax               # ;
                             ## hex2.c 182
                             #:_process_file_loop21
50                           #  push_eax              # s (local)
8D85 20000000                #  lea_eax,[ebp+DWORD] %32
8B00                         #  mov_eax,[eax]         # ?
50                           #  push_eax              # l (local)
8D85 28000000                #  lea_eax,[ebp+DWORD] %40
8B00                         #  mov_eax,[eax]         # ?
5B                           #  pop_ebx               # +
01D8                         #  add_eax,ebx
8A00                         #  mov_al,[eax]          # ?1
0FB6C0                       #  movzx_eax,al
0FBEC0                       #  movsx_eax,al          # char
50                           #  push_eax              # 32
B8 20000000                  #  mov_eax, %32
5B                           #  pop_ebx               # >s
39C3                         #  cmp_eax_ebx
0F9FC0                       #  setg_al
0FB6C0                       #  movzx_eax,al
85C0                         #  test_eax,eax          # &&
0F84 2D000000                #  je %_process_file_and_end22
58                           #  pop_eax
50                           #  push_eax              # s (local)
8D85 20000000                #  lea_eax,[ebp+DWORD] %32
8B00                         #  mov_eax,[eax]         # ?
50                           #  push_eax              # l (local)
8D85 28000000                #  lea_eax,[ebp+DWORD] %40
8B00                         #  mov_eax,[eax]         # ?
5B                           #  pop_ebx               # +
01D8                         #  add_eax,ebx
8A00                         #  mov_al,[eax]          # ?1
0FB6C0                       #  movzx_eax,al
0FBEC0                       #  movsx_eax,al          # char
50                           #  push_eax              # 35
B8 23000000                  #  mov_eax, %35
5B                           #  pop_ebx               # !=
39C3                         #  cmp_eax_ebx
0F95C0                       #  setne_al
0FB6C0                       #  movzx_eax,al
                             #:_process_file_and_end22
85C0                         #  test_eax,eax          # &&
0F84 2D000000                #  je %_process_file_and_end23
58                           #  pop_eax
50                           #  push_eax              # s (local)
8D85 20000000                #  lea_eax,[ebp+DWORD] %32
8B00                         #  mov_eax,[eax]         # ?
50                           #  push_eax              # l (local)
8D85 28000000                #  lea_eax,[ebp+DWORD] %40
8B00                         #  mov_eax,[eax]         # ?
5B                           #  pop_ebx               # +
01D8                         #  add_eax,ebx
8A00                         #  mov_al,[eax]          # ?1
0FB6C0                       #  movzx_eax,al
0FBEC0                       #  movsx_eax,al          # char
50                           #  push_eax              # 62
B8 3E000000                  #  mov_eax, %62
5B                           #  pop_ebx               # !=
39C3                         #  cmp_eax_ebx
0F95C0                       #  setne_al
0FB6C0                       #  movzx_eax,al
                             #:_process_file_and_end23
85C0                         #  test_eax,eax          # !
0F94C0                       #  sete_al
0FB6C0                       #  movzx_eax,al
85C0                         #  test_eax,eax          # if
58                           #  pop_eax
0F84 05000000                #  je %_process_file_else24
E9 27000000                  #  jmp %_process_file_loop_end21
                             ## hex2.c 183
                             #:_process_file_else24 # no else
50                           #  push_eax              # l (local)
8D85 28000000                #  lea_eax,[ebp+DWORD] %40
50                           #  push_eax              # $ (dup)
8B00                         #  mov_eax,[eax]         # ?
50                           #  push_eax              # 1
B8 01000000                  #  mov_eax, %1
5B                           #  pop_ebx               # +
01D8                         #  add_eax,ebx
5B                           #  pop_ebx               # =
8903                         #  mov_[ebx],eax
50                           #  push_eax              # 1
B8 01000000                  #  mov_eax, %1
5B                           #  pop_ebx               # -
29C3                         #  sub_ebx,eax
89D8                         #  mov_eax,ebx
58                           #  pop_eax               # ;
E9 2DFFFFFF                  #  jmp %_process_file_loop21
                             #:_process_file_loop_end21
50                           #  push_eax              # pos (local)
8D85 2C000000                #  lea_eax,[ebp+DWORD] %44
50                           #  push_eax              # s (local)
8D85 20000000                #  lea_eax,[ebp+DWORD] %32
8B00                         #  mov_eax,[eax]         # ?
50                           #  push_eax              # l (local)
8D85 28000000                #  lea_eax,[ebp+DWORD] %40
8B00                         #  mov_eax,[eax]         # ?
50                           #  push_eax              # pos_for_label (function)
B8 48880408                  #  mov_eax, &f_pos_for_label
81C5 30000000                #  add_ebp, %48         # ()
FFD0                         #  call_eax
81ED 30000000                #  sub_ebp, %48
5B                           #  pop_ebx               # =
8903                         #  mov_[ebx],eax
58                           #  pop_eax               # ;
                             ## hex2.c 185
50                           #  push_eax              # s (local)
8D85 20000000                #  lea_eax,[ebp+DWORD] %32
50                           #  push_eax              # $ (dup)
8B00                         #  mov_eax,[eax]         # ?
50                           #  push_eax              # l (local)
8D85 28000000                #  lea_eax,[ebp+DWORD] %40
8B00                         #  mov_eax,[eax]         # ?
5B                           #  pop_ebx               # +
01D8                         #  add_eax,ebx
5B                           #  pop_ebx               # =
8903                         #  mov_[ebx],eax
58                           #  pop_eax               # ;
                             ## hex2.c 186
50                           #  push_eax              # ip (global)
B8 1CA10408                  #  mov_eax, &g_ip
50                           #  push_eax              # $ (dup)
8B00                         #  mov_eax,[eax]         # ?
50                           #  push_eax              # 4
B8 04000000                  #  mov_eax, %4
5B                           #  pop_ebx               # +
01D8                         #  add_eax,ebx
5B                           #  pop_ebx               # =
8903                         #  mov_[ebx],eax
58                           #  pop_eax               # ;
                             ## hex2.c 187
50                           #  push_eax              # mode (local)
8D85 24000000                #  lea_eax,[ebp+DWORD] %36
8A00                         #  mov_al,[eax]          # ?1
0FB6C0                       #  movzx_eax,al
0FBEC0                       #  movsx_eax,al          # char
50                           #  push_eax              # 37
B8 25000000                  #  mov_eax, %37
5B                           #  pop_ebx               # ==
39C3                         #  cmp_eax_ebx
0F94C0                       #  sete_al
0FB6C0                       #  movzx_eax,al
85C0                         #  test_eax,eax          # if
58                           #  pop_eax
0F84 6D010000                #  je %_process_file_else25
                             ## hex2.c 188
                             ## hex2.c 189
50                           #  push_eax              # s (local)
8D85 20000000                #  lea_eax,[ebp+DWORD] %32
8B00                         #  mov_eax,[eax]         # ?
8A00                         #  mov_al,[eax]          # ?1
0FB6C0                       #  movzx_eax,al
0FBEC0                       #  movsx_eax,al          # char
50                           #  push_eax              # 62
B8 3E000000                  #  mov_eax, %62
5B                           #  pop_ebx               # ==
39C3                         #  cmp_eax_ebx
0F94C0                       #  sete_al
0FB6C0                       #  movzx_eax,al
85C0                         #  test_eax,eax          # if
58                           #  pop_eax
0F84 29010000                #  je %_process_file_else26
                             ## hex2.c 190
                             ## hex2.c 191
50                           #  push_eax              # s (local)
8D85 20000000                #  lea_eax,[ebp+DWORD] %32
50                           #  push_eax              # $ (dup)
8B00                         #  mov_eax,[eax]         # ?
50                           #  push_eax              # 1
B8 01000000                  #  mov_eax, %1
5B                           #  pop_ebx               # +
01D8                         #  add_eax,ebx
5B                           #  pop_ebx               # =
8903                         #  mov_[ebx],eax
50                           #  push_eax              # 1
B8 01000000                  #  mov_eax, %1
5B                           #  pop_ebx               # -
29C3                         #  sub_ebx,eax
89D8                         #  mov_eax,ebx
58                           #  pop_eax               # ;
                             ## hex2.c 192
50                           #  push_eax              # l (local)
8D85 28000000                #  lea_eax,[ebp+DWORD] %40
50                           #  push_eax              # 0
B8 00000000                  #  mov_eax, %0
5B                           #  pop_ebx               # =
8903                         #  mov_[ebx],eax
58                           #  pop_eax               # ;
                             ## hex2.c 193
                             #:_process_file_loop27
50                           #  push_eax              # s (local)
8D85 20000000                #  lea_eax,[ebp+DWORD] %32
8B00                         #  mov_eax,[eax]         # ?
50                           #  push_eax              # l (local)
8D85 28000000                #  lea_eax,[ebp+DWORD] %40
8B00                         #  mov_eax,[eax]         # ?
5B                           #  pop_ebx               # +
01D8                         #  add_eax,ebx
8A00                         #  mov_al,[eax]          # ?1
0FB6C0                       #  movzx_eax,al
0FBEC0                       #  movsx_eax,al          # char
50                           #  push_eax              # 32
B8 20000000                  #  mov_eax, %32
5B                           #  pop_ebx               # >s
39C3                         #  cmp_eax_ebx
0F9FC0                       #  setg_al
0FB6C0                       #  movzx_eax,al
85C0                         #  test_eax,eax          # &&
0F84 2D000000                #  je %_process_file_and_end28
58                           #  pop_eax
50                           #  push_eax              # s (local)
8D85 20000000                #  lea_eax,[ebp+DWORD] %32
8B00                         #  mov_eax,[eax]         # ?
50                           #  push_eax              # l (local)
8D85 28000000                #  lea_eax,[ebp+DWORD] %40
8B00                         #  mov_eax,[eax]         # ?
5B                           #  pop_ebx               # +
01D8                         #  add_eax,ebx
8A00                         #  mov_al,[eax]          # ?1
0FB6C0                       #  movzx_eax,al
0FBEC0                       #  movsx_eax,al          # char
50                           #  push_eax              # 35
B8 23000000                  #  mov_eax, %35
5B                           #  pop_ebx               # !=
39C3                         #  cmp_eax_ebx
0F95C0                       #  setne_al
0FB6C0                       #  movzx_eax,al
                             #:_process_file_and_end28
85C0                         #  test_eax,eax          # !
0F94C0                       #  sete_al
0FB6C0                       #  movzx_eax,al
85C0                         #  test_eax,eax          # if
58                           #  pop_eax
0F84 05000000                #  je %_process_file_else29
E9 27000000                  #  jmp %_process_file_loop_end27
                             ## hex2.c 194
                             #:_process_file_else29 # no else
50                           #  push_eax              # l (local)
8D85 28000000                #  lea_eax,[ebp+DWORD] %40
50                           #  push_eax              # $ (dup)
8B00                         #  mov_eax,[eax]         # ?
50                           #  push_eax              # 1
B8 01000000                  #  mov_eax, %1
5B                           #  pop_ebx               # +
01D8                         #  add_eax,ebx
5B                           #  pop_ebx               # =
8903                         #  mov_[ebx],eax
50                           #  push_eax              # 1
B8 01000000                  #  mov_eax, %1
5B                           #  pop_ebx               # -
29C3                         #  sub_ebx,eax
89D8                         #  mov_eax,ebx
58                           #  pop_eax               # ;
E9 62FFFFFF                  #  jmp %_process_file_loop27
                             #:_process_file_loop_end27
                             ## hex2.c 195
50                           #  push_eax              # pos (local)
8D85 2C000000                #  lea_eax,[ebp+DWORD] %44
50                           #  push_eax              # $ (dup)
8B00                         #  mov_eax,[eax]         # ?
50                           #  push_eax              # s (local)
8D85 20000000                #  lea_eax,[ebp+DWORD] %32
8B00                         #  mov_eax,[eax]         # ?
50                           #  push_eax              # l (local)
8D85 28000000                #  lea_eax,[ebp+DWORD] %40
8B00                         #  mov_eax,[eax]         # ?
50                           #  push_eax              # pos_for_label (function)
B8 48880408                  #  mov_eax, &f_pos_for_label
81C5 30000000                #  add_ebp, %48         # ()
FFD0                         #  call_eax
81ED 30000000                #  sub_ebp, %48
5B                           #  pop_ebx               # -
29C3                         #  sub_ebx,eax
89D8                         #  mov_eax,ebx
5B                           #  pop_ebx               # =
8903                         #  mov_[ebx],eax
58                           #  pop_eax               # ;
                             ## hex2.c 196
50                           #  push_eax              # s (local)
8D85 20000000                #  lea_eax,[ebp+DWORD] %32
50                           #  push_eax              # $ (dup)
8B00                         #  mov_eax,[eax]         # ?
50                           #  push_eax              # l (local)
8D85 28000000                #  lea_eax,[ebp+DWORD] %40
8B00                         #  mov_eax,[eax]         # ?
5B                           #  pop_ebx               # +
01D8                         #  add_eax,ebx
5B                           #  pop_ebx               # =
8903                         #  mov_[ebx],eax
58                           #  pop_eax               # ;
E9 1B000000                  #  jmp %_process_file_else_end26
                             #:_process_file_else26
                             ## hex2.c 199
50                           #  push_eax              # pos (local)
8D85 2C000000                #  lea_eax,[ebp+DWORD] %44
50                           #  push_eax              # $ (dup)
8B00                         #  mov_eax,[eax]         # ?
50                           #  push_eax              # ip (global)
B8 1CA10408                  #  mov_eax, &g_ip
8B00                         #  mov_eax,[eax]         # ?
5B                           #  pop_ebx               # -
29C3                         #  sub_ebx,eax
89D8                         #  mov_eax,ebx
5B                           #  pop_ebx               # =
8903                         #  mov_[ebx],eax
58                           #  pop_eax               # ;
                             #:_process_file_else_end26
                             #:_process_file_else25 # no else
50                           #  push_eax              # nr_bits (local)
8D85 30000000                #  lea_eax,[ebp+DWORD] %48
50                           #  push_eax              # s (local)
8D85 20000000                #  lea_eax,[ebp+DWORD] %32
8B00                         #  mov_eax,[eax]         # ?
8A00                         #  mov_al,[eax]          # ?1
0FB6C0                       #  movzx_eax,al
0FBEC0                       #  movsx_eax,al          # char
50                           #  push_eax              # 33
B8 21000000                  #  mov_eax, %33
5B                           #  pop_ebx               # ==
39C3                         #  cmp_eax_ebx
0F94C0                       #  sete_al
0FB6C0                       #  movzx_eax,al
85C0                         #  test_eax,eax          # if
58                           #  pop_eax
0F84 0B000000                #  je %_process_file_else30
50                           #  push_eax              # 8
B8 08000000                  #  mov_eax, %8
E9 06000000                  #  jmp %_process_file_else_end30
                             #:_process_file_else30
50                           #  push_eax              # 32
B8 20000000                  #  mov_eax, %32
                             #:_process_file_else_end30
5B                           #  pop_ebx               # =
8903                         #  mov_[ebx],eax
58                           #  pop_eax               # ;
                             ## hex2.c 202
50                           #  push_eax              # i (local)
8D85 34000000                #  lea_eax,[ebp+DWORD] %52
50                           #  push_eax              # 0
B8 00000000                  #  mov_eax, %0
5B                           #  pop_ebx               # =
8903                         #  mov_[ebx],eax
58                           #  pop_eax               # ;
                             #:_process_file_loop31
50                           #  push_eax              # i (local)
8D85 34000000                #  lea_eax,[ebp+DWORD] %52
8B00                         #  mov_eax,[eax]         # ?
50                           #  push_eax              # nr_bits (local)
8D85 30000000                #  lea_eax,[ebp+DWORD] %48
8B00                         #  mov_eax,[eax]         # ?
5B                           #  pop_ebx               # <s
39C3                         #  cmp_eax_ebx
0F9CC0                       #  setl_al
0FB6C0                       #  movzx_eax,al
85C0                         #  test_eax,eax          # !
0F94C0                       #  sete_al
0FB6C0                       #  movzx_eax,al
85C0                         #  test_eax,eax          # if
58                           #  pop_eax
0F84 05000000                #  je %_process_file_else32
E9 A3000000                  #  jmp %_process_file_loop_end31
                             ## hex2.c 203
                             #:_process_file_else32 # no else
50                           #  push_eax              # byte (local)
8D85 38000000                #  lea_eax,[ebp+DWORD] %56
50                           #  push_eax              # pos (local)
8D85 2C000000                #  lea_eax,[ebp+DWORD] %44
8B00                         #  mov_eax,[eax]         # ?
50                           #  push_eax              # i (local)
8D85 34000000                #  lea_eax,[ebp+DWORD] %52
8B00                         #  mov_eax,[eax]         # ?
89C1                         #  mov_ecx,eax           # >>
58                           #  pop_eax
D3E8                         #  shr_eax,cl
50                           #  push_eax              # 255
B8 FF000000                  #  mov_eax, %255
5B                           #  pop_ebx               # &
21D8                         #  and_eax,ebx
5B                           #  pop_ebx               # =
8903                         #  mov_[ebx],eax
58                           #  pop_eax               # ;
                             ## hex2.c 205
50                           #  push_eax              # output_byte (local)
8D85 08000000                #  lea_eax,[ebp+DWORD] %8
8B00                         #  mov_eax,[eax]         # ?
50                           #  push_eax              # 0
B8 00000000                  #  mov_eax, %0
5B                           #  pop_ebx               # !=
39C3                         #  cmp_eax_ebx
0F95C0                       #  setne_al
0FB6C0                       #  movzx_eax,al
85C0                         #  test_eax,eax          # if
58                           #  pop_eax
0F84 2A000000                #  je %_process_file_else33
                             ## hex2.c 206
50                           #  push_eax              # byte (local)
8D85 38000000                #  lea_eax,[ebp+DWORD] %56
8B00                         #  mov_eax,[eax]         # ?
50                           #  push_eax              # space (local)
8D85 1C000000                #  lea_eax,[ebp+DWORD] %28
8B00                         #  mov_eax,[eax]         # ?
50                           #  push_eax              # output_byte (local)
8D85 08000000                #  lea_eax,[ebp+DWORD] %8
8B00                         #  mov_eax,[eax]         # ?
81C5 3C000000                #  add_ebp, %60         # ()
FFD0                         #  call_eax
81ED 3C000000                #  sub_ebp, %60
58                           #  pop_eax               # ;
                             ## hex2.c 207
                             #:_process_file_else33 # no else
50                           #  push_eax              # space (local)
8D85 1C000000                #  lea_eax,[ebp+DWORD] %28
50                           #  push_eax              # 0
B8 00000000                  #  mov_eax, %0
5B                           #  pop_ebx               # =
8903                         #  mov_[ebx],eax
58                           #  pop_eax               # ;
50                           #  push_eax              # i (local)
8D85 34000000                #  lea_eax,[ebp+DWORD] %52
50                           #  push_eax              # $ (dup)
8B00                         #  mov_eax,[eax]         # ?
50                           #  push_eax              # 8
B8 08000000                  #  mov_eax, %8
5B                           #  pop_ebx               # +
01D8                         #  add_eax,ebx
5B                           #  pop_ebx               # =
8903                         #  mov_[ebx],eax
58                           #  pop_eax               # ;
E9 2CFFFFFF                  #  jmp %_process_file_loop31
                             #:_process_file_loop_end31
E9 2B020000                  #  jmp %_process_file_else_end20
                             #:_process_file_else20
                             ## hex2.c 210
50                           #  push_eax              # s (local)
8D85 20000000                #  lea_eax,[ebp+DWORD] %32
8B00                         #  mov_eax,[eax]         # ?
8A00                         #  mov_al,[eax]          # ?1
0FB6C0                       #  movzx_eax,al
0FBEC0                       #  movsx_eax,al          # char
50                           #  push_eax              # 34
B8 22000000                  #  mov_eax, %34
5B                           #  pop_ebx               # ==
39C3                         #  cmp_eax_ebx
0F94C0                       #  sete_al
0FB6C0                       #  movzx_eax,al
85C0                         #  test_eax,eax          # if
58                           #  pop_eax
0F84 F7010000                #  je %_process_file_else34
                             ## hex2.c 211
                             ## hex2.c 212
50                           #  push_eax              # s (local)
8D85 20000000                #  lea_eax,[ebp+DWORD] %32
50                           #  push_eax              # $ (dup)
8B00                         #  mov_eax,[eax]         # ?
50                           #  push_eax              # 1
B8 01000000                  #  mov_eax, %1
5B                           #  pop_ebx               # +
01D8                         #  add_eax,ebx
5B                           #  pop_ebx               # =
8903                         #  mov_[ebx],eax
50                           #  push_eax              # 1
B8 01000000                  #  mov_eax, %1
5B                           #  pop_ebx               # -
29C3                         #  sub_ebx,eax
89D8                         #  mov_eax,ebx
58                           #  pop_eax               # ;
                             ## hex2.c 213
                             #:_process_file_loop35
50                           #  push_eax              # s (local)
8D85 20000000                #  lea_eax,[ebp+DWORD] %32
8B00                         #  mov_eax,[eax]         # ?
8A00                         #  mov_al,[eax]          # ?1
0FB6C0                       #  movzx_eax,al
0FBEC0                       #  movsx_eax,al          # char
50                           #  push_eax              # 0
B8 00000000                  #  mov_eax, %0
5B                           #  pop_ebx               # !=
39C3                         #  cmp_eax_ebx
0F95C0                       #  setne_al
0FB6C0                       #  movzx_eax,al
85C0                         #  test_eax,eax          # &&
0F84 21000000                #  je %_process_file_and_end36
58                           #  pop_eax
50                           #  push_eax              # s (local)
8D85 20000000                #  lea_eax,[ebp+DWORD] %32
8B00                         #  mov_eax,[eax]         # ?
8A00                         #  mov_al,[eax]          # ?1
0FB6C0                       #  movzx_eax,al
0FBEC0                       #  movsx_eax,al          # char
50                           #  push_eax              # 34
B8 22000000                  #  mov_eax, %34
5B                           #  pop_ebx               # !=
39C3                         #  cmp_eax_ebx
0F95C0                       #  setne_al
0FB6C0                       #  movzx_eax,al
                             #:_process_file_and_end36
85C0                         #  test_eax,eax          # !
0F94C0                       #  sete_al
0FB6C0                       #  movzx_eax,al
85C0                         #  test_eax,eax          # if
58                           #  pop_eax
0F84 05000000                #  je %_process_file_else37
E9 AC000000                  #  jmp %_process_file_loop_end35
                             ## hex2.c 214
                             ## hex2.c 215
                             #:_process_file_else37 # no else
50                           #  push_eax              # output_byte (local)
8D85 08000000                #  lea_eax,[ebp+DWORD] %8
8B00                         #  mov_eax,[eax]         # ?
50                           #  push_eax              # 0
B8 00000000                  #  mov_eax, %0
5B                           #  pop_ebx               # !=
39C3                         #  cmp_eax_ebx
0F95C0                       #  setne_al
0FB6C0                       #  movzx_eax,al
85C0                         #  test_eax,eax          # if
58                           #  pop_eax
0F84 32000000                #  je %_process_file_else38
                             ## hex2.c 216
50                           #  push_eax              # s (local)
8D85 20000000                #  lea_eax,[ebp+DWORD] %32
8B00                         #  mov_eax,[eax]         # ?
8A00                         #  mov_al,[eax]          # ?1
0FB6C0                       #  movzx_eax,al
0FBEC0                       #  movsx_eax,al          # char
50                           #  push_eax              # space (local)
8D85 1C000000                #  lea_eax,[ebp+DWORD] %28
8B00                         #  mov_eax,[eax]         # ?
50                           #  push_eax              # output_byte (local)
8D85 08000000                #  lea_eax,[ebp+DWORD] %8
8B00                         #  mov_eax,[eax]         # ?
81C5 24000000                #  add_ebp, %36         # ()
FFD0                         #  call_eax
81ED 24000000                #  sub_ebp, %36
58                           #  pop_eax               # ;
                             ## hex2.c 217
                             #:_process_file_else38 # no else
50                           #  push_eax              # space (local)
8D85 1C000000                #  lea_eax,[ebp+DWORD] %28
50                           #  push_eax              # 0
B8 00000000                  #  mov_eax, %0
5B                           #  pop_ebx               # =
8903                         #  mov_[ebx],eax
58                           #  pop_eax               # ;
                             ## hex2.c 218
50                           #  push_eax              # s (local)
8D85 20000000                #  lea_eax,[ebp+DWORD] %32
50                           #  push_eax              # $ (dup)
8B00                         #  mov_eax,[eax]         # ?
50                           #  push_eax              # 1
B8 01000000                  #  mov_eax, %1
5B                           #  pop_ebx               # +
01D8                         #  add_eax,ebx
5B                           #  pop_ebx               # =
8903                         #  mov_[ebx],eax
50                           #  push_eax              # 1
B8 01000000                  #  mov_eax, %1
5B                           #  pop_ebx               # -
29C3                         #  sub_ebx,eax
89D8                         #  mov_eax,ebx
58                           #  pop_eax               # ;
                             ## hex2.c 219
50                           #  push_eax              # ip (global)
B8 1CA10408                  #  mov_eax, &g_ip
50                           #  push_eax              # $ (dup)
8B00                         #  mov_eax,[eax]         # ?
50                           #  push_eax              # 1
B8 01000000                  #  mov_eax, %1
5B                           #  pop_ebx               # +
01D8                         #  add_eax,ebx
5B                           #  pop_ebx               # =
8903                         #  mov_[ebx],eax
50                           #  push_eax              # 1
B8 01000000                  #  mov_eax, %1
5B                           #  pop_ebx               # -
29C3                         #  sub_ebx,eax
89D8                         #  mov_eax,ebx
58                           #  pop_eax               # ;
E9 F5FEFFFF                  #  jmp %_process_file_loop35
                             #:_process_file_loop_end35
                             ## hex2.c 221
50                           #  push_eax              # s (local)
8D85 20000000                #  lea_eax,[ebp+DWORD] %32
8B00                         #  mov_eax,[eax]         # ?
8A00                         #  mov_al,[eax]          # ?1
0FB6C0                       #  movzx_eax,al
0FBEC0                       #  movsx_eax,al          # char
50                           #  push_eax              # 34
B8 22000000                  #  mov_eax, %34
5B                           #  pop_ebx               # ==
39C3                         #  cmp_eax_ebx
0F94C0                       #  sete_al
0FB6C0                       #  movzx_eax,al
85C0                         #  test_eax,eax          # if
58                           #  pop_eax
0F84 22000000                #  je %_process_file_else39
                             ## hex2.c 222
50                           #  push_eax              # s (local)
8D85 20000000                #  lea_eax,[ebp+DWORD] %32
50                           #  push_eax              # $ (dup)
8B00                         #  mov_eax,[eax]         # ?
50                           #  push_eax              # 1
B8 01000000                  #  mov_eax, %1
5B                           #  pop_ebx               # +
01D8                         #  add_eax,ebx
5B                           #  pop_ebx               # =
8903                         #  mov_[ebx],eax
50                           #  push_eax              # 1
B8 01000000                  #  mov_eax, %1
5B                           #  pop_ebx               # -
29C3                         #  sub_ebx,eax
89D8                         #  mov_eax,ebx
58                           #  pop_eax               # ;
                             ## hex2.c 223
                             #:_process_file_else39 # no else
50                           #  push_eax              # output_byte (local)
8D85 08000000                #  lea_eax,[ebp+DWORD] %8
8B00                         #  mov_eax,[eax]         # ?
50                           #  push_eax              # 0
B8 00000000                  #  mov_eax, %0
5B                           #  pop_ebx               # !=
39C3                         #  cmp_eax_ebx
0F95C0                       #  setne_al
0FB6C0                       #  movzx_eax,al
85C0                         #  test_eax,eax          # if
58                           #  pop_eax
0F84 27000000                #  je %_process_file_else40
                             ## hex2.c 224
50                           #  push_eax              # 0
B8 00000000                  #  mov_eax, %0
50                           #  push_eax              # space (local)
8D85 1C000000                #  lea_eax,[ebp+DWORD] %28
8B00                         #  mov_eax,[eax]         # ?
50                           #  push_eax              # output_byte (local)
8D85 08000000                #  lea_eax,[ebp+DWORD] %8
8B00                         #  mov_eax,[eax]         # ?
81C5 24000000                #  add_ebp, %36         # ()
FFD0                         #  call_eax
81ED 24000000                #  sub_ebp, %36
58                           #  pop_eax               # ;
                             ## hex2.c 225
                             #:_process_file_else40 # no else
50                           #  push_eax              # space (local)
8D85 1C000000                #  lea_eax,[ebp+DWORD] %28
50                           #  push_eax              # 0
B8 00000000                  #  mov_eax, %0
5B                           #  pop_ebx               # =
8903                         #  mov_[ebx],eax
58                           #  pop_eax               # ;
                             ## hex2.c 226
50                           #  push_eax              # ip (global)
B8 1CA10408                  #  mov_eax, &g_ip
50                           #  push_eax              # $ (dup)
8B00                         #  mov_eax,[eax]         # ?
50                           #  push_eax              # 1
B8 01000000                  #  mov_eax, %1
5B                           #  pop_ebx               # +
01D8                         #  add_eax,ebx
5B                           #  pop_ebx               # =
8903                         #  mov_[ebx],eax
50                           #  push_eax              # 1
B8 01000000                  #  mov_eax, %1
5B                           #  pop_ebx               # -
29C3                         #  sub_ebx,eax
89D8                         #  mov_eax,ebx
58                           #  pop_eax               # ;
E9 0B000000                  #  jmp %_process_file_else_end34
                             #:_process_file_else34
                             ## hex2.c 229
                             ## hex2.c 233
50                           #  push_eax              # 0
B8 00000000                  #  mov_eax, %0
8B5D00                       #  mov_ebx,[ebp]         # return
53                           #  push_ebx
C3                           #  ret
                             #:_process_file_else_end34
                             #:_process_file_else_end20
                             #:_process_file_else_end16
                             #:_process_file_else_end10
                             #:_process_file_else_end9
E9 79F4FFFF                  #  jmp %_process_file_loop4
                             #:_process_file_loop_end4
                             ## hex2.c 235
                             #:_process_file_loop41
50                           #  push_eax              # s (local)
8D85 20000000                #  lea_eax,[ebp+DWORD] %32
8B00                         #  mov_eax,[eax]         # ?
8A00                         #  mov_al,[eax]          # ?1
0FB6C0                       #  movzx_eax,al
0FBEC0                       #  movsx_eax,al          # char
50                           #  push_eax              # 0
B8 00000000                  #  mov_eax, %0
5B                           #  pop_ebx               # !=
39C3                         #  cmp_eax_ebx
0F95C0                       #  setne_al
0FB6C0                       #  movzx_eax,al
85C0                         #  test_eax,eax          # &&
0F84 21000000                #  je %_process_file_and_end42
58                           #  pop_eax
50                           #  push_eax              # s (local)
8D85 20000000                #  lea_eax,[ebp+DWORD] %32
8B00                         #  mov_eax,[eax]         # ?
8A00                         #  mov_al,[eax]          # ?1
0FB6C0                       #  movzx_eax,al
0FBEC0                       #  movsx_eax,al          # char
50                           #  push_eax              # 35
B8 23000000                  #  mov_eax, %35
5B                           #  pop_ebx               # !=
39C3                         #  cmp_eax_ebx
0F95C0                       #  setne_al
0FB6C0                       #  movzx_eax,al
                             #:_process_file_and_end42
85C0                         #  test_eax,eax          # &&
0F84 21000000                #  je %_process_file_and_end43
58                           #  pop_eax
50                           #  push_eax              # s (local)
8D85 20000000                #  lea_eax,[ebp+DWORD] %32
8B00                         #  mov_eax,[eax]         # ?
8A00                         #  mov_al,[eax]          # ?1
0FB6C0                       #  movzx_eax,al
0FBEC0                       #  movsx_eax,al          # char
50                           #  push_eax              # 13
B8 0D000000                  #  mov_eax, %13
5B                           #  pop_ebx               # !=
39C3                         #  cmp_eax_ebx
0F95C0                       #  setne_al
0FB6C0                       #  movzx_eax,al
                             #:_process_file_and_end43
85C0                         #  test_eax,eax          # &&
0F84 21000000                #  je %_process_file_and_end44
58                           #  pop_eax
50                           #  push_eax              # s (local)
8D85 20000000                #  lea_eax,[ebp+DWORD] %32
8B00                         #  mov_eax,[eax]         # ?
8A00                         #  mov_al,[eax]          # ?1
0FB6C0                       #  movzx_eax,al
0FBEC0                       #  movsx_eax,al          # char
50                           #  push_eax              # 10
B8 0A000000                  #  mov_eax, %10
5B                           #  pop_ebx               # !=
39C3                         #  cmp_eax_ebx
0F95C0                       #  setne_al
0FB6C0                       #  movzx_eax,al
                             #:_process_file_and_end44
85C0                         #  test_eax,eax          # !
0F94C0                       #  sete_al
0FB6C0                       #  movzx_eax,al
85C0                         #  test_eax,eax          # if
58                           #  pop_eax
0F84 05000000                #  je %_process_file_else45
E9 27000000                  #  jmp %_process_file_loop_end41
                             ## hex2.c 236
                             #:_process_file_else45 # no else
50                           #  push_eax              # s (local)
8D85 20000000                #  lea_eax,[ebp+DWORD] %32
50                           #  push_eax              # $ (dup)
8B00                         #  mov_eax,[eax]         # ?
50                           #  push_eax              # 1
B8 01000000                  #  mov_eax, %1
5B                           #  pop_ebx               # +
01D8                         #  add_eax,ebx
5B                           #  pop_ebx               # =
8903                         #  mov_[ebx],eax
50                           #  push_eax              # 1
B8 01000000                  #  mov_eax, %1
5B                           #  pop_ebx               # -
29C3                         #  sub_ebx,eax
89D8                         #  mov_eax,ebx
58                           #  pop_eax               # ;
E9 28FFFFFF                  #  jmp %_process_file_loop41
                             #:_process_file_loop_end41
                             ## hex2.c 237
50                           #  push_eax              # end_of_line (local)
8D85 04000000                #  lea_eax,[ebp+DWORD] %4
8B00                         #  mov_eax,[eax]         # ?
50                           #  push_eax              # 0
B8 00000000                  #  mov_eax, %0
5B                           #  pop_ebx               # !=
39C3                         #  cmp_eax_ebx
0F95C0                       #  setne_al
0FB6C0                       #  movzx_eax,al
85C0                         #  test_eax,eax          # if
58                           #  pop_eax
0F84 21000000                #  je %_process_file_else46
                             ## hex2.c 238
50                           #  push_eax              # s (local)
8D85 20000000                #  lea_eax,[ebp+DWORD] %32
8B00                         #  mov_eax,[eax]         # ?
50                           #  push_eax              # end_of_line (local)
8D85 04000000                #  lea_eax,[ebp+DWORD] %4
8B00                         #  mov_eax,[eax]         # ?
81C5 24000000                #  add_ebp, %36         # ()
FFD0                         #  call_eax
81ED 24000000                #  sub_ebp, %36
58                           #  pop_eax               # ;
                             #:_process_file_else46 # no else
E9 D7F2FFFF                  #  jmp %_process_file_loop2
                             #:_process_file_loop_end2
                             ## hex2.c 22
50                           #  push_eax              # 6
B8 06000000                  #  mov_eax, %6
50                           #  push_eax              # f (local)
8D85 14000000                #  lea_eax,[ebp+DWORD] %20
8B00                         #  mov_eax,[eax]         # ?
50                           #  push_eax              # 0
B8 00000000                  #  mov_eax, %0
50                           #  push_eax              # 0
B8 00000000                  #  mov_eax, %0
50                           #  push_eax              # sys_int80 (function)
B8 89800408                  #  mov_eax, &f_sys_int80
81C5 1C000000                #  add_ebp, %28         # ()
FFD0                         #  call_eax
81ED 1C000000                #  sub_ebp, %28
58                           #  pop_eax               # ;
50                           #  push_eax              # 0
B8 00000000                  #  mov_eax, %0
8B5D00                       #  mov_ebx,[ebp]         # return
53                           #  push_ebx
C3                           #  ret
                             #
                             #:f_output_hex
58                           #  pop_eax
894500                       #  mov_[ebp],eax
58                           #  pop_eax
50                           #  push_eax              # fh (local)
8D85 04000000                #  lea_eax,[ebp+DWORD] %4
5B                           #  pop_ebx               # =:
8918                         #  mov_[eax],ebx
58                           #  pop_eax
50                           #  push_eax              # ch (local)
8D85 08000000                #  lea_eax,[ebp+DWORD] %8
5B                           #  pop_ebx               # =:
8918                         #  mov_[eax],ebx
58                           #  pop_eax
                             ## hex2.c 245
50                           #  push_eax              # ch (local)
8D85 08000000                #  lea_eax,[ebp+DWORD] %8
8A00                         #  mov_al,[eax]          # ?1
0FB6C0                       #  movzx_eax,al
0FBEC0                       #  movsx_eax,al          # char
50                           #  push_eax              # ch (local)
8D85 08000000                #  lea_eax,[ebp+DWORD] %8
8A00                         #  mov_al,[eax]          # ?1
0FB6C0                       #  movzx_eax,al
0FBEC0                       #  movsx_eax,al          # char
50                           #  push_eax              # 10
B8 0A000000                  #  mov_eax, %10
5B                           #  pop_ebx               # <s
39C3                         #  cmp_eax_ebx
0F9CC0                       #  setl_al
0FB6C0                       #  movzx_eax,al
85C0                         #  test_eax,eax          # if
58                           #  pop_eax
0F84 0B000000                #  je %_output_hex_else1
50                           #  push_eax              # 48
B8 30000000                  #  mov_eax, %48
E9 11000000                  #  jmp %_output_hex_else_end1
                             #:_output_hex_else1
50                           #  push_eax              # 65
B8 41000000                  #  mov_eax, %65
50                           #  push_eax              # 10
B8 0A000000                  #  mov_eax, %10
5B                           #  pop_ebx               # -
29C3                         #  sub_ebx,eax
89D8                         #  mov_eax,ebx
                             #:_output_hex_else_end1
5B                           #  pop_ebx               # +
01D8                         #  add_eax,ebx
50                           #  push_eax              # fh (local)
8D85 04000000                #  lea_eax,[ebp+DWORD] %4
8B00                         #  mov_eax,[eax]         # ?
50                           #  push_eax              # fhputc (function)
B8 54850408                  #  mov_eax, &f_fhputc
81C5 0C000000                #  add_ebp, %12         # ()
FFD0                         #  call_eax
81ED 0C000000                #  sub_ebp, %12
58                           #  pop_eax               # ;
50                           #  push_eax              # 0
B8 00000000                  #  mov_eax, %0
8B5D00                       #  mov_ebx,[ebp]         # return
53                           #  push_ebx
C3                           #  ret
                             #
                             #:f_output_hex_byte
58                           #  pop_eax
894500                       #  mov_[ebp],eax
58                           #  pop_eax
50                           #  push_eax              # space (local)
8D85 04000000                #  lea_eax,[ebp+DWORD] %4
5B                           #  pop_ebx               # =:
8918                         #  mov_[eax],ebx
58                           #  pop_eax
50                           #  push_eax              # byte (local)
8D85 08000000                #  lea_eax,[ebp+DWORD] %8
5B                           #  pop_ebx               # =:
8918                         #  mov_[eax],ebx
58                           #  pop_eax
                             ## hex2.c 253
50                           #  push_eax              # space (local)
8D85 04000000                #  lea_eax,[ebp+DWORD] %4
8B00                         #  mov_eax,[eax]         # ?
85C0                         #  test_eax,eax          # if
58                           #  pop_eax
0F84 44000000                #  je %_output_hex_byte_else1
                             ## hex2.c 254
                             ## hex2.c 255
50                           #  push_eax              # 32
B8 20000000                  #  mov_eax, %32
50                           #  push_eax              # fout (global)
B8 28A10408                  #  mov_eax, &g_fout
8B00                         #  mov_eax,[eax]         # ?
50                           #  push_eax              # fhputc (function)
B8 54850408                  #  mov_eax, &f_fhputc
81C5 0C000000                #  add_ebp, %12         # ()
FFD0                         #  call_eax
81ED 0C000000                #  sub_ebp, %12
58                           #  pop_eax               # ;
                             ## hex2.c 256
50                           #  push_eax              # col (global)
B8 24A10408                  #  mov_eax, &g_col
50                           #  push_eax              # $ (dup)
8B00                         #  mov_eax,[eax]         # ?
50                           #  push_eax              # 1
B8 01000000                  #  mov_eax, %1
5B                           #  pop_ebx               # +
01D8                         #  add_eax,ebx
5B                           #  pop_ebx               # =
8903                         #  mov_[ebx],eax
50                           #  push_eax              # 1
B8 01000000                  #  mov_eax, %1
5B                           #  pop_ebx               # -
29C3                         #  sub_ebx,eax
89D8                         #  mov_eax,ebx
58                           #  pop_eax               # ;
                             ## hex2.c 258
                             #:_output_hex_byte_else1 # no else
50                           #  push_eax              # byte (local)
8D85 08000000                #  lea_eax,[ebp+DWORD] %8
8A00                         #  mov_al,[eax]          # ?1
0FB6C0                       #  movzx_eax,al
50                           #  push_eax              # 4
B8 04000000                  #  mov_eax, %4
89C1                         #  mov_ecx,eax           # >>
58                           #  pop_eax
D3E8                         #  shr_eax,cl
50                           #  push_eax              # 15
B8 0F000000                  #  mov_eax, %15
5B                           #  pop_ebx               # &
21D8                         #  and_eax,ebx
50                           #  push_eax              # fout (global)
B8 28A10408                  #  mov_eax, &g_fout
8B00                         #  mov_eax,[eax]         # ?
50                           #  push_eax              # output_hex (function)
B8 89970408                  #  mov_eax, &f_output_hex
81C5 0C000000                #  add_ebp, %12         # ()
FFD0                         #  call_eax
81ED 0C000000                #  sub_ebp, %12
58                           #  pop_eax               # ;
                             ## hex2.c 259
50                           #  push_eax              # byte (local)
8D85 08000000                #  lea_eax,[ebp+DWORD] %8
8A00                         #  mov_al,[eax]          # ?1
0FB6C0                       #  movzx_eax,al
50                           #  push_eax              # 15
B8 0F000000                  #  mov_eax, %15
5B                           #  pop_ebx               # &
21D8                         #  and_eax,ebx
50                           #  push_eax              # fout (global)
B8 28A10408                  #  mov_eax, &g_fout
8B00                         #  mov_eax,[eax]         # ?
50                           #  push_eax              # output_hex (function)
B8 89970408                  #  mov_eax, &f_output_hex
81C5 0C000000                #  add_ebp, %12         # ()
FFD0                         #  call_eax
81ED 0C000000                #  sub_ebp, %12
58                           #  pop_eax               # ;
                             ## hex2.c 260
50                           #  push_eax              # col (global)
B8 24A10408                  #  mov_eax, &g_col
50                           #  push_eax              # $ (dup)
8B00                         #  mov_eax,[eax]         # ?
50                           #  push_eax              # 2
B8 02000000                  #  mov_eax, %2
5B                           #  pop_ebx               # +
01D8                         #  add_eax,ebx
5B                           #  pop_ebx               # =
8903                         #  mov_[ebx],eax
58                           #  pop_eax               # ;
50                           #  push_eax              # 0
B8 00000000                  #  mov_eax, %0
8B5D00                       #  mov_ebx,[ebp]         # return
53                           #  push_ebx
C3                           #  ret
                             #
                             #:f_output_hex_end_of_line
58                           #  pop_eax
894500                       #  mov_[ebp],eax
58                           #  pop_eax
50                           #  push_eax              # s (local)
8D85 04000000                #  lea_eax,[ebp+DWORD] %4
5B                           #  pop_ebx               # =:
8918                         #  mov_[eax],ebx
58                           #  pop_eax
                             ## hex2.c 265
                             #:_output_hex_end_of_line_loop1
50                           #  push_eax              # col (global)
B8 24A10408                  #  mov_eax, &g_col
8B00                         #  mov_eax,[eax]         # ?
50                           #  push_eax              # 30
B8 1E000000                  #  mov_eax, %30
5B                           #  pop_ebx               # <s
39C3                         #  cmp_eax_ebx
0F9CC0                       #  setl_al
0FB6C0                       #  movzx_eax,al
85C0                         #  test_eax,eax          # !
0F94C0                       #  sete_al
0FB6C0                       #  movzx_eax,al
85C0                         #  test_eax,eax          # if
58                           #  pop_eax
0F84 05000000                #  je %_output_hex_end_of_line_else2
E9 49000000                  #  jmp %_output_hex_end_of_line_loop_end1
                             ## hex2.c 266
                             #:_output_hex_end_of_line_else2 # no else
50                           #  push_eax              # 32
B8 20000000                  #  mov_eax, %32
50                           #  push_eax              # fout (global)
B8 28A10408                  #  mov_eax, &g_fout
8B00                         #  mov_eax,[eax]         # ?
50                           #  push_eax              # fhputc (function)
B8 54850408                  #  mov_eax, &f_fhputc
81C5 08000000                #  add_ebp, %8         # ()
FFD0                         #  call_eax
81ED 08000000                #  sub_ebp, %8
58                           #  pop_eax               # ;
50                           #  push_eax              # col (global)
B8 24A10408                  #  mov_eax, &g_col
50                           #  push_eax              # $ (dup)
8B00                         #  mov_eax,[eax]         # ?
50                           #  push_eax              # 1
B8 01000000                  #  mov_eax, %1
5B                           #  pop_ebx               # +
01D8                         #  add_eax,ebx
5B                           #  pop_ebx               # =
8903                         #  mov_[ebx],eax
50                           #  push_eax              # 1
B8 01000000                  #  mov_eax, %1
5B                           #  pop_ebx               # -
29C3                         #  sub_ebx,eax
89D8                         #  mov_eax,ebx
58                           #  pop_eax               # ;
E9 8AFFFFFF                  #  jmp %_output_hex_end_of_line_loop1
                             #:_output_hex_end_of_line_loop_end1
                             ## hex2.c 267
                             #:_output_hex_end_of_line_loop3
50                           #  push_eax              # s (local)
8D85 04000000                #  lea_eax,[ebp+DWORD] %4
8B00                         #  mov_eax,[eax]         # ?
8A00                         #  mov_al,[eax]          # ?1
0FB6C0                       #  movzx_eax,al
0FBEC0                       #  movsx_eax,al          # char
50                           #  push_eax              # 0
B8 00000000                  #  mov_eax, %0
5B                           #  pop_ebx               # !=
39C3                         #  cmp_eax_ebx
0F95C0                       #  setne_al
0FB6C0                       #  movzx_eax,al
85C0                         #  test_eax,eax          # &&
0F84 21000000                #  je %_output_hex_end_of_line_and_end4
58                           #  pop_eax
50                           #  push_eax              # s (local)
8D85 04000000                #  lea_eax,[ebp+DWORD] %4
8B00                         #  mov_eax,[eax]         # ?
8A00                         #  mov_al,[eax]          # ?1
0FB6C0                       #  movzx_eax,al
0FBEC0                       #  movsx_eax,al          # char
50                           #  push_eax              # 13
B8 0D000000                  #  mov_eax, %13
5B                           #  pop_ebx               # !=
39C3                         #  cmp_eax_ebx
0F95C0                       #  setne_al
0FB6C0                       #  movzx_eax,al
                             #:_output_hex_end_of_line_and_end4
85C0                         #  test_eax,eax          # &&
0F84 21000000                #  je %_output_hex_end_of_line_and_end5
58                           #  pop_eax
50                           #  push_eax              # s (local)
8D85 04000000                #  lea_eax,[ebp+DWORD] %4
8B00                         #  mov_eax,[eax]         # ?
8A00                         #  mov_al,[eax]          # ?1
0FB6C0                       #  movzx_eax,al
0FBEC0                       #  movsx_eax,al          # char
50                           #  push_eax              # 10
B8 0A000000                  #  mov_eax, %10
5B                           #  pop_ebx               # !=
39C3                         #  cmp_eax_ebx
0F95C0                       #  setne_al
0FB6C0                       #  movzx_eax,al
                             #:_output_hex_end_of_line_and_end5
85C0                         #  test_eax,eax          # !
0F94C0                       #  sete_al
0FB6C0                       #  movzx_eax,al
85C0                         #  test_eax,eax          # if
58                           #  pop_eax
0F84 05000000                #  je %_output_hex_end_of_line_else6
E9 4B000000                  #  jmp %_output_hex_end_of_line_loop_end3
                             ## hex2.c 268
                             #:_output_hex_end_of_line_else6 # no else
50                           #  push_eax              # s (local)
8D85 04000000                #  lea_eax,[ebp+DWORD] %4
50                           #  push_eax              # $ (dup)
8B00                         #  mov_eax,[eax]         # ?
50                           #  push_eax              # 1
B8 01000000                  #  mov_eax, %1
5B                           #  pop_ebx               # +
01D8                         #  add_eax,ebx
5B                           #  pop_ebx               # =
8903                         #  mov_[ebx],eax
50                           #  push_eax              # 1
B8 01000000                  #  mov_eax, %1
5B                           #  pop_ebx               # -
29C3                         #  sub_ebx,eax
89D8                         #  mov_eax,ebx
8A00                         #  mov_al,[eax]          # ?1
0FB6C0                       #  movzx_eax,al
0FBEC0                       #  movsx_eax,al          # char
50                           #  push_eax              # fout (global)
B8 28A10408                  #  mov_eax, &g_fout
8B00                         #  mov_eax,[eax]         # ?
50                           #  push_eax              # fhputc (function)
B8 54850408                  #  mov_eax, &f_fhputc
81C5 08000000                #  add_ebp, %8         # ()
FFD0                         #  call_eax
81ED 08000000                #  sub_ebp, %8
58                           #  pop_eax               # ;
E9 2DFFFFFF                  #  jmp %_output_hex_end_of_line_loop3
                             #:_output_hex_end_of_line_loop_end3
                             ## hex2.c 269
50                           #  push_eax              # 10
B8 0A000000                  #  mov_eax, %10
50                           #  push_eax              # fout (global)
B8 28A10408                  #  mov_eax, &g_fout
8B00                         #  mov_eax,[eax]         # ?
50                           #  push_eax              # fhputc (function)
B8 54850408                  #  mov_eax, &f_fhputc
81C5 08000000                #  add_ebp, %8         # ()
FFD0                         #  call_eax
81ED 08000000                #  sub_ebp, %8
58                           #  pop_eax               # ;
                             ## hex2.c 270
50                           #  push_eax              # col (global)
B8 24A10408                  #  mov_eax, &g_col
50                           #  push_eax              # 1
B8 01000000                  #  mov_eax, %1
5B                           #  pop_ebx               # =
8903                         #  mov_[ebx],eax
58                           #  pop_eax               # ;
50                           #  push_eax              # 0
B8 00000000                  #  mov_eax, %0
8B5D00                       #  mov_ebx,[ebp]         # return
53                           #  push_ebx
C3                           #  ret
                             #
                             #:f_output_byte
58                           #  pop_eax
894500                       #  mov_[ebp],eax
58                           #  pop_eax
50                           #  push_eax              # space (local)
8D85 04000000                #  lea_eax,[ebp+DWORD] %4
5B                           #  pop_ebx               # =:
8918                         #  mov_[eax],ebx
58                           #  pop_eax
50                           #  push_eax              # byte (local)
8D85 08000000                #  lea_eax,[ebp+DWORD] %8
5B                           #  pop_ebx               # =:
8918                         #  mov_[eax],ebx
58                           #  pop_eax
                             ## hex2.c 275
50                           #  push_eax              # space (local)
8D85 04000000                #  lea_eax,[ebp+DWORD] %4
8B00                         #  mov_eax,[eax]         # ?
58                           #  pop_eax               # ;
                             ## hex2.c 276
50                           #  push_eax              # byte (local)
8D85 08000000                #  lea_eax,[ebp+DWORD] %8
8A00                         #  mov_al,[eax]          # ?1
0FB6C0                       #  movzx_eax,al
50                           #  push_eax              # fout (global)
B8 28A10408                  #  mov_eax, &g_fout
8B00                         #  mov_eax,[eax]         # ?
50                           #  push_eax              # fhputc (function)
B8 54850408                  #  mov_eax, &f_fhputc
81C5 0C000000                #  add_ebp, %12         # ()
FFD0                         #  call_eax
81ED 0C000000                #  sub_ebp, %12
58                           #  pop_eax               # ;
50                           #  push_eax              # 0
B8 00000000                  #  mov_eax, %0
8B5D00                       #  mov_ebx,[ebp]         # return
53                           #  push_ebx
C3                           #  ret
                             #
                             #:f_main
58                           #  pop_eax
894500                       #  mov_[ebp],eax
58                           #  pop_eax
50                           #  push_eax              # argv (local)
8D85 04000000                #  lea_eax,[ebp+DWORD] %4
5B                           #  pop_ebx               # =:
8918                         #  mov_[eax],ebx
58                           #  pop_eax
50                           #  push_eax              # argc (local)
8D85 08000000                #  lea_eax,[ebp+DWORD] %8
5B                           #  pop_ebx               # =:
8918                         #  mov_[eax],ebx
58                           #  pop_eax
50                           #  push_eax              # __init_globals__ (function)
B8 ABA00408                  #  mov_eax, &f___init_globals__
81C5 0C000000                #  add_ebp, %12         # ()
FFD0                         #  call_eax
81ED 0C000000                #  sub_ebp, %12
50                           #  push_eax              # _sys_env (global)
B8 18A10408                  #  mov_eax, &g__sys_env
50                           #  push_eax              # argv (local)
8D85 04000000                #  lea_eax,[ebp+DWORD] %4
8B00                         #  mov_eax,[eax]         # ?
50                           #  push_eax              # argc (local)
8D85 08000000                #  lea_eax,[ebp+DWORD] %8
8B00                         #  mov_eax,[eax]         # ?
50                           #  push_eax              # 4
B8 04000000                  #  mov_eax, %4
5B                           #  pop_ebx               # *
F7E3                         #  mul_ebx
50                           #  push_eax              # 4
B8 04000000                  #  mov_eax, %4
5B                           #  pop_ebx               # +
01D8                         #  add_eax,ebx
5B                           #  pop_ebx               # +
01D8                         #  add_eax,ebx
5B                           #  pop_ebx               # =
8903                         #  mov_[ebx],eax
58                           #  pop_eax               # ;
                             ## hex2.c 281
50                           #  push_eax              # fout (global)
B8 28A10408                  #  mov_eax, &g_fout
50                           #  push_eax              # 1
B8 01000000                  #  mov_eax, %1
5B                           #  pop_ebx               # =
8903                         #  mov_[ebx],eax
58                           #  pop_eax               # ;
50                           #  push_eax              # output_as_hex (local)
8D85 0C000000                #  lea_eax,[ebp+DWORD] %12
50                           #  push_eax              # 1
B8 01000000                  #  mov_eax, %1
5B                           #  pop_ebx               # =
8903                         #  mov_[ebx],eax
58                           #  pop_eax               # ;
50                           #  push_eax              # nr_input_files (local)
8D85 38000000                #  lea_eax,[ebp+DWORD] %56
50                           #  push_eax              # 0
B8 00000000                  #  mov_eax, %0
5B                           #  pop_ebx               # =
8903                         #  mov_[ebx],eax
58                           #  pop_eax               # ;
50                           #  push_eax              # output_file (local)
8D85 3C000000                #  lea_eax,[ebp+DWORD] %60
50                           #  push_eax              # 0
B8 00000000                  #  mov_eax, %0
5B                           #  pop_ebx               # =
8903                         #  mov_[ebx],eax
58                           #  pop_eax               # ;
                             ## hex2.c 286
50                           #  push_eax              # i (local)
8D85 40000000                #  lea_eax,[ebp+DWORD] %64
50                           #  push_eax              # 1
B8 01000000                  #  mov_eax, %1
5B                           #  pop_ebx               # =
8903                         #  mov_[ebx],eax
58                           #  pop_eax               # ;
                             #:_main_loop1
50                           #  push_eax              # i (local)
8D85 40000000                #  lea_eax,[ebp+DWORD] %64
8B00                         #  mov_eax,[eax]         # ?
50                           #  push_eax              # argc (local)
8D85 08000000                #  lea_eax,[ebp+DWORD] %8
8B00                         #  mov_eax,[eax]         # ?
5B                           #  pop_ebx               # <s
39C3                         #  cmp_eax_ebx
0F9CC0                       #  setl_al
0FB6C0                       #  movzx_eax,al
85C0                         #  test_eax,eax          # !
0F94C0                       #  sete_al
0FB6C0                       #  movzx_eax,al
85C0                         #  test_eax,eax          # if
58                           #  pop_eax
0F84 05000000                #  je %_main_else2
E9 23010000                  #  jmp %_main_loop_end1
                             ## hex2.c 287
                             #:_main_else2 # no else
50                           #  push_eax              # argv (local)
8D85 04000000                #  lea_eax,[ebp+DWORD] %4
8B00                         #  mov_eax,[eax]         # ?
50                           #  push_eax              # i (local)
8D85 40000000                #  lea_eax,[ebp+DWORD] %64
8B00                         #  mov_eax,[eax]         # ?
50                           #  push_eax              # 4
B8 04000000                  #  mov_eax, %4
5B                           #  pop_ebx               # *
F7E3                         #  mul_ebx
5B                           #  pop_ebx               # +
01D8                         #  add_eax,ebx
8B00                         #  mov_eax,[eax]         # ?
50                           #  push_eax              # '-o'
B8 0FA10408                  #  mov_eax, &string_0
50                           #  push_eax              # strcmp (function)
B8 06810408                  #  mov_eax, &f_strcmp
81C5 44000000                #  add_ebp, %68         # ()
FFD0                         #  call_eax
81ED 44000000                #  sub_ebp, %68
50                           #  push_eax              # 0
B8 00000000                  #  mov_eax, %0
5B                           #  pop_ebx               # ==
39C3                         #  cmp_eax_ebx
0F94C0                       #  sete_al
0FB6C0                       #  movzx_eax,al
85C0                         #  test_eax,eax          # if
58                           #  pop_eax
0F84 52000000                #  je %_main_else3
                             ## hex2.c 288
                             ## hex2.c 289
50                           #  push_eax              # i (local)
8D85 40000000                #  lea_eax,[ebp+DWORD] %64
50                           #  push_eax              # $ (dup)
8B00                         #  mov_eax,[eax]         # ?
50                           #  push_eax              # 1
B8 01000000                  #  mov_eax, %1
5B                           #  pop_ebx               # +
01D8                         #  add_eax,ebx
5B                           #  pop_ebx               # =
8903                         #  mov_[ebx],eax
50                           #  push_eax              # 1
B8 01000000                  #  mov_eax, %1
5B                           #  pop_ebx               # -
29C3                         #  sub_ebx,eax
89D8                         #  mov_eax,ebx
58                           #  pop_eax               # ;
                             ## hex2.c 290
50                           #  push_eax              # output_file (local)
8D85 3C000000                #  lea_eax,[ebp+DWORD] %60
50                           #  push_eax              # argv (local)
8D85 04000000                #  lea_eax,[ebp+DWORD] %4
8B00                         #  mov_eax,[eax]         # ?
50                           #  push_eax              # i (local)
8D85 40000000                #  lea_eax,[ebp+DWORD] %64
8B00                         #  mov_eax,[eax]         # ?
50                           #  push_eax              # 4
B8 04000000                  #  mov_eax, %4
5B                           #  pop_ebx               # *
F7E3                         #  mul_ebx
5B                           #  pop_ebx               # +
01D8                         #  add_eax,ebx
8B00                         #  mov_eax,[eax]         # ?
5B                           #  pop_ebx               # =
8903                         #  mov_[ebx],eax
58                           #  pop_eax               # ;
E9 58000000                  #  jmp %_main_else_end3
                             #:_main_else3
                             ## hex2.c 293
50                           #  push_eax              # input_files (local)
8D85 10000000                #  lea_eax,[ebp+DWORD] %16
50                           #  push_eax              # nr_input_files (local)
8D85 38000000                #  lea_eax,[ebp+DWORD] %56
50                           #  push_eax              # $ (dup)
8B00                         #  mov_eax,[eax]         # ?
50                           #  push_eax              # 1
B8 01000000                  #  mov_eax, %1
5B                           #  pop_ebx               # +
01D8                         #  add_eax,ebx
5B                           #  pop_ebx               # =
8903                         #  mov_[ebx],eax
50                           #  push_eax              # 1
B8 01000000                  #  mov_eax, %1
5B                           #  pop_ebx               # -
29C3                         #  sub_ebx,eax
89D8                         #  mov_eax,ebx
50                           #  push_eax              # 4
B8 04000000                  #  mov_eax, %4
5B                           #  pop_ebx               # *
F7E3                         #  mul_ebx
5B                           #  pop_ebx               # +
01D8                         #  add_eax,ebx
50                           #  push_eax              # argv (local)
8D85 04000000                #  lea_eax,[ebp+DWORD] %4
8B00                         #  mov_eax,[eax]         # ?
50                           #  push_eax              # i (local)
8D85 40000000                #  lea_eax,[ebp+DWORD] %64
8B00                         #  mov_eax,[eax]         # ?
50                           #  push_eax              # 4
B8 04000000                  #  mov_eax, %4
5B                           #  pop_ebx               # *
F7E3                         #  mul_ebx
5B                           #  pop_ebx               # +
01D8                         #  add_eax,ebx
8B00                         #  mov_eax,[eax]         # ?
5B                           #  pop_ebx               # =
8903                         #  mov_[ebx],eax
58                           #  pop_eax               # ;
                             #:_main_else_end3
50                           #  push_eax              # i (local)
8D85 40000000                #  lea_eax,[ebp+DWORD] %64
50                           #  push_eax              # $ (dup)
8B00                         #  mov_eax,[eax]         # ?
50                           #  push_eax              # 1
B8 01000000                  #  mov_eax, %1
5B                           #  pop_ebx               # +
01D8                         #  add_eax,ebx
5B                           #  pop_ebx               # =
8903                         #  mov_[ebx],eax
50                           #  push_eax              # 1
B8 01000000                  #  mov_eax, %1
5B                           #  pop_ebx               # -
29C3                         #  sub_ebx,eax
89D8                         #  mov_eax,ebx
58                           #  pop_eax               # ;
E9 ACFEFFFF                  #  jmp %_main_loop1
                             #:_main_loop_end1
                             ## hex2.c 295
50                           #  push_eax              # output_file (local)
8D85 3C000000                #  lea_eax,[ebp+DWORD] %60
8B00                         #  mov_eax,[eax]         # ?
50                           #  push_eax              # 0
B8 00000000                  #  mov_eax, %0
5B                           #  pop_ebx               # !=
39C3                         #  cmp_eax_ebx
0F95C0                       #  setne_al
0FB6C0                       #  movzx_eax,al
85C0                         #  test_eax,eax          # if
58                           #  pop_eax
0F84 01010000                #  je %_main_else4
                             ## hex2.c 296
                             ## hex2.c 297
50                           #  push_eax              # fout (global)
B8 28A10408                  #  mov_eax, &g_fout
50                           #  push_eax              # 5
B8 05000000                  #  mov_eax, %5
50                           #  push_eax              # output_file (local)
8D85 3C000000                #  lea_eax,[ebp+DWORD] %60
8B00                         #  mov_eax,[eax]         # ?
50                           #  push_eax              # 577
B8 41020000                  #  mov_eax, %577
50                           #  push_eax              # 511
B8 FF010000                  #  mov_eax, %511
50                           #  push_eax              # sys_int80 (function)
B8 89800408                  #  mov_eax, &f_sys_int80
81C5 40000000                #  add_ebp, %64         # ()
FFD0                         #  call_eax
81ED 40000000                #  sub_ebp, %64
5B                           #  pop_ebx               # =
8903                         #  mov_[ebx],eax
58                           #  pop_eax               # ;
                             ## hex2.c 298
50                           #  push_eax              # fout (global)
B8 28A10408                  #  mov_eax, &g_fout
8B00                         #  mov_eax,[eax]         # ?
50                           #  push_eax              # 0
B8 00000000                  #  mov_eax, %0
5B                           #  pop_ebx               # <s
39C3                         #  cmp_eax_ebx
0F9CC0                       #  setl_al
0FB6C0                       #  movzx_eax,al
85C0                         #  test_eax,eax          # if
58                           #  pop_eax
0F84 0B000000                #  je %_main_else5
                             ## hex2.c 299
                             ## hex2.c 303
50                           #  push_eax              # 4294967295
B8 FFFFFFFF                  #  mov_eax, %4294967295
8B5D00                       #  mov_ebx,[ebp]         # return
53                           #  push_ebx
C3                           #  ret
                             #:_main_else5 # no else
50                           #  push_eax              # len (local)
8D85 40000000                #  lea_eax,[ebp+DWORD] %64
50                           #  push_eax              # output_file (local)
8D85 3C000000                #  lea_eax,[ebp+DWORD] %60
8B00                         #  mov_eax,[eax]         # ?
50                           #  push_eax              # strlen (function)
B8 69830408                  #  mov_eax, &f_strlen
81C5 44000000                #  add_ebp, %68         # ()
FFD0                         #  call_eax
81ED 44000000                #  sub_ebp, %68
5B                           #  pop_ebx               # =
8903                         #  mov_[ebx],eax
58                           #  pop_eax               # ;
                             ## hex2.c 306
50                           #  push_eax              # output_as_hex (local)
8D85 0C000000                #  lea_eax,[ebp+DWORD] %12
50                           #  push_eax              # len (local)
8D85 40000000                #  lea_eax,[ebp+DWORD] %64
8B00                         #  mov_eax,[eax]         # ?
50                           #  push_eax              # 5
B8 05000000                  #  mov_eax, %5
5B                           #  pop_ebx               # >s
39C3                         #  cmp_eax_ebx
0F9FC0                       #  setg_al
0FB6C0                       #  movzx_eax,al
85C0                         #  test_eax,eax          # &&
0F84 4A000000                #  je %_main_and_end6
58                           #  pop_eax
50                           #  push_eax              # output_file (local)
8D85 3C000000                #  lea_eax,[ebp+DWORD] %60
8B00                         #  mov_eax,[eax]         # ?
50                           #  push_eax              # len (local)
8D85 40000000                #  lea_eax,[ebp+DWORD] %64
8B00                         #  mov_eax,[eax]         # ?
5B                           #  pop_ebx               # +
01D8                         #  add_eax,ebx
50                           #  push_eax              # 5
B8 05000000                  #  mov_eax, %5
5B                           #  pop_ebx               # -
29C3                         #  sub_ebx,eax
89D8                         #  mov_eax,ebx
50                           #  push_eax              # '.hex0'
B8 12A10408                  #  mov_eax, &string_1
50                           #  push_eax              # strcmp (function)
B8 06810408                  #  mov_eax, &f_strcmp
81C5 44000000                #  add_ebp, %68         # ()
FFD0                         #  call_eax
81ED 44000000                #  sub_ebp, %68
50                           #  push_eax              # 0
B8 00000000                  #  mov_eax, %0
5B                           #  pop_ebx               # ==
39C3                         #  cmp_eax_ebx
0F94C0                       #  sete_al
0FB6C0                       #  movzx_eax,al
                             #:_main_and_end6
5B                           #  pop_ebx               # =
8903                         #  mov_[ebx],eax
58                           #  pop_eax               # ;
                             ## hex2.c 309
                             #:_main_else4 # no else
50                           #  push_eax              # ip (global)
B8 1CA10408                  #  mov_eax, &g_ip
50                           #  push_eax              # 134512640
B8 00800408                  #  mov_eax, %134512640
5B                           #  pop_ebx               # =
8903                         #  mov_[ebx],eax
58                           #  pop_eax               # ;
                             ## hex2.c 310
50                           #  push_eax              # i (local)
8D85 40000000                #  lea_eax,[ebp+DWORD] %64
50                           #  push_eax              # 0
B8 00000000                  #  mov_eax, %0
5B                           #  pop_ebx               # =
8903                         #  mov_[ebx],eax
58                           #  pop_eax               # ;
                             #:_main_loop7
50                           #  push_eax              # i (local)
8D85 40000000                #  lea_eax,[ebp+DWORD] %64
8B00                         #  mov_eax,[eax]         # ?
50                           #  push_eax              # nr_input_files (local)
8D85 38000000                #  lea_eax,[ebp+DWORD] %56
8B00                         #  mov_eax,[eax]         # ?
5B                           #  pop_ebx               # <s
39C3                         #  cmp_eax_ebx
0F9CC0                       #  setl_al
0FB6C0                       #  movzx_eax,al
85C0                         #  test_eax,eax          # !
0F94C0                       #  sete_al
0FB6C0                       #  movzx_eax,al
85C0                         #  test_eax,eax          # if
58                           #  pop_eax
0F84 05000000                #  je %_main_else8
E9 6C000000                  #  jmp %_main_loop_end7
                             ## hex2.c 311
                             #:_main_else8 # no else
50                           #  push_eax              # input_files (local)
8D85 10000000                #  lea_eax,[ebp+DWORD] %16
50                           #  push_eax              # i (local)
8D85 40000000                #  lea_eax,[ebp+DWORD] %64
8B00                         #  mov_eax,[eax]         # ?
50                           #  push_eax              # 4
B8 04000000                  #  mov_eax, %4
5B                           #  pop_ebx               # *
F7E3                         #  mul_ebx
5B                           #  pop_ebx               # +
01D8                         #  add_eax,ebx
8B00                         #  mov_eax,[eax]         # ?
50                           #  push_eax              # 1
B8 01000000                  #  mov_eax, %1
50                           #  push_eax              # 0
B8 00000000                  #  mov_eax, %0
50                           #  push_eax              # 0
B8 00000000                  #  mov_eax, %0
50                           #  push_eax              # process_file (function)
B8 7D890408                  #  mov_eax, &f_process_file
81C5 44000000                #  add_ebp, %68         # ()
FFD0                         #  call_eax
81ED 44000000                #  sub_ebp, %68
58                           #  pop_eax               # ;
50                           #  push_eax              # i (local)
8D85 40000000                #  lea_eax,[ebp+DWORD] %64
50                           #  push_eax              # $ (dup)
8B00                         #  mov_eax,[eax]         # ?
50                           #  push_eax              # 1
B8 01000000                  #  mov_eax, %1
5B                           #  pop_ebx               # +
01D8                         #  add_eax,ebx
5B                           #  pop_ebx               # =
8903                         #  mov_[ebx],eax
50                           #  push_eax              # 1
B8 01000000                  #  mov_eax, %1
5B                           #  pop_ebx               # -
29C3                         #  sub_ebx,eax
89D8                         #  mov_eax,ebx
58                           #  pop_eax               # ;
E9 63FFFFFF                  #  jmp %_main_loop7
                             #:_main_loop_end7
                             ## hex2.c 313
50                           #  push_eax              # ip (global)
B8 1CA10408                  #  mov_eax, &g_ip
50                           #  push_eax              # 134512640
B8 00800408                  #  mov_eax, %134512640
5B                           #  pop_ebx               # =
8903                         #  mov_[ebx],eax
58                           #  pop_eax               # ;
                             ## hex2.c 314
50                           #  push_eax              # i (local)
8D85 40000000                #  lea_eax,[ebp+DWORD] %64
50                           #  push_eax              # 0
B8 00000000                  #  mov_eax, %0
5B                           #  pop_ebx               # =
8903                         #  mov_[ebx],eax
58                           #  pop_eax               # ;
                             #:_main_loop9
50                           #  push_eax              # i (local)
8D85 40000000                #  lea_eax,[ebp+DWORD] %64
8B00                         #  mov_eax,[eax]         # ?
50                           #  push_eax              # nr_input_files (local)
8D85 38000000                #  lea_eax,[ebp+DWORD] %56
8B00                         #  mov_eax,[eax]         # ?
5B                           #  pop_ebx               # <s
39C3                         #  cmp_eax_ebx
0F9CC0                       #  setl_al
0FB6C0                       #  movzx_eax,al
85C0                         #  test_eax,eax          # !
0F94C0                       #  sete_al
0FB6C0                       #  movzx_eax,al
85C0                         #  test_eax,eax          # if
58                           #  pop_eax
0F84 05000000                #  je %_main_else10
E9 C8000000                  #  jmp %_main_loop_end9
                             ## hex2.c 315
                             #:_main_else10 # no else
50                           #  push_eax              # output_as_hex (local)
8D85 0C000000                #  lea_eax,[ebp+DWORD] %12
8B00                         #  mov_eax,[eax]         # ?
85C0                         #  test_eax,eax          # if
58                           #  pop_eax
0F84 4A000000                #  je %_main_else11
                             ## hex2.c 316
50                           #  push_eax              # input_files (local)
8D85 10000000                #  lea_eax,[ebp+DWORD] %16
50                           #  push_eax              # i (local)
8D85 40000000                #  lea_eax,[ebp+DWORD] %64
8B00                         #  mov_eax,[eax]         # ?
50                           #  push_eax              # 4
B8 04000000                  #  mov_eax, %4
5B                           #  pop_ebx               # *
F7E3                         #  mul_ebx
5B                           #  pop_ebx               # +
01D8                         #  add_eax,ebx
8B00                         #  mov_eax,[eax]         # ?
50                           #  push_eax              # 0
B8 00000000                  #  mov_eax, %0
50                           #  push_eax              # output_hex_byte (function)
B8 22980408                  #  mov_eax, &f_output_hex_byte
50                           #  push_eax              # output_hex_end_of_line (function)
B8 23990408                  #  mov_eax, &f_output_hex_end_of_line
50                           #  push_eax              # process_file (function)
B8 7D890408                  #  mov_eax, &f_process_file
81C5 44000000                #  add_ebp, %68         # ()
FFD0                         #  call_eax
81ED 44000000                #  sub_ebp, %68
58                           #  pop_eax               # ;
E9 45000000                  #  jmp %_main_else_end11
                             #:_main_else11
                             ## hex2.c 318
50                           #  push_eax              # input_files (local)
8D85 10000000                #  lea_eax,[ebp+DWORD] %16
50                           #  push_eax              # i (local)
8D85 40000000                #  lea_eax,[ebp+DWORD] %64
8B00                         #  mov_eax,[eax]         # ?
50                           #  push_eax              # 4
B8 04000000                  #  mov_eax, %4
5B                           #  pop_ebx               # *
F7E3                         #  mul_ebx
5B                           #  pop_ebx               # +
01D8                         #  add_eax,ebx
8B00                         #  mov_eax,[eax]         # ?
50                           #  push_eax              # 0
B8 00000000                  #  mov_eax, %0
50                           #  push_eax              # output_byte (function)
B8 BA9A0408                  #  mov_eax, &f_output_byte
50                           #  push_eax              # 0
B8 00000000                  #  mov_eax, %0
50                           #  push_eax              # process_file (function)
B8 7D890408                  #  mov_eax, &f_process_file
81C5 44000000                #  add_ebp, %68         # ()
FFD0                         #  call_eax
81ED 44000000                #  sub_ebp, %68
58                           #  pop_eax               # ;
                             #:_main_else_end11
50                           #  push_eax              # i (local)
8D85 40000000                #  lea_eax,[ebp+DWORD] %64
50                           #  push_eax              # $ (dup)
8B00                         #  mov_eax,[eax]         # ?
50                           #  push_eax              # 1
B8 01000000                  #  mov_eax, %1
5B                           #  pop_ebx               # +
01D8                         #  add_eax,ebx
5B                           #  pop_ebx               # =
8903                         #  mov_[ebx],eax
50                           #  push_eax              # 1
B8 01000000                  #  mov_eax, %1
5B                           #  pop_ebx               # -
29C3                         #  sub_ebx,eax
89D8                         #  mov_eax,ebx
58                           #  pop_eax               # ;
E9 07FFFFFF                  #  jmp %_main_loop9
                             #:_main_loop_end9
                             ## hex2.c 320
50                           #  push_eax              # output_file (local)
8D85 3C000000                #  lea_eax,[ebp+DWORD] %60
8B00                         #  mov_eax,[eax]         # ?
50                           #  push_eax              # 0
B8 00000000                  #  mov_eax, %0
5B                           #  pop_ebx               # !=
39C3                         #  cmp_eax_ebx
0F95C0                       #  setne_al
0FB6C0                       #  movzx_eax,al
85C0                         #  test_eax,eax          # if
58                           #  pop_eax
0F84 5F000000                #  je %_main_else12
                             ## hex2.c 321
                             ## hex2.c 22
50                           #  push_eax              # 6
B8 06000000                  #  mov_eax, %6
50                           #  push_eax              # fout (global)
B8 28A10408                  #  mov_eax, &g_fout
8B00                         #  mov_eax,[eax]         # ?
50                           #  push_eax              # 0
B8 00000000                  #  mov_eax, %0
50                           #  push_eax              # 0
B8 00000000                  #  mov_eax, %0
50                           #  push_eax              # sys_int80 (function)
B8 89800408                  #  mov_eax, &f_sys_int80
81C5 40000000                #  add_ebp, %64         # ()
FFD0                         #  call_eax
81ED 40000000                #  sub_ebp, %64
58                           #  pop_eax               # ;
                             ## hex2.c 25
50                           #  push_eax              # 15
B8 0F000000                  #  mov_eax, %15
50                           #  push_eax              # output_file (local)
8D85 3C000000                #  lea_eax,[ebp+DWORD] %60
8B00                         #  mov_eax,[eax]         # ?
50                           #  push_eax              # 511
B8 FF010000                  #  mov_eax, %511
50                           #  push_eax              # 0
B8 00000000                  #  mov_eax, %0
50                           #  push_eax              # sys_int80 (function)
B8 89800408                  #  mov_eax, &f_sys_int80
81C5 40000000                #  add_ebp, %64         # ()
FFD0                         #  call_eax
81ED 40000000                #  sub_ebp, %64
58                           #  pop_eax               # ;
                             ## hex2.c 326
                             #:_main_else12 # no else
50                           #  push_eax              # 0
B8 00000000                  #  mov_eax, %0
8B5D00                       #  mov_ebx,[ebp]         # return
53                           #  push_ebx
C3                           #  ret
50                           #  push_eax              # 0
B8 00000000                  #  mov_eax, %0
8B5D00                       #  mov_ebx,[ebp]         # return
53                           #  push_ebx
C3                           #  ret
                             #
                             #:f___init_globals__
58                           #  pop_eax
894500                       #  mov_[ebp],eax
58                           #  pop_eax
50                           #  push_eax              # _sys_env (global)
B8 18A10408                  #  mov_eax, &g__sys_env
50                           #  push_eax              # 0
B8 00000000                  #  mov_eax, %0
5B                           #  pop_ebx               # =
8903                         #  mov_[ebx],eax
58                           #  pop_eax               # ;
50                           #  push_eax              # ip (global)
B8 1CA10408                  #  mov_eax, &g_ip
50                           #  push_eax              # 0
B8 00000000                  #  mov_eax, %0
5B                           #  pop_ebx               # =
8903                         #  mov_[ebx],eax
58                           #  pop_eax               # ;
50                           #  push_eax              # labels (global)
B8 20A10408                  #  mov_eax, &g_labels
50                           #  push_eax              # 0
B8 00000000                  #  mov_eax, %0
5B                           #  pop_ebx               # =
8903                         #  mov_[ebx],eax
58                           #  pop_eax               # ;
50                           #  push_eax              # col (global)
B8 24A10408                  #  mov_eax, &g_col
50                           #  push_eax              # 1
B8 01000000                  #  mov_eax, %1
5B                           #  pop_ebx               # =
8903                         #  mov_[ebx],eax
58                           #  pop_eax               # ;
50                           #  push_eax              # fout (global)
B8 28A10408                  #  mov_eax, &g_fout
50                           #  push_eax              # 4294967295
B8 FFFFFFFF                  #  mov_eax, %4294967295
5B                           #  pop_ebx               # =
8903                         #  mov_[ebx],eax
58                           #  pop_eax               # ;
50                           #  push_eax              # 0
B8 00000000                  #  mov_eax, %0
8B5D00                       #  mov_ebx,[ebp]         # return
53                           #  push_ebx
C3                           #  ret
                             #
                             #:ELF_data
                             #
 00000000                    #:SYS_MALLOC NULL
 2D6F00                      #:string_0  "-o"
 2E6865783000                #:string_1  ".hex0"
                             #:g__sys_env
00000000                     #  NULL
                             #:g_ip
00000000                     #  NULL
                             #:g_labels
00000000                     #  NULL
                             #:g_col
00000000                     #  NULL
                             #:g_fout
00000000                     #  NULL
                             #:static_0_line
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000#    NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000#    NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000#    NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000#    NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000#    NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000#    NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000#    NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000#    NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000#    NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000#    NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000#    NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000#    NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000#    NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000#    NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000#    NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000#    NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000#    NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000#    NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000#    NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000#    NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000#    NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000#    NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000#    NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000#    NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000#    NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000#    NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000#    NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000#    NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000#    NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000#    NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000#    NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000            #  NULL NULL
                             #
                             #:ELF_end
                             # Generated sections
                             
00                           # NULL
                             
2E7465787400                 
                             
2E736873747274616200         
                             
2E73796D74616200             
                             
2E73747274616200             
                             
                             
00000000                     #sh_name
00000000                     #sh_type
00000000                     #sh_flags
00000000                     #sh_addr
00000000                     #sh_offset
00000000                     #sh_size
00000000                     #sh_link
00000000                     #sh_info
01000000                     #sh_addralign
00000000                     #sh_entsize
                             
                             
01000000                     #sh_name
01000000                     #sh_type
06000000                     #sh_flags
54800408                     #sh_addr
54000000                     #sh_offset
B7200000                     #sh_size
00000000                     #sh_link
00000000                     #sh_info
01000000                     #sh_addralign
00000000                     #sh_entsize
                             
                             
07000000                     #sh_name
03000000                     #sh_type
00000000                     #sh_flags
14A50408                     #sh_addr
14250000                     #sh_offset
21000000                     #sh_size
00000000                     #sh_link
00000000                     #sh_info
01000000                     #sh_addralign
00000000                     #sh_entsize
                             
                             
19000000                     #sh_name
03000000                     #sh_type
00000000                     #sh_flags
FDA50408                     #sh_addr
FD250000                     #sh_offset
E00A0000                     #sh_size
00000000                     #sh_link
00000000                     #sh_info
01000000                     #sh_addralign
00000000                     #sh_entsize
                             
                             
11000000                     #sh_name
02000000                     #sh_type
00000000                     #sh_flags
DDB00408                     #sh_addr
DD300000                     #sh_offset
90090000                     #sh_size
03000000                     #sh_link
99000000                     #sh_info
01000000                     #sh_addralign
10000000                     #sh_entsize
                             
                             # Generated string table
                             
00                           # NULL string
 454C465F7465787400          # "ELF_text"
 5F737461727400              # "_start"
 665F7379735F696E74383000    # "f_sys_int80"
 665F7379735F6D616C6C6F6300  # "f_sys_malloc"
 5359535F4D414C4C4F4300      # "SYS_MALLOC"
 665F6D616C6C6F6300          # "f_malloc"
 665F737472636D7000          # "f_strcmp"
 5F737472636D705F6C6F6F703100# "_strcmp_loop1"
 5F737472636D705F6F725F656E643200# "_strcmp_or_end2"
 5F737472636D705F656C73653300# "_strcmp_else3"
 5F737472636D705F6C6F6F705F656E643100# "_strcmp_loop_end1"
 665F7374726E636D7000        # "f_strncmp"
 5F7374726E636D705F6C6F6F703100# "_strncmp_loop1"
 5F7374726E636D705F656C73653200# "_strncmp_else2"
 5F7374726E636D705F6F725F656E643300# "_strncmp_or_end3"
 5F7374726E636D705F656C73653400# "_strncmp_else4"
 5F7374726E636D705F6C6F6F705F656E643100# "_strncmp_loop_end1"
 665F7374726C656E00          # "f_strlen"
 5F7374726C656E5F6C6F6F703100# "_strlen_loop1"
 5F7374726C656E5F656C73653200# "_strlen_else2"
 5F7374726C656E5F6C6F6F705F656E643100# "_strlen_loop_end1"
 665F7374726E63707900        # "f_strncpy"
 5F7374726E6370795F6C6F6F703100# "_strncpy_loop1"
 5F7374726E6370795F656C73653200# "_strncpy_else2"
 5F7374726E6370795F656C73653300# "_strncpy_else3"
 5F7374726E6370795F6C6F6F705F656E643100# "_strncpy_loop_end1"
 665F66687075746300          # "f_fhputc"
 665F66686765747300          # "f_fhgets"
 5F6668676574735F6C6F6F703100# "_fhgets_loop1"
 5F6668676574735F656C73653200# "_fhgets_else2"
 5F6668676574735F656C73653400# "_fhgets_else4"
 5F6668676574735F656C73653300# "_fhgets_else3"
 5F6668676574735F656C73653500# "_fhgets_else5"
 5F6668676574735F6C6F6F705F656E643100# "_fhgets_loop_end1"
 665F69735F68657800          # "f_is_hex"
 5F69735F6865785F616E645F656E643100# "_is_hex_and_end1"
 5F69735F6865785F656C73653200# "_is_hex_else2"
 5F69735F6865785F616E645F656E643300# "_is_hex_and_end3"
 5F69735F6865785F656C73653400# "_is_hex_else4"
 665F706F735F666F725F6C6162656C00# "f_pos_for_label"
 5F706F735F666F725F6C6162656C5F6C6F6F703100# "_pos_for_label_loop1"
 5F706F735F666F725F6C6162656C5F656C73653200# "_pos_for_label_else2"
 5F706F735F666F725F6C6162656C5F616E645F656E643300# "_pos_for_label_and_end3"
 5F706F735F666F725F6C6162656C5F656C73653400# "_pos_for_label_else4"
 5F706F735F666F725F6C6162656C5F6C6F6F705F656E643100# "_pos_for_label_loop_end1"
 665F70726F636573735F66696C6500# "f_process_file"
 5F70726F636573735F66696C655F656C73653100# "_process_file_else1"
 5F70726F636573735F66696C655F6C6F6F703200# "_process_file_loop2"
 5F70726F636573735F66696C655F656C73653300# "_process_file_else3"
 5F70726F636573735F66696C655F6C6F6F703400# "_process_file_loop4"
 5F70726F636573735F66696C655F616E645F656E643500# "_process_file_and_end5"
 5F70726F636573735F66696C655F616E645F656E643600# "_process_file_and_end6"
 5F70726F636573735F66696C655F616E645F656E643700# "_process_file_and_end7"
 5F70726F636573735F66696C655F656C73653800# "_process_file_else8"
 5F70726F636573735F66696C655F656C73653900# "_process_file_else9"
 5F70726F636573735F66696C655F6C6F6F70313100# "_process_file_loop11"
 5F70726F636573735F66696C655F656C7365313200# "_process_file_else12"
 5F70726F636573735F66696C655F6C6F6F705F656E64313100# "_process_file_loop_end11"
 5F70726F636573735F66696C655F616E645F656E64313300# "_process_file_and_end13"
 5F70726F636573735F66696C655F656C7365313400# "_process_file_else14"
 5F70726F636573735F66696C655F656C7365313000# "_process_file_else10"
 5F70726F636573735F66696C655F616E645F656E64313500# "_process_file_and_end15"
 5F70726F636573735F66696C655F656C7365313700# "_process_file_else17"
 5F70726F636573735F66696C655F656C7365313600# "_process_file_else16"
 5F70726F636573735F66696C655F6F725F656E64313800# "_process_file_or_end18"
 5F70726F636573735F66696C655F6F725F656E64313900# "_process_file_or_end19"
 5F70726F636573735F66696C655F6C6F6F70323100# "_process_file_loop21"
 5F70726F636573735F66696C655F616E645F656E64323200# "_process_file_and_end22"
 5F70726F636573735F66696C655F616E645F656E64323300# "_process_file_and_end23"
 5F70726F636573735F66696C655F656C7365323400# "_process_file_else24"
 5F70726F636573735F66696C655F6C6F6F705F656E64323100# "_process_file_loop_end21"
 5F70726F636573735F66696C655F6C6F6F70323700# "_process_file_loop27"
 5F70726F636573735F66696C655F616E645F656E64323800# "_process_file_and_end28"
 5F70726F636573735F66696C655F656C7365323900# "_process_file_else29"
 5F70726F636573735F66696C655F6C6F6F705F656E64323700# "_process_file_loop_end27"
 5F70726F636573735F66696C655F656C7365323600# "_process_file_else26"
 5F70726F636573735F66696C655F656C73655F656E64323600# "_process_file_else_end26"
 5F70726F636573735F66696C655F656C7365323500# "_process_file_else25"
 5F70726F636573735F66696C655F656C7365333000# "_process_file_else30"
 5F70726F636573735F66696C655F656C73655F656E64333000# "_process_file_else_end30"
 5F70726F636573735F66696C655F6C6F6F70333100# "_process_file_loop31"
 5F70726F636573735F66696C655F656C7365333200# "_process_file_else32"
 5F70726F636573735F66696C655F656C7365333300# "_process_file_else33"
 5F70726F636573735F66696C655F6C6F6F705F656E64333100# "_process_file_loop_end31"
 5F70726F636573735F66696C655F656C7365323000# "_process_file_else20"
 5F70726F636573735F66696C655F6C6F6F70333500# "_process_file_loop35"
 5F70726F636573735F66696C655F616E645F656E64333600# "_process_file_and_end36"
 5F70726F636573735F66696C655F656C7365333700# "_process_file_else37"
 5F70726F636573735F66696C655F656C7365333800# "_process_file_else38"
 5F70726F636573735F66696C655F6C6F6F705F656E64333500# "_process_file_loop_end35"
 5F70726F636573735F66696C655F656C7365333900# "_process_file_else39"
 5F70726F636573735F66696C655F656C7365343000# "_process_file_else40"
 5F70726F636573735F66696C655F656C7365333400# "_process_file_else34"
 5F70726F636573735F66696C655F656C73655F656E64333400# "_process_file_else_end34"
 5F70726F636573735F66696C655F656C73655F656E64323000# "_process_file_else_end20"
 5F70726F636573735F66696C655F656C73655F656E64313600# "_process_file_else_end16"
 5F70726F636573735F66696C655F656C73655F656E64313000# "_process_file_else_end10"
 5F70726F636573735F66696C655F656C73655F656E643900# "_process_file_else_end9"
 5F70726F636573735F66696C655F6C6F6F705F656E643400# "_process_file_loop_end4"
 5F70726F636573735F66696C655F6C6F6F70343100# "_process_file_loop41"
 5F70726F636573735F66696C655F616E645F656E64343200# "_process_file_and_end42"
 5F70726F636573735F66696C655F616E645F656E64343300# "_process_file_and_end43"
 5F70726F636573735F66696C655F616E645F656E64343400# "_process_file_and_end44"
 5F70726F636573735F66696C655F656C7365343500# "_process_file_else45"
 5F70726F636573735F66696C655F6C6F6F705F656E64343100# "_process_file_loop_end41"
 5F70726F636573735F66696C655F656C7365343600# "_process_file_else46"
 5F70726F636573735F66696C655F6C6F6F705F656E643200# "_process_file_loop_end2"
 665F6F75747075745F68657800  # "f_output_hex"
 5F6F75747075745F6865785F656C73653100# "_output_hex_else1"
 5F6F75747075745F6865785F656C73655F656E643100# "_output_hex_else_end1"
 665F6F75747075745F6865785F6279746500# "f_output_hex_byte"
 5F6F75747075745F6865785F627974655F656C73653100# "_output_hex_byte_else1"
 665F6F75747075745F6865785F656E645F6F665F6C696E6500# "f_output_hex_end_of_line"
 5F6F75747075745F6865785F656E645F6F665F6C696E655F6C6F6F703100# "_output_hex_end_of_line_loop1"
 5F6F75747075745F6865785F656E645F6F665F6C696E655F656C73653200# "_output_hex_end_of_line_else2"
 5F6F75747075745F6865785F656E645F6F665F6C696E655F6C6F6F705F656E643100# "_output_hex_end_of_line_loop_end1"
 5F6F75747075745F6865785F656E645F6F665F6C696E655F6C6F6F703300# "_output_hex_end_of_line_loop3"
 5F6F75747075745F6865785F656E645F6F665F6C696E655F616E645F656E643400# "_output_hex_end_of_line_and_end4"
 5F6F75747075745F6865785F656E645F6F665F6C696E655F616E645F656E643500# "_output_hex_end_of_line_and_end5"
 5F6F75747075745F6865785F656E645F6F665F6C696E655F656C73653600# "_output_hex_end_of_line_else6"
 5F6F75747075745F6865785F656E645F6F665F6C696E655F6C6F6F705F656E643300# "_output_hex_end_of_line_loop_end3"
 665F6F75747075745F6279746500# "f_output_byte"
 665F6D61696E00              # "f_main"
 5F6D61696E5F6C6F6F703100    # "_main_loop1"
 5F6D61696E5F656C73653200    # "_main_else2"
 5F6D61696E5F656C73653300    # "_main_else3"
 5F6D61696E5F656C73655F656E643300# "_main_else_end3"
 5F6D61696E5F6C6F6F705F656E643100# "_main_loop_end1"
 5F6D61696E5F656C73653500    # "_main_else5"
 5F6D61696E5F616E645F656E643600# "_main_and_end6"
 5F6D61696E5F656C73653400    # "_main_else4"
 5F6D61696E5F6C6F6F703700    # "_main_loop7"
 5F6D61696E5F656C73653800    # "_main_else8"
 5F6D61696E5F6C6F6F705F656E643700# "_main_loop_end7"
 5F6D61696E5F6C6F6F703900    # "_main_loop9"
 5F6D61696E5F656C7365313000  # "_main_else10"
 5F6D61696E5F656C7365313100  # "_main_else11"
 5F6D61696E5F656C73655F656E64313100# "_main_else_end11"
 5F6D61696E5F6C6F6F705F656E643900# "_main_loop_end9"
 5F6D61696E5F656C7365313200  # "_main_else12"
 665F5F5F696E69745F676C6F62616C735F5F00# "f___init_globals__"
 454C465F6461746100          # "ELF_data"
 5359535F4D414C4C4F4300      # "SYS_MALLOC"
 737472696E675F3000          # "string_0"
 737472696E675F3100          # "string_1"
 675F5F7379735F656E7600      # "g__sys_env"
 675F697000                  # "g_ip"
 675F6C6162656C7300          # "g_labels"
 675F636F6C00                # "g_col"
 675F666F757400              # "g_fout"
 7374617469635F305F6C696E6500# "static_0_line"
 454C465F656E6400            # "ELF_end"
                             # END Generated string table
                             
                             
                             # Generated symbol table
                             
                             # Required NULL symbol entry
00000000                     # st_name
00000000                     # st_value
00000000                     # st_size
00                           # st_info
00                           # st_other
0100                         # st_shndx
                             
01000000                     # st_name
54800408                     #st_value
00000000                     # st_size (unknown size)
02                           # st_info (FUNC)
00                           # st_other (default)
0100                         # st_shndx
                             
0A000000                     # st_name
54800408                     #st_value
00000000                     # st_size (unknown size)
02                           # st_info (FUNC)
02                           # st_other (hidden)
0100                         # st_shndx
                             
11000000                     # st_name
89800408                     #st_value
00000000                     # st_size (unknown size)
02                           # st_info (FUNC)
00                           # st_other (default)
0100                         # st_shndx
                             
1D000000                     # st_name
92800408                     #st_value
00000000                     # st_size (unknown size)
02                           # st_info (FUNC)
00                           # st_other (default)
0100                         # st_shndx
                             
870A0000                     # st_name
0BA10408                     #st_value
00000000                     # st_size (unknown size)
02                           # st_info (FUNC)
00                           # st_other (default)
0100                         # st_shndx
                             
35000000                     # st_name
B5800408                     #st_value
00000000                     # st_size (unknown size)
02                           # st_info (FUNC)
00                           # st_other (default)
0100                         # st_shndx
                             
3E000000                     # st_name
06810408                     #st_value
00000000                     # st_size (unknown size)
02                           # st_info (FUNC)
00                           # st_other (default)
0100                         # st_shndx
                             
47000000                     # st_name
21810408                     #st_value
00000000                     # st_size (unknown size)
02                           # st_info (FUNC)
02                           # st_other (hidden)
0100                         # st_shndx
                             
55000000                     # st_name
94810408                     #st_value
00000000                     # st_size (unknown size)
02                           # st_info (FUNC)
02                           # st_other (hidden)
0100                         # st_shndx
                             
65000000                     # st_name
AB810408                     #st_value
00000000                     # st_size (unknown size)
02                           # st_info (FUNC)
02                           # st_other (hidden)
0100                         # st_shndx
                             
73000000                     # st_name
F4810408                     #st_value
00000000                     # st_size (unknown size)
02                           # st_info (FUNC)
02                           # st_other (hidden)
0100                         # st_shndx
                             
85000000                     # st_name
0A820408                     #st_value
00000000                     # st_size (unknown size)
02                           # st_info (FUNC)
00                           # st_other (default)
0100                         # st_shndx
                             
8F000000                     # st_name
30820408                     #st_value
00000000                     # st_size (unknown size)
02                           # st_info (FUNC)
02                           # st_other (hidden)
0100                         # st_shndx
                             
9E000000                     # st_name
5E820408                     #st_value
00000000                     # st_size (unknown size)
02                           # st_info (FUNC)
02                           # st_other (hidden)
0100                         # st_shndx
                             
AD000000                     # st_name
D1820408                     #st_value
00000000                     # st_size (unknown size)
02                           # st_info (FUNC)
02                           # st_other (hidden)
0100                         # st_shndx
                             
BE000000                     # st_name
E8820408                     #st_value
00000000                     # st_size (unknown size)
02                           # st_info (FUNC)
02                           # st_other (hidden)
0100                         # st_shndx
                             
CD000000                     # st_name
53830408                     #st_value
00000000                     # st_size (unknown size)
02                           # st_info (FUNC)
02                           # st_other (hidden)
0100                         # st_shndx
                             
E0000000                     # st_name
69830408                     #st_value
00000000                     # st_size (unknown size)
02                           # st_info (FUNC)
00                           # st_other (default)
0100                         # st_shndx
                             
E9000000                     # st_name
8A830408                     #st_value
00000000                     # st_size (unknown size)
02                           # st_info (FUNC)
02                           # st_other (hidden)
0100                         # st_shndx
                             
F7000000                     # st_name
C0830408                     #st_value
00000000                     # st_size (unknown size)
02                           # st_info (FUNC)
02                           # st_other (hidden)
0100                         # st_shndx
                             
05010000                     # st_name
09840408                     #st_value
00000000                     # st_size (unknown size)
02                           # st_info (FUNC)
02                           # st_other (hidden)
0100                         # st_shndx
                             
17010000                     # st_name
22840408                     #st_value
00000000                     # st_size (unknown size)
02                           # st_info (FUNC)
00                           # st_other (default)
0100                         # st_shndx
                             
21010000                     # st_name
81840408                     #st_value
00000000                     # st_size (unknown size)
02                           # st_info (FUNC)
02                           # st_other (hidden)
0100                         # st_shndx
                             
30010000                     # st_name
B2840408                     #st_value
00000000                     # st_size (unknown size)
02                           # st_info (FUNC)
02                           # st_other (hidden)
0100                         # st_shndx
                             
3F010000                     # st_name
22850408                     #st_value
00000000                     # st_size (unknown size)
02                           # st_info (FUNC)
02                           # st_other (hidden)
0100                         # st_shndx
                             
4E010000                     # st_name
49850408                     #st_value
00000000                     # st_size (unknown size)
02                           # st_info (FUNC)
02                           # st_other (hidden)
0100                         # st_shndx
                             
61010000                     # st_name
54850408                     #st_value
00000000                     # st_size (unknown size)
02                           # st_info (FUNC)
00                           # st_other (default)
0100                         # st_shndx
                             
6A010000                     # st_name
AB850408                     #st_value
00000000                     # st_size (unknown size)
02                           # st_info (FUNC)
00                           # st_other (default)
0100                         # st_shndx
                             
73010000                     # st_name
E2850408                     #st_value
00000000                     # st_size (unknown size)
02                           # st_info (FUNC)
02                           # st_other (hidden)
0100                         # st_shndx
                             
81010000                     # st_name
1E860408                     #st_value
00000000                     # st_size (unknown size)
02                           # st_info (FUNC)
02                           # st_other (hidden)
0100                         # st_shndx
                             
8F010000                     # st_name
92860408                     #st_value
00000000                     # st_size (unknown size)
02                           # st_info (FUNC)
02                           # st_other (hidden)
0100                         # st_shndx
                             
9D010000                     # st_name
97860408                     #st_value
00000000                     # st_size (unknown size)
02                           # st_info (FUNC)
02                           # st_other (hidden)
0100                         # st_shndx
                             
AB010000                     # st_name
03870408                     #st_value
00000000                     # st_size (unknown size)
02                           # st_info (FUNC)
02                           # st_other (hidden)
0100                         # st_shndx
                             
B9010000                     # st_name
08870408                     #st_value
00000000                     # st_size (unknown size)
02                           # st_info (FUNC)
02                           # st_other (hidden)
0100                         # st_shndx
                             
CB010000                     # st_name
3D870408                     #st_value
00000000                     # st_size (unknown size)
02                           # st_info (FUNC)
00                           # st_other (default)
0100                         # st_shndx
                             
D4010000                     # st_name
92870408                     #st_value
00000000                     # st_size (unknown size)
02                           # st_info (FUNC)
02                           # st_other (hidden)
0100                         # st_shndx
                             
E5010000                     # st_name
BA870408                     #st_value
00000000                     # st_size (unknown size)
02                           # st_info (FUNC)
02                           # st_other (hidden)
0100                         # st_shndx
                             
F3010000                     # st_name
FF870408                     #st_value
00000000                     # st_size (unknown size)
02                           # st_info (FUNC)
02                           # st_other (hidden)
0100                         # st_shndx
                             
04020000                     # st_name
32880408                     #st_value
00000000                     # st_size (unknown size)
02                           # st_info (FUNC)
02                           # st_other (hidden)
0100                         # st_shndx
                             
12020000                     # st_name
48880408                     #st_value
00000000                     # st_size (unknown size)
02                           # st_info (FUNC)
00                           # st_other (default)
0100                         # st_shndx
                             
22020000                     # st_name
76880408                     #st_value
00000000                     # st_size (unknown size)
02                           # st_info (FUNC)
02                           # st_other (hidden)
0100                         # st_shndx
                             
37020000                     # st_name
A4880408                     #st_value
00000000                     # st_size (unknown size)
02                           # st_info (FUNC)
02                           # st_other (hidden)
0100                         # st_shndx
                             
4C020000                     # st_name
27890408                     #st_value
00000000                     # st_size (unknown size)
02                           # st_info (FUNC)
02                           # st_other (hidden)
0100                         # st_shndx
                             
64020000                     # st_name
46890408                     #st_value
00000000                     # st_size (unknown size)
02                           # st_info (FUNC)
02                           # st_other (hidden)
0100                         # st_shndx
                             
79020000                     # st_name
67890408                     #st_value
00000000                     # st_size (unknown size)
02                           # st_info (FUNC)
02                           # st_other (hidden)
0100                         # st_shndx
                             
92020000                     # st_name
7D890408                     #st_value
00000000                     # st_size (unknown size)
02                           # st_info (FUNC)
00                           # st_other (default)
0100                         # st_shndx
                             
A1020000                     # st_name
148A0408                     #st_value
00000000                     # st_size (unknown size)
02                           # st_info (FUNC)
02                           # st_other (hidden)
0100                         # st_shndx
                             
B5020000                     # st_name
258A0408                     #st_value
00000000                     # st_size (unknown size)
02                           # st_info (FUNC)
02                           # st_other (hidden)
0100                         # st_shndx
                             
C9020000                     # st_name
648A0408                     #st_value
00000000                     # st_size (unknown size)
02                           # st_info (FUNC)
02                           # st_other (hidden)
0100                         # st_shndx
                             
DD020000                     # st_name
A88A0408                     #st_value
00000000                     # st_size (unknown size)
02                           # st_info (FUNC)
02                           # st_other (hidden)
0100                         # st_shndx
                             
F1020000                     # st_name
F18A0408                     #st_value
00000000                     # st_size (unknown size)
02                           # st_info (FUNC)
02                           # st_other (hidden)
0100                         # st_shndx
                             
08030000                     # st_name
1A8B0408                     #st_value
00000000                     # st_size (unknown size)
02                           # st_info (FUNC)
02                           # st_other (hidden)
0100                         # st_shndx
                             
1F030000                     # st_name
438B0408                     #st_value
00000000                     # st_size (unknown size)
02                           # st_info (FUNC)
02                           # st_other (hidden)
0100                         # st_shndx
                             
36030000                     # st_name
598B0408                     #st_value
00000000                     # st_size (unknown size)
02                           # st_info (FUNC)
02                           # st_other (hidden)
0100                         # st_shndx
                             
4A030000                     # st_name
BA8B0408                     #st_value
00000000                     # st_size (unknown size)
02                           # st_info (FUNC)
02                           # st_other (hidden)
0100                         # st_shndx
                             
5E030000                     # st_name
2A8C0408                     #st_value
00000000                     # st_size (unknown size)
02                           # st_info (FUNC)
02                           # st_other (hidden)
0100                         # st_shndx
                             
73030000                     # st_name
608C0408                     #st_value
00000000                     # st_size (unknown size)
02                           # st_info (FUNC)
02                           # st_other (hidden)
0100                         # st_shndx
                             
88030000                     # st_name
A98C0408                     #st_value
00000000                     # st_size (unknown size)
02                           # st_info (FUNC)
02                           # st_other (hidden)
0100                         # st_shndx
                             
A1030000                     # st_name
D38C0408                     #st_value
00000000                     # st_size (unknown size)
02                           # st_info (FUNC)
02                           # st_other (hidden)
0100                         # st_shndx
                             
B9030000                     # st_name
BB8D0408                     #st_value
00000000                     # st_size (unknown size)
02                           # st_info (FUNC)
02                           # st_other (hidden)
0100                         # st_shndx
                             
CE030000                     # st_name
C08D0408                     #st_value
00000000                     # st_size (unknown size)
02                           # st_info (FUNC)
02                           # st_other (hidden)
0100                         # st_shndx
                             
E3030000                     # st_name
3A8E0408                     #st_value
00000000                     # st_size (unknown size)
02                           # st_info (FUNC)
02                           # st_other (hidden)
0100                         # st_shndx
                             
FB030000                     # st_name
FA8E0408                     #st_value
00000000                     # st_size (unknown size)
02                           # st_info (FUNC)
02                           # st_other (hidden)
0100                         # st_shndx
                             
10040000                     # st_name
488F0408                     #st_value
00000000                     # st_size (unknown size)
02                           # st_info (FUNC)
02                           # st_other (hidden)
0100                         # st_shndx
                             
25040000                     # st_name
918F0408                     #st_value
00000000                     # st_size (unknown size)
02                           # st_info (FUNC)
02                           # st_other (hidden)
0100                         # st_shndx
                             
3C040000                     # st_name
BA8F0408                     #st_value
00000000                     # st_size (unknown size)
02                           # st_info (FUNC)
02                           # st_other (hidden)
0100                         # st_shndx
                             
53040000                     # st_name
08900408                     #st_value
00000000                     # st_size (unknown size)
02                           # st_info (FUNC)
02                           # st_other (hidden)
0100                         # st_shndx
                             
68040000                     # st_name
69900408                     #st_value
00000000                     # st_size (unknown size)
02                           # st_info (FUNC)
02                           # st_other (hidden)
0100                         # st_shndx
                             
80040000                     # st_name
9E900408                     #st_value
00000000                     # st_size (unknown size)
02                           # st_info (FUNC)
02                           # st_other (hidden)
0100                         # st_shndx
                             
98040000                     # st_name
B4900408                     #st_value
00000000                     # st_size (unknown size)
02                           # st_info (FUNC)
02                           # st_other (hidden)
0100                         # st_shndx
                             
AD040000                     # st_name
DB900408                     #st_value
00000000                     # st_size (unknown size)
02                           # st_info (FUNC)
02                           # st_other (hidden)
0100                         # st_shndx
                             
C6040000                     # st_name
BF910408                     #st_value
00000000                     # st_size (unknown size)
02                           # st_info (FUNC)
02                           # st_other (hidden)
0100                         # st_shndx
                             
DB040000                     # st_name
20920408                     #st_value
00000000                     # st_size (unknown size)
02                           # st_info (FUNC)
02                           # st_other (hidden)
0100                         # st_shndx
                             
F3040000                     # st_name
36920408                     #st_value
00000000                     # st_size (unknown size)
02                           # st_info (FUNC)
02                           # st_other (hidden)
0100                         # st_shndx
                             
08050000                     # st_name
5D920408                     #st_value
00000000                     # st_size (unknown size)
02                           # st_info (FUNC)
02                           # st_other (hidden)
0100                         # st_shndx
                             
21050000                     # st_name
B5920408                     #st_value
00000000                     # st_size (unknown size)
02                           # st_info (FUNC)
02                           # st_other (hidden)
0100                         # st_shndx
                             
36050000                     # st_name
D0920408                     #st_value
00000000                     # st_size (unknown size)
02                           # st_info (FUNC)
02                           # st_other (hidden)
0100                         # st_shndx
                             
4F050000                     # st_name
D0920408                     #st_value
00000000                     # st_size (unknown size)
02                           # st_info (FUNC)
02                           # st_other (hidden)
0100                         # st_shndx
                             
64050000                     # st_name
0B930408                     #st_value
00000000                     # st_size (unknown size)
02                           # st_info (FUNC)
02                           # st_other (hidden)
0100                         # st_shndx
                             
79050000                     # st_name
11930408                     #st_value
00000000                     # st_size (unknown size)
02                           # st_info (FUNC)
02                           # st_other (hidden)
0100                         # st_shndx
                             
92050000                     # st_name
26930408                     #st_value
00000000                     # st_size (unknown size)
02                           # st_info (FUNC)
02                           # st_other (hidden)
0100                         # st_shndx
                             
A7050000                     # st_name
57930408                     #st_value
00000000                     # st_size (unknown size)
02                           # st_info (FUNC)
02                           # st_other (hidden)
0100                         # st_shndx
                             
BC050000                     # st_name
CD930408                     #st_value
00000000                     # st_size (unknown size)
02                           # st_info (FUNC)
02                           # st_other (hidden)
0100                         # st_shndx
                             
D1050000                     # st_name
FA930408                     #st_value
00000000                     # st_size (unknown size)
02                           # st_info (FUNC)
02                           # st_other (hidden)
0100                         # st_shndx
                             
EA050000                     # st_name
FF930408                     #st_value
00000000                     # st_size (unknown size)
02                           # st_info (FUNC)
02                           # st_other (hidden)
0100                         # st_shndx
                             
FF050000                     # st_name
4A940408                     #st_value
00000000                     # st_size (unknown size)
02                           # st_info (FUNC)
02                           # st_other (hidden)
0100                         # st_shndx
                             
14060000                     # st_name
93940408                     #st_value
00000000                     # st_size (unknown size)
02                           # st_info (FUNC)
02                           # st_other (hidden)
0100                         # st_shndx
                             
2C060000                     # st_name
A9940408                     #st_value
00000000                     # st_size (unknown size)
02                           # st_info (FUNC)
02                           # st_other (hidden)
0100                         # st_shndx
                             
41060000                     # st_name
FC940408                     #st_value
00000000                     # st_size (unknown size)
02                           # st_info (FUNC)
02                           # st_other (hidden)
0100                         # st_shndx
                             
56060000                     # st_name
55950408                     #st_value
00000000                     # st_size (unknown size)
02                           # st_info (FUNC)
02                           # st_other (hidden)
0100                         # st_shndx
                             
6F060000                     # st_name
A0950408                     #st_value
00000000                     # st_size (unknown size)
02                           # st_info (FUNC)
02                           # st_other (hidden)
0100                         # st_shndx
                             
84060000                     # st_name
E8950408                     #st_value
00000000                     # st_size (unknown size)
02                           # st_info (FUNC)
02                           # st_other (hidden)
0100                         # st_shndx
                             
99060000                     # st_name
1F960408                     #st_value
00000000                     # st_size (unknown size)
02                           # st_info (FUNC)
02                           # st_other (hidden)
0100                         # st_shndx
                             
AE060000                     # st_name
2A960408                     #st_value
00000000                     # st_size (unknown size)
02                           # st_info (FUNC)
02                           # st_other (hidden)
0100                         # st_shndx
                             
C7060000                     # st_name
2A960408                     #st_value
00000000                     # st_size (unknown size)
02                           # st_info (FUNC)
02                           # st_other (hidden)
0100                         # st_shndx
                             
E0060000                     # st_name
2A960408                     #st_value
00000000                     # st_size (unknown size)
02                           # st_info (FUNC)
02                           # st_other (hidden)
0100                         # st_shndx
                             
F9060000                     # st_name
2A960408                     #st_value
00000000                     # st_size (unknown size)
02                           # st_info (FUNC)
02                           # st_other (hidden)
0100                         # st_shndx
                             
12070000                     # st_name
2A960408                     #st_value
00000000                     # st_size (unknown size)
02                           # st_info (FUNC)
02                           # st_other (hidden)
0100                         # st_shndx
                             
2A070000                     # st_name
2F960408                     #st_value
00000000                     # st_size (unknown size)
02                           # st_info (FUNC)
02                           # st_other (hidden)
0100                         # st_shndx
                             
42070000                     # st_name
2F960408                     #st_value
00000000                     # st_size (unknown size)
02                           # st_info (FUNC)
02                           # st_other (hidden)
0100                         # st_shndx
                             
57070000                     # st_name
78960408                     #st_value
00000000                     # st_size (unknown size)
02                           # st_info (FUNC)
02                           # st_other (hidden)
0100                         # st_shndx
                             
6F070000                     # st_name
A1960408                     #st_value
00000000                     # st_size (unknown size)
02                           # st_info (FUNC)
02                           # st_other (hidden)
0100                         # st_shndx
                             
87070000                     # st_name
CA960408                     #st_value
00000000                     # st_size (unknown size)
02                           # st_info (FUNC)
02                           # st_other (hidden)
0100                         # st_shndx
                             
9F070000                     # st_name
E0960408                     #st_value
00000000                     # st_size (unknown size)
02                           # st_info (FUNC)
02                           # st_other (hidden)
0100                         # st_shndx
                             
B4070000                     # st_name
07970408                     #st_value
00000000                     # st_size (unknown size)
02                           # st_info (FUNC)
02                           # st_other (hidden)
0100                         # st_shndx
                             
CD070000                     # st_name
49970408                     #st_value
00000000                     # st_size (unknown size)
02                           # st_info (FUNC)
02                           # st_other (hidden)
0100                         # st_shndx
                             
E2070000                     # st_name
4E970408                     #st_value
00000000                     # st_size (unknown size)
02                           # st_info (FUNC)
02                           # st_other (hidden)
0100                         # st_shndx
                             
FA070000                     # st_name
89970408                     #st_value
00000000                     # st_size (unknown size)
02                           # st_info (FUNC)
00                           # st_other (default)
0100                         # st_shndx
                             
07080000                     # st_name
E5970408                     #st_value
00000000                     # st_size (unknown size)
02                           # st_info (FUNC)
02                           # st_other (hidden)
0100                         # st_shndx
                             
19080000                     # st_name
F6970408                     #st_value
00000000                     # st_size (unknown size)
02                           # st_info (FUNC)
02                           # st_other (hidden)
0100                         # st_shndx
                             
2F080000                     # st_name
22980408                     #st_value
00000000                     # st_size (unknown size)
02                           # st_info (FUNC)
00                           # st_other (default)
0100                         # st_shndx
                             
41080000                     # st_name
93980408                     #st_value
00000000                     # st_size (unknown size)
02                           # st_info (FUNC)
02                           # st_other (hidden)
0100                         # st_shndx
                             
58080000                     # st_name
23990408                     #st_value
00000000                     # st_size (unknown size)
02                           # st_info (FUNC)
00                           # st_other (default)
0100                         # st_shndx
                             
71080000                     # st_name
33990408                     #st_value
00000000                     # st_size (unknown size)
02                           # st_info (FUNC)
02                           # st_other (hidden)
0100                         # st_shndx
                             
8F080000                     # st_name
60990408                     #st_value
00000000                     # st_size (unknown size)
02                           # st_info (FUNC)
02                           # st_other (hidden)
0100                         # st_shndx
                             
AD080000                     # st_name
A9990408                     #st_value
00000000                     # st_size (unknown size)
02                           # st_info (FUNC)
02                           # st_other (hidden)
0100                         # st_shndx
                             
CF080000                     # st_name
A9990408                     #st_value
00000000                     # st_size (unknown size)
02                           # st_info (FUNC)
02                           # st_other (hidden)
0100                         # st_shndx
                             
ED080000                     # st_name
F2990408                     #st_value
00000000                     # st_size (unknown size)
02                           # st_info (FUNC)
02                           # st_other (hidden)
0100                         # st_shndx
                             
0E090000                     # st_name
1B9A0408                     #st_value
00000000                     # st_size (unknown size)
02                           # st_info (FUNC)
02                           # st_other (hidden)
0100                         # st_shndx
                             
2F090000                     # st_name
319A0408                     #st_value
00000000                     # st_size (unknown size)
02                           # st_info (FUNC)
02                           # st_other (hidden)
0100                         # st_shndx
                             
4D090000                     # st_name
7C9A0408                     #st_value
00000000                     # st_size (unknown size)
02                           # st_info (FUNC)
02                           # st_other (hidden)
0100                         # st_shndx
                             
6F090000                     # st_name
BA9A0408                     #st_value
00000000                     # st_size (unknown size)
02                           # st_info (FUNC)
00                           # st_other (default)
0100                         # st_shndx
                             
7D090000                     # st_name
139B0408                     #st_value
00000000                     # st_size (unknown size)
02                           # st_info (FUNC)
00                           # st_other (default)
0100                         # st_shndx
                             
84090000                     # st_name
C79B0408                     #st_value
00000000                     # st_size (unknown size)
02                           # st_info (FUNC)
02                           # st_other (hidden)
0100                         # st_shndx
                             
90090000                     # st_name
F89B0408                     #st_value
00000000                     # st_size (unknown size)
02                           # st_info (FUNC)
02                           # st_other (hidden)
0100                         # st_shndx
                             
9C090000                     # st_name
9C9C0408                     #st_value
00000000                     # st_size (unknown size)
02                           # st_info (FUNC)
02                           # st_other (hidden)
0100                         # st_shndx
                             
A8090000                     # st_name
F49C0408                     #st_value
00000000                     # st_size (unknown size)
02                           # st_info (FUNC)
02                           # st_other (hidden)
0100                         # st_shndx
                             
B8090000                     # st_name
1B9D0408                     #st_value
00000000                     # st_size (unknown size)
02                           # st_info (FUNC)
02                           # st_other (hidden)
0100                         # st_shndx
                             
C8090000                     # st_name
A09D0408                     #st_value
00000000                     # st_size (unknown size)
02                           # st_info (FUNC)
02                           # st_other (hidden)
0100                         # st_shndx
                             
D4090000                     # st_name
399E0408                     #st_value
00000000                     # st_size (unknown size)
02                           # st_info (FUNC)
02                           # st_other (hidden)
0100                         # st_shndx
                             
E3090000                     # st_name
3D9E0408                     #st_value
00000000                     # st_size (unknown size)
02                           # st_info (FUNC)
02                           # st_other (hidden)
0100                         # st_shndx
                             
EF090000                     # st_name
5E9E0408                     #st_value
00000000                     # st_size (unknown size)
02                           # st_info (FUNC)
02                           # st_other (hidden)
0100                         # st_shndx
                             
FB090000                     # st_name
8F9E0408                     #st_value
00000000                     # st_size (unknown size)
02                           # st_info (FUNC)
02                           # st_other (hidden)
0100                         # st_shndx
                             
070A0000                     # st_name
FB9E0408                     #st_value
00000000                     # st_size (unknown size)
02                           # st_info (FUNC)
02                           # st_other (hidden)
0100                         # st_shndx
                             
170A0000                     # st_name
1C9F0408                     #st_value
00000000                     # st_size (unknown size)
02                           # st_info (FUNC)
02                           # st_other (hidden)
0100                         # st_shndx
                             
230A0000                     # st_name
4D9F0408                     #st_value
00000000                     # st_size (unknown size)
02                           # st_info (FUNC)
02                           # st_other (hidden)
0100                         # st_shndx
                             
300A0000                     # st_name
A99F0408                     #st_value
00000000                     # st_size (unknown size)
02                           # st_info (FUNC)
02                           # st_other (hidden)
0100                         # st_shndx
                             
3D0A0000                     # st_name
EE9F0408                     #st_value
00000000                     # st_size (unknown size)
02                           # st_info (FUNC)
02                           # st_other (hidden)
0100                         # st_shndx
                             
4E0A0000                     # st_name
15A00408                     #st_value
00000000                     # st_size (unknown size)
02                           # st_info (FUNC)
02                           # st_other (hidden)
0100                         # st_shndx
                             
5E0A0000                     # st_name
95A00408                     #st_value
00000000                     # st_size (unknown size)
02                           # st_info (FUNC)
02                           # st_other (hidden)
0100                         # st_shndx
                             
6B0A0000                     # st_name
ABA00408                     #st_value
00000000                     # st_size (unknown size)
02                           # st_info (FUNC)
00                           # st_other (default)
0100                         # st_shndx
                             
7E0A0000                     # st_name
0BA10408                     #st_value
00000000                     # st_size (unknown size)
02                           # st_info (FUNC)
00                           # st_other (default)
0100                         # st_shndx
                             
870A0000                     # st_name
0BA10408                     #st_value
00000000                     # st_size (unknown size)
02                           # st_info (FUNC)
00                           # st_other (default)
0100                         # st_shndx
                             
920A0000                     # st_name
0FA10408                     #st_value
00000000                     # st_size (unknown size)
02                           # st_info (FUNC)
00                           # st_other (default)
0100                         # st_shndx
                             
9B0A0000                     # st_name
12A10408                     #st_value
00000000                     # st_size (unknown size)
02                           # st_info (FUNC)
00                           # st_other (default)
0100                         # st_shndx
                             
A40A0000                     # st_name
18A10408                     #st_value
00000000                     # st_size (unknown size)
02                           # st_info (FUNC)
00                           # st_other (default)
0100                         # st_shndx
                             
AF0A0000                     # st_name
1CA10408                     #st_value
00000000                     # st_size (unknown size)
02                           # st_info (FUNC)
00                           # st_other (default)
0100                         # st_shndx
                             
B40A0000                     # st_name
20A10408                     #st_value
00000000                     # st_size (unknown size)
02                           # st_info (FUNC)
00                           # st_other (default)
0100                         # st_shndx
                             
BD0A0000                     # st_name
24A10408                     #st_value
00000000                     # st_size (unknown size)
02                           # st_info (FUNC)
00                           # st_other (default)
0100                         # st_shndx
                             
C30A0000                     # st_name
28A10408                     #st_value
00000000                     # st_size (unknown size)
02                           # st_info (FUNC)
00                           # st_other (default)
0100                         # st_shndx
                             
CA0A0000                     # st_name
2CA10408                     #st_value
00000000                     # st_size (unknown size)
02                           # st_info (FUNC)
00                           # st_other (default)
0100                         # st_shndx
                             
D80A0000                     # st_name
6DBA0408                     #st_value
00000000                     # st_size (unknown size)
02                           # st_info (FUNC)
00                           # st_other (default)
0100                         # st_shndx
                             
                             # END Generated symbol table
                             
                             

File /x86/ELF-x86-debug.hex2

Source file is 'M2libc/x86/ELF-x86-debug.hex2'.
URL: https://github.com/oriansj/M2libc/blob/a5df7b9a6b756f0fe986e4c36b575acd4de193f3/x86/ELF-x86-debug.hex2
### Copyright (C) 2016 Jeremiah Orians
### Copyright (C) 2017 Jan Nieuwenhuizen <janneke@gnu.org>
### This file is part of M2-Planet.
###
### M2-Planet is free software: you can redistribute it and/or modify
### it under the terms of the GNU General Public License as published by
### the Free Software Foundation, either version 3 of the License, or
### (at your option) any later version.
###
### M2-Planet is distributed in the hope that it will be useful,
### but WITHOUT ANY WARRANTY; without even the implied warranty of
### MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
### GNU General Public License for more details.
###
### You should have received a copy of the GNU General Public License
### along with M2-Planet.  If not, see <http://www.gnu.org/licenses/>.

### stage0's hex2 format
###    !<label>          1 byte relative
###    $<label>          2 byte address
###    @<label>          2 byte relative
###    &<label>          4 byte address
###    %<label>          4 byte relative

### if you wish to use this header, you need to add :ELF_end to the end of your
### M1 or hex2 files.

## ELF Header

:ELF_base
7F 45 4C 46                    # e_ident[EI_MAG0-3] ELF's magic number

01                             # e_ident[EI_CLASS] Indicating 32 bit
01                             # e_ident[EI_DATA] Indicating little endianness
01                             # e_ident[EI_VERSION] Indicating original elf

03                             # e_ident[EI_OSABI] Set at 3 because FreeBSD is strict
00                             # e_ident[EI_ABIVERSION] See above

00 00 00 00 00 00 00           # e_ident[EI_PAD]

02 00                          # e_type Indicating Executable
03 00                          # e_machine Indicating 386
01 00 00 00                    # e_version Indicating original elf

&_start                        # e_entry Address of the entry point
%ELF_program_headers>ELF_base  # e_phoff Address of program header table
%ELF_section_headers>ELF_base  # e_shoff Address of section header table

00 00 00 00                    # e_flags

34 00                          # e_ehsize Indicating our 52 Byte header

20 00                          # e_phentsize size of a program header table
01 00                          # e_phnum number of entries in program table

28 00                          # e_shentsize size of a section header table
05 00                          # e_shnum number of entries in section table

02 00                          # e_shstrndx index of the section names


:ELF_program_headers
:ELF_program_header__text
01 00 00 00                    # ph_type: PT-LOAD = 1
00 00 00 00                    # ph_offset
&ELF_base                      # ph_vaddr
&ELF_base                      # ph_physaddr
%ELF_end>ELF_base              # ph_filesz
%ELF_end>ELF_base              # ph_memsz
07 00 00 00                    # ph_flags: PF-X|PF-W|PF-R = 7
01 00 00 00                    # ph_alignment

:ELF_text

File /x86/blood-elf_s.macro

Source file is 'src/blood-elf_s.macro'.
No URL
 #
:ELF_text #:ELF_text
 #
:_start #:_start
B8 2D000000                                 #    mov_eax, %45                                # the Syscall # for SYS_BRK
BB 00000000                                  #    mov_ebx, %0                                 # Get current brk
CD80                                       #    int_80                                      # Let the kernel do the work
A3 &SYS_MALLOC                  #    mov_[DWORD],eax &SYS_MALLOC                 # Set our malloc pointer
 #
 #    # allocate memory for the second stack
B8 A0860100 #    mov_eax, %100000
50                                     #    push_eax                                    # (sys_malloc assums address)
E8 %f_sys_malloc #    call %f_sys_malloc
89C5 #    mov_ebp,eax
 #    
 #    # setup argc and argv for the main function
89C2 #    mov_edx,eax
58 #    pop_eax
89E3 #    mov_ebx,esp
50 #    push_eax
53 #    push_ebx
89D0 #    mov_eax,edx
 #
 #    #call main
E8 %f_main #    call %f_main
 #    
 #    # program completed Successfully
89C3                                  #    mov_ebx,eax                                 # All is well
B8 01000000                                  #    mov_eax, %1                                 # put the exit syscall number in eax
CD80                                       #    int_80                                      # Call it a good day
 #
 ## These sys_ function follow the same calling conventions
 ## as all the other functions. To access the arguments on the stack
 ## the return address is stored in the edi address (which is only possible
 ## because these functions do not call other function) and the function
 ## address (which is stored in the eax register, the top of the stack)
 ## needs to be popped as well.
 #
:f_sys_int80 #:f_sys_int80
5F                #    pop_edi               # Save return address from the stack
5A                #    pop_edx               # Get the arguments from the stack
59 #    pop_ecx
5B #    pop_ebx
58 #    pop_eax
CD80                 #    int_80                # call the Kernel
57               #    push_edi              # restore return address to the stack
C3 #    ret
 #
:f_sys_malloc #:f_sys_malloc
5F #    pop_edi
58 #    pop_eax
8B1D &SYS_MALLOC                  #    mov_ebx,[DWORD] &SYS_MALLOC                 # Using the current pointer
01C3                                  #    add_ebx,eax                                 # Request the number of desired bytes
B8 2D000000                                 #    mov_eax, %45                                # the Syscall # for SYS_BRK
CD80                                       #    int_80                                      # call the Kernel
8B05 &SYS_MALLOC                  #    mov_eax,[DWORD] &SYS_MALLOC                 # Return pointer
891D &SYS_MALLOC                  #    mov_[DWORD],ebx &SYS_MALLOC                 # Update pointer
57 #    push_edi
C3 #    ret
:SYS_MALLOC #:SYS_MALLOC
00000000 #    NULL
 #
 #    
 #
:f_exit #:f_exit
58 #    pop_eax
894500 #    mov_[ebp],eax
58 #    pop_eax
50               #  push_eax              # result (local)
8D85 04000000 # lea_eax,[ebp+DWORD] %4
5B                # pop_ebx               # =:
8918 #  mov_[eax],ebx
58 #    pop_eax
 ## stdlib.c 8
50               #  push_eax              # 1
B8 01000000 #   mov_eax, %1
50               #  push_eax              # result (local)
8D85 04000000 # lea_eax,[ebp+DWORD] %4
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # 0
B8 00000000 #   mov_eax, %0
50               #  push_eax              # 0
B8 00000000 #   mov_eax, %0
50               #  push_eax              # sys_int80 (function)
B8 &f_sys_int80 #   mov_eax, &f_sys_int80
81C5 08000000          #    add_ebp, %8         # ()
FFD0 #  call_eax
81ED 08000000 # sub_ebp, %8
58                # pop_eax               # ;
50               #  push_eax              # 0
B8 00000000 #   mov_eax, %0
8B5D00          #   mov_ebx,[ebp]         # return
53 #    push_ebx
C3 #    ret
 #
:f_memcpy #:f_memcpy
58 #    pop_eax
894500 #    mov_[ebp],eax
58 #    pop_eax
50               #  push_eax              # n (local)
8D85 04000000 # lea_eax,[ebp+DWORD] %4
5B                # pop_ebx               # =:
8918 #  mov_[eax],ebx
58 #    pop_eax
50               #  push_eax              # src (local)
8D85 08000000 # lea_eax,[ebp+DWORD] %8
5B                # pop_ebx               # =:
8918 #  mov_[eax],ebx
58 #    pop_eax
50               #  push_eax              # dest (local)
8D85 0C000000 # lea_eax,[ebp+DWORD] %12
5B                # pop_ebx               # =:
8918 #  mov_[eax],ebx
58 #    pop_eax
50               #  push_eax              # d (local)
8D85 10000000 # lea_eax,[ebp+DWORD] %16
50               #  push_eax              # dest (local)
8D85 0C000000 # lea_eax,[ebp+DWORD] %12
8B00          # mov_eax,[eax]         # ?
5B                # pop_ebx               # =
8903 #  mov_[ebx],eax
58                # pop_eax               # ;
50               #  push_eax              # s (local)
8D85 14000000 # lea_eax,[ebp+DWORD] %20
50               #  push_eax              # src (local)
8D85 08000000 # lea_eax,[ebp+DWORD] %8
8B00          # mov_eax,[eax]         # ?
5B                # pop_ebx               # =
8903 #  mov_[ebx],eax
58                # pop_eax               # ;
 ## stdlib.c 34
50               #  push_eax              # i (local)
8D85 18000000 # lea_eax,[ebp+DWORD] %24
50               #  push_eax              # 0
B8 00000000 #   mov_eax, %0
5B                # pop_ebx               # =
8903 #  mov_[ebx],eax
58                # pop_eax               # ;
:_memcpy_loop1 #:_memcpy_loop1
50               #  push_eax              # i (local)
8D85 18000000 # lea_eax,[ebp+DWORD] %24
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # n (local)
8D85 04000000 # lea_eax,[ebp+DWORD] %4
8B00          # mov_eax,[eax]         # ?
5B                # pop_ebx               # <s
39C3 #  cmp_eax_ebx
0F9CC0 #    setl_al
0FB6C0 #    movzx_eax,al
85C0           #    test_eax,eax          # !
0F94C0 #    sete_al
0FB6C0 #    movzx_eax,al
85C0           #    test_eax,eax          # if
58 #    pop_eax
0F84 %_memcpy_else2 #   je %_memcpy_else2
E9 %_memcpy_loop_end1 # jmp %_memcpy_loop_end1
 ## stdlib.c 35
:_memcpy_else2  #:_memcpy_else2 # no else
50               #  push_eax              # d (local)
8D85 10000000 # lea_eax,[ebp+DWORD] %16
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # i (local)
8D85 18000000 # lea_eax,[ebp+DWORD] %24
8B00          # mov_eax,[eax]         # ?
5B                # pop_ebx               # +
01D8 #  add_eax,ebx
50               #  push_eax              # s (local)
8D85 14000000 # lea_eax,[ebp+DWORD] %20
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # i (local)
8D85 18000000 # lea_eax,[ebp+DWORD] %24
8B00          # mov_eax,[eax]         # ?
5B                # pop_ebx               # +
01D8 #  add_eax,ebx
8A00           #    mov_al,[eax]          # ?1
0FB6C0 #    movzx_eax,al
0FBEC0           #  movsx_eax,al          # char
5B                # pop_ebx               # =1
8803 #  mov_[ebx],al
58                # pop_eax               # ;
50               #  push_eax              # i (local)
8D85 18000000 # lea_eax,[ebp+DWORD] %24
50               #  push_eax              # $ (dup)
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # 1
B8 01000000 #   mov_eax, %1
5B                # pop_ebx               # +
01D8 #  add_eax,ebx
5B                # pop_ebx               # =
8903 #  mov_[ebx],eax
50               #  push_eax              # 1
B8 01000000 #   mov_eax, %1
5B                # pop_ebx               # -
29C3 #  sub_ebx,eax
89D8 #  mov_eax,ebx
58                # pop_eax               # ;
E9 %_memcpy_loop1 # jmp %_memcpy_loop1
:_memcpy_loop_end1 #:_memcpy_loop_end1
 ## stdlib.c 36
50               #  push_eax              # dest (local)
8D85 0C000000 # lea_eax,[ebp+DWORD] %12
8B00          # mov_eax,[eax]         # ?
8B5D00          #   mov_ebx,[ebp]         # return
53 #    push_ebx
C3 #    ret
50               #  push_eax              # 0
B8 00000000 #   mov_eax, %0
8B5D00          #   mov_ebx,[ebp]         # return
53 #    push_ebx
C3 #    ret
 #
:f_memmove #:f_memmove
58 #    pop_eax
894500 #    mov_[ebp],eax
58 #    pop_eax
50               #  push_eax              # n (local)
8D85 04000000 # lea_eax,[ebp+DWORD] %4
5B                # pop_ebx               # =:
8918 #  mov_[eax],ebx
58 #    pop_eax
50               #  push_eax              # src (local)
8D85 08000000 # lea_eax,[ebp+DWORD] %8
5B                # pop_ebx               # =:
8918 #  mov_[eax],ebx
58 #    pop_eax
50               #  push_eax              # dest (local)
8D85 0C000000 # lea_eax,[ebp+DWORD] %12
5B                # pop_ebx               # =:
8918 #  mov_[eax],ebx
58 #    pop_eax
50               #  push_eax              # d (local)
8D85 10000000 # lea_eax,[ebp+DWORD] %16
50               #  push_eax              # dest (local)
8D85 0C000000 # lea_eax,[ebp+DWORD] %12
8B00          # mov_eax,[eax]         # ?
5B                # pop_ebx               # =
8903 #  mov_[ebx],eax
58                # pop_eax               # ;
50               #  push_eax              # s (local)
8D85 14000000 # lea_eax,[ebp+DWORD] %20
50               #  push_eax              # src (local)
8D85 08000000 # lea_eax,[ebp+DWORD] %8
8B00          # mov_eax,[eax]         # ?
5B                # pop_ebx               # =
8903 #  mov_[ebx],eax
58                # pop_eax               # ;
 ## stdlib.c 43
50               #  push_eax              # 1
B8 01000000 #   mov_eax, %1
85C0           #    test_eax,eax          # if
58 #    pop_eax
0F84 %_memmove_else1 #  je %_memmove_else1
 ## stdlib.c 44
 ## stdlib.c 45
50               #  push_eax              # i (local)
8D85 18000000 # lea_eax,[ebp+DWORD] %24
50               #  push_eax              # 0
B8 00000000 #   mov_eax, %0
5B                # pop_ebx               # =
8903 #  mov_[ebx],eax
58                # pop_eax               # ;
:_memmove_loop2 #:_memmove_loop2
50               #  push_eax              # i (local)
8D85 18000000 # lea_eax,[ebp+DWORD] %24
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # n (local)
8D85 04000000 # lea_eax,[ebp+DWORD] %4
8B00          # mov_eax,[eax]         # ?
5B                # pop_ebx               # <
39C3 #  cmp_eax_ebx
0F92C0 #    setb_al
0FB6C0 #    movzx_eax,al
85C0           #    test_eax,eax          # !
0F94C0 #    sete_al
0FB6C0 #    movzx_eax,al
85C0           #    test_eax,eax          # if
58 #    pop_eax
0F84 %_memmove_else3 #  je %_memmove_else3
E9 %_memmove_loop_end2 #    jmp %_memmove_loop_end2
 ## stdlib.c 46
:_memmove_else3  #:_memmove_else3 # no else
50               #  push_eax              # d (local)
8D85 10000000 # lea_eax,[ebp+DWORD] %16
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # i (local)
8D85 18000000 # lea_eax,[ebp+DWORD] %24
8B00          # mov_eax,[eax]         # ?
5B                # pop_ebx               # +
01D8 #  add_eax,ebx
50               #  push_eax              # s (local)
8D85 14000000 # lea_eax,[ebp+DWORD] %20
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # i (local)
8D85 18000000 # lea_eax,[ebp+DWORD] %24
8B00          # mov_eax,[eax]         # ?
5B                # pop_ebx               # +
01D8 #  add_eax,ebx
8A00           #    mov_al,[eax]          # ?1
0FB6C0 #    movzx_eax,al
0FBEC0           #  movsx_eax,al          # char
5B                # pop_ebx               # =1
8803 #  mov_[ebx],al
58                # pop_eax               # ;
50               #  push_eax              # i (local)
8D85 18000000 # lea_eax,[ebp+DWORD] %24
50               #  push_eax              # $ (dup)
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # 1
B8 01000000 #   mov_eax, %1
5B                # pop_ebx               # +
01D8 #  add_eax,ebx
5B                # pop_ebx               # =
8903 #  mov_[ebx],eax
50               #  push_eax              # 1
B8 01000000 #   mov_eax, %1
5B                # pop_ebx               # -
29C3 #  sub_ebx,eax
89D8 #  mov_eax,ebx
58                # pop_eax               # ;
E9 %_memmove_loop2 #    jmp %_memmove_loop2
:_memmove_loop_end2 #:_memmove_loop_end2
E9 %_memmove_else_end1 #    jmp %_memmove_else_end1
:_memmove_else1 #:_memmove_else1
 ## stdlib.c 48
50               #  push_eax              # src (local)
8D85 08000000 # lea_eax,[ebp+DWORD] %8
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # dest (local)
8D85 0C000000 # lea_eax,[ebp+DWORD] %12
8B00          # mov_eax,[eax]         # ?
5B                # pop_ebx               # <
39C3 #  cmp_eax_ebx
0F92C0 #    setb_al
0FB6C0 #    movzx_eax,al
85C0           #    test_eax,eax          # if
58 #    pop_eax
0F84 %_memmove_else4 #  je %_memmove_else4
 ## stdlib.c 49
50               #  push_eax              # j (local)
8D85 18000000 # lea_eax,[ebp+DWORD] %24
50               #  push_eax              # n (local)
8D85 04000000 # lea_eax,[ebp+DWORD] %4
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # 1
B8 01000000 #   mov_eax, %1
5B                # pop_ebx               # -
29C3 #  sub_ebx,eax
89D8 #  mov_eax,ebx
5B                # pop_ebx               # =
8903 #  mov_[ebx],eax
58                # pop_eax               # ;
 ## stdlib.c 51
50               #  push_eax              # i (local)
8D85 1C000000 # lea_eax,[ebp+DWORD] %28
50               #  push_eax              # 0
B8 00000000 #   mov_eax, %0
5B                # pop_ebx               # =
8903 #  mov_[ebx],eax
58                # pop_eax               # ;
:_memmove_loop5 #:_memmove_loop5
50               #  push_eax              # i (local)
8D85 1C000000 # lea_eax,[ebp+DWORD] %28
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # n (local)
8D85 04000000 # lea_eax,[ebp+DWORD] %4
8B00          # mov_eax,[eax]         # ?
5B                # pop_ebx               # <
39C3 #  cmp_eax_ebx
0F92C0 #    setb_al
0FB6C0 #    movzx_eax,al
85C0           #    test_eax,eax          # !
0F94C0 #    sete_al
0FB6C0 #    movzx_eax,al
85C0           #    test_eax,eax          # if
58 #    pop_eax
0F84 %_memmove_else6 #  je %_memmove_else6
E9 %_memmove_loop_end5 #    jmp %_memmove_loop_end5
 ## stdlib.c 52
:_memmove_else6  #:_memmove_else6 # no else
50               #  push_eax              # d (local)
8D85 10000000 # lea_eax,[ebp+DWORD] %16
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # j (local)
8D85 18000000 # lea_eax,[ebp+DWORD] %24
8B00          # mov_eax,[eax]         # ?
5B                # pop_ebx               # +
01D8 #  add_eax,ebx
50               #  push_eax              # s (local)
8D85 14000000 # lea_eax,[ebp+DWORD] %20
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # j (local)
8D85 18000000 # lea_eax,[ebp+DWORD] %24
8B00          # mov_eax,[eax]         # ?
5B                # pop_ebx               # +
01D8 #  add_eax,ebx
8A00           #    mov_al,[eax]          # ?1
0FB6C0 #    movzx_eax,al
0FBEC0           #  movsx_eax,al          # char
5B                # pop_ebx               # =1
8803 #  mov_[ebx],al
58                # pop_eax               # ;
50               #  push_eax              # i (local)
8D85 1C000000 # lea_eax,[ebp+DWORD] %28
50               #  push_eax              # $ (dup)
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # 1
B8 01000000 #   mov_eax, %1
5B                # pop_ebx               # +
01D8 #  add_eax,ebx
5B                # pop_ebx               # =
8903 #  mov_[ebx],eax
50               #  push_eax              # 1
B8 01000000 #   mov_eax, %1
5B                # pop_ebx               # -
29C3 #  sub_ebx,eax
89D8 #  mov_eax,ebx
58                # pop_eax               # ;
50               #  push_eax              # j (local)
8D85 18000000 # lea_eax,[ebp+DWORD] %24
50               #  push_eax              # $ (dup)
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # 1
B8 01000000 #   mov_eax, %1
5B                # pop_ebx               # -
29C3 #  sub_ebx,eax
89D8 #  mov_eax,ebx
5B                # pop_ebx               # =
8903 #  mov_[ebx],eax
50               #  push_eax              # 1
B8 01000000 #   mov_eax, %1
5B                # pop_ebx               # +
01D8 #  add_eax,ebx
58                # pop_eax               # ;
E9 %_memmove_loop5 #    jmp %_memmove_loop5
:_memmove_loop_end5 #:_memmove_loop_end5
:_memmove_else4  #:_memmove_else4 # no else
:_memmove_else_end1 #:_memmove_else_end1
 ## stdlib.c 54
50               #  push_eax              # dest (local)
8D85 0C000000 # lea_eax,[ebp+DWORD] %12
8B00          # mov_eax,[eax]         # ?
8B5D00          #   mov_ebx,[ebp]         # return
53 #    push_ebx
C3 #    ret
50               #  push_eax              # 0
B8 00000000 #   mov_eax, %0
8B5D00          #   mov_ebx,[ebp]         # return
53 #    push_ebx
C3 #    ret
 #
:f_memset #:f_memset
58 #    pop_eax
894500 #    mov_[ebp],eax
58 #    pop_eax
50               #  push_eax              # n (local)
8D85 04000000 # lea_eax,[ebp+DWORD] %4
5B                # pop_ebx               # =:
8918 #  mov_[eax],ebx
58 #    pop_eax
50               #  push_eax              # c (local)
8D85 08000000 # lea_eax,[ebp+DWORD] %8
5B                # pop_ebx               # =:
8918 #  mov_[eax],ebx
58 #    pop_eax
50               #  push_eax              # s (local)
8D85 0C000000 # lea_eax,[ebp+DWORD] %12
5B                # pop_ebx               # =:
8918 #  mov_[eax],ebx
58 #    pop_eax
50               #  push_eax              # p (local)
8D85 10000000 # lea_eax,[ebp+DWORD] %16
50               #  push_eax              # s (local)
8D85 0C000000 # lea_eax,[ebp+DWORD] %12
8B00          # mov_eax,[eax]         # ?
5B                # pop_ebx               # =
8903 #  mov_[ebx],eax
58                # pop_eax               # ;
 ## stdlib.c 60
50               #  push_eax              # i (local)
8D85 14000000 # lea_eax,[ebp+DWORD] %20
50               #  push_eax              # 0
B8 00000000 #   mov_eax, %0
5B                # pop_ebx               # =
8903 #  mov_[ebx],eax
58                # pop_eax               # ;
:_memset_loop1 #:_memset_loop1
50               #  push_eax              # i (local)
8D85 14000000 # lea_eax,[ebp+DWORD] %20
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # n (local)
8D85 04000000 # lea_eax,[ebp+DWORD] %4
8B00          # mov_eax,[eax]         # ?
5B                # pop_ebx               # <
39C3 #  cmp_eax_ebx
0F92C0 #    setb_al
0FB6C0 #    movzx_eax,al
85C0           #    test_eax,eax          # !
0F94C0 #    sete_al
0FB6C0 #    movzx_eax,al
85C0           #    test_eax,eax          # if
58 #    pop_eax
0F84 %_memset_else2 #   je %_memset_else2
E9 %_memset_loop_end1 # jmp %_memset_loop_end1
 ## stdlib.c 61
:_memset_else2  #:_memset_else2 # no else
50               #  push_eax              # p (local)
8D85 10000000 # lea_eax,[ebp+DWORD] %16
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # i (local)
8D85 14000000 # lea_eax,[ebp+DWORD] %20
8B00          # mov_eax,[eax]         # ?
5B                # pop_ebx               # +
01D8 #  add_eax,ebx
50               #  push_eax              # c (local)
8D85 08000000 # lea_eax,[ebp+DWORD] %8
8B00          # mov_eax,[eax]         # ?
5B                # pop_ebx               # =1
8803 #  mov_[ebx],al
58                # pop_eax               # ;
50               #  push_eax              # i (local)
8D85 14000000 # lea_eax,[ebp+DWORD] %20
50               #  push_eax              # $ (dup)
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # 1
B8 01000000 #   mov_eax, %1
5B                # pop_ebx               # +
01D8 #  add_eax,ebx
5B                # pop_ebx               # =
8903 #  mov_[ebx],eax
50               #  push_eax              # 1
B8 01000000 #   mov_eax, %1
5B                # pop_ebx               # -
29C3 #  sub_ebx,eax
89D8 #  mov_eax,ebx
58                # pop_eax               # ;
E9 %_memset_loop1 # jmp %_memset_loop1
:_memset_loop_end1 #:_memset_loop_end1
 ## stdlib.c 62
50               #  push_eax              # s (local)
8D85 0C000000 # lea_eax,[ebp+DWORD] %12
8B00          # mov_eax,[eax]         # ?
8B5D00          #   mov_ebx,[ebp]         # return
53 #    push_ebx
C3 #    ret
50               #  push_eax              # 0
B8 00000000 #   mov_eax, %0
8B5D00          #   mov_ebx,[ebp]         # return
53 #    push_ebx
C3 #    ret
 #
:f_memcmp #:f_memcmp
58 #    pop_eax
894500 #    mov_[ebp],eax
58 #    pop_eax
50               #  push_eax              # n (local)
8D85 04000000 # lea_eax,[ebp+DWORD] %4
5B                # pop_ebx               # =:
8918 #  mov_[eax],ebx
58 #    pop_eax
50               #  push_eax              # s2 (local)
8D85 08000000 # lea_eax,[ebp+DWORD] %8
5B                # pop_ebx               # =:
8918 #  mov_[eax],ebx
58 #    pop_eax
50               #  push_eax              # s1 (local)
8D85 0C000000 # lea_eax,[ebp+DWORD] %12
5B                # pop_ebx               # =:
8918 #  mov_[eax],ebx
58 #    pop_eax
50               #  push_eax              # p1 (local)
8D85 10000000 # lea_eax,[ebp+DWORD] %16
50               #  push_eax              # s1 (local)
8D85 0C000000 # lea_eax,[ebp+DWORD] %12
8B00          # mov_eax,[eax]         # ?
5B                # pop_ebx               # =
8903 #  mov_[ebx],eax
58                # pop_eax               # ;
50               #  push_eax              # p2 (local)
8D85 14000000 # lea_eax,[ebp+DWORD] %20
50               #  push_eax              # s2 (local)
8D85 08000000 # lea_eax,[ebp+DWORD] %8
8B00          # mov_eax,[eax]         # ?
5B                # pop_ebx               # =
8903 #  mov_[ebx],eax
58                # pop_eax               # ;
 ## stdlib.c 69
50               #  push_eax              # i (local)
8D85 18000000 # lea_eax,[ebp+DWORD] %24
50               #  push_eax              # 0
B8 00000000 #   mov_eax, %0
5B                # pop_ebx               # =
8903 #  mov_[ebx],eax
58                # pop_eax               # ;
:_memcmp_loop1 #:_memcmp_loop1
50               #  push_eax              # i (local)
8D85 18000000 # lea_eax,[ebp+DWORD] %24
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # n (local)
8D85 04000000 # lea_eax,[ebp+DWORD] %4
8B00          # mov_eax,[eax]         # ?
5B                # pop_ebx               # <
39C3 #  cmp_eax_ebx
0F92C0 #    setb_al
0FB6C0 #    movzx_eax,al
85C0           #    test_eax,eax          # !
0F94C0 #    sete_al
0FB6C0 #    movzx_eax,al
85C0           #    test_eax,eax          # if
58 #    pop_eax
0F84 %_memcmp_else2 #   je %_memcmp_else2
E9 %_memcmp_loop_end1 # jmp %_memcmp_loop_end1
 ## stdlib.c 70
:_memcmp_else2  #:_memcmp_else2 # no else
50               #  push_eax              # result (local)
8D85 1C000000 # lea_eax,[ebp+DWORD] %28
50               #  push_eax              # p1 (local)
8D85 10000000 # lea_eax,[ebp+DWORD] %16
8B00          # mov_eax,[eax]         # ?
8A00           #    mov_al,[eax]          # ?1
0FB6C0 #    movzx_eax,al
0FBEC0           #  movsx_eax,al          # char
50               #  push_eax              # p2 (local)
8D85 14000000 # lea_eax,[ebp+DWORD] %20
8B00          # mov_eax,[eax]         # ?
8A00           #    mov_al,[eax]          # ?1
0FB6C0 #    movzx_eax,al
0FBEC0           #  movsx_eax,al          # char
5B                # pop_ebx               # -
29C3 #  sub_ebx,eax
89D8 #  mov_eax,ebx
5B                # pop_ebx               # =
8903 #  mov_[ebx],eax
58                # pop_eax               # ;
 ## stdlib.c 72
50               #  push_eax              # result (local)
8D85 1C000000 # lea_eax,[ebp+DWORD] %28
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # 0
B8 00000000 #   mov_eax, %0
5B                # pop_ebx               # !=
39C3 #  cmp_eax_ebx
0F95C0 #    setne_al
0FB6C0 #    movzx_eax,al
85C0           #    test_eax,eax          # if
58 #    pop_eax
0F84 %_memcmp_else3 #   je %_memcmp_else3
 ## stdlib.c 73
50               #  push_eax              # result (local)
8D85 1C000000 # lea_eax,[ebp+DWORD] %28
8B00          # mov_eax,[eax]         # ?
8B5D00          #   mov_ebx,[ebp]         # return
53 #    push_ebx
C3 #    ret
:_memcmp_else3  #:_memcmp_else3 # no else
50               #  push_eax              # i (local)
8D85 18000000 # lea_eax,[ebp+DWORD] %24
50               #  push_eax              # $ (dup)
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # 1
B8 01000000 #   mov_eax, %1
5B                # pop_ebx               # +
01D8 #  add_eax,ebx
5B                # pop_ebx               # =
8903 #  mov_[ebx],eax
50               #  push_eax              # 1
B8 01000000 #   mov_eax, %1
5B                # pop_ebx               # -
29C3 #  sub_ebx,eax
89D8 #  mov_eax,ebx
58                # pop_eax               # ;
50               #  push_eax              # p1 (local)
8D85 10000000 # lea_eax,[ebp+DWORD] %16
50               #  push_eax              # $ (dup)
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # 1
B8 01000000 #   mov_eax, %1
5B                # pop_ebx               # +
01D8 #  add_eax,ebx
5B                # pop_ebx               # =
8903 #  mov_[ebx],eax
50               #  push_eax              # 1
B8 01000000 #   mov_eax, %1
5B                # pop_ebx               # -
29C3 #  sub_ebx,eax
89D8 #  mov_eax,ebx
58                # pop_eax               # ;
50               #  push_eax              # p2 (local)
8D85 14000000 # lea_eax,[ebp+DWORD] %20
50               #  push_eax              # $ (dup)
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # 1
B8 01000000 #   mov_eax, %1
5B                # pop_ebx               # +
01D8 #  add_eax,ebx
5B                # pop_ebx               # =
8903 #  mov_[ebx],eax
50               #  push_eax              # 1
B8 01000000 #   mov_eax, %1
5B                # pop_ebx               # -
29C3 #  sub_ebx,eax
89D8 #  mov_eax,ebx
58                # pop_eax               # ;
E9 %_memcmp_loop1 # jmp %_memcmp_loop1
:_memcmp_loop_end1 #:_memcmp_loop_end1
 ## stdlib.c 75
50               #  push_eax              # 0
B8 00000000 #   mov_eax, %0
8B5D00          #   mov_ebx,[ebp]         # return
53 #    push_ebx
C3 #    ret
50               #  push_eax              # 0
B8 00000000 #   mov_eax, %0
8B5D00          #   mov_ebx,[ebp]         # return
53 #    push_ebx
C3 #    ret
 #
:f_strlen #:f_strlen
58 #    pop_eax
894500 #    mov_[ebp],eax
58 #    pop_eax
50               #  push_eax              # s (local)
8D85 04000000 # lea_eax,[ebp+DWORD] %4
5B                # pop_ebx               # =:
8918 #  mov_[eax],ebx
58 #    pop_eax
50               #  push_eax              # len (local)
8D85 08000000 # lea_eax,[ebp+DWORD] %8
50               #  push_eax              # 0
B8 00000000 #   mov_eax, %0
5B                # pop_ebx               # =
8903 #  mov_[ebx],eax
58                # pop_eax               # ;
 ## stdlib.c 81
:_strlen_loop1 #:_strlen_loop1
50               #  push_eax              # s (local)
8D85 04000000 # lea_eax,[ebp+DWORD] %4
8B00          # mov_eax,[eax]         # ?
8A00           #    mov_al,[eax]          # ?1
0FB6C0 #    movzx_eax,al
0FBEC0           #  movsx_eax,al          # char
50               #  push_eax              # 0
B8 00000000 #   mov_eax, %0
5B                # pop_ebx               # !=
39C3 #  cmp_eax_ebx
0F95C0 #    setne_al
0FB6C0 #    movzx_eax,al
85C0           #    test_eax,eax          # !
0F94C0 #    sete_al
0FB6C0 #    movzx_eax,al
85C0           #    test_eax,eax          # if
58 #    pop_eax
0F84 %_strlen_else2 #   je %_strlen_else2
E9 %_strlen_loop_end1 # jmp %_strlen_loop_end1
 ## stdlib.c 82
:_strlen_else2  #:_strlen_else2 # no else
50               #  push_eax              # len (local)
8D85 08000000 # lea_eax,[ebp+DWORD] %8
50               #  push_eax              # $ (dup)
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # 1
B8 01000000 #   mov_eax, %1
5B                # pop_ebx               # +
01D8 #  add_eax,ebx
5B                # pop_ebx               # =
8903 #  mov_[ebx],eax
50               #  push_eax              # 1
B8 01000000 #   mov_eax, %1
5B                # pop_ebx               # -
29C3 #  sub_ebx,eax
89D8 #  mov_eax,ebx
58                # pop_eax               # ;
50               #  push_eax              # s (local)
8D85 04000000 # lea_eax,[ebp+DWORD] %4
50               #  push_eax              # $ (dup)
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # 1
B8 01000000 #   mov_eax, %1
5B                # pop_ebx               # +
01D8 #  add_eax,ebx
5B                # pop_ebx               # =
8903 #  mov_[ebx],eax
50               #  push_eax              # 1
B8 01000000 #   mov_eax, %1
5B                # pop_ebx               # -
29C3 #  sub_ebx,eax
89D8 #  mov_eax,ebx
58                # pop_eax               # ;
E9 %_strlen_loop1 # jmp %_strlen_loop1
:_strlen_loop_end1 #:_strlen_loop_end1
 ## stdlib.c 83
50               #  push_eax              # len (local)
8D85 08000000 # lea_eax,[ebp+DWORD] %8
8B00          # mov_eax,[eax]         # ?
8B5D00          #   mov_ebx,[ebp]         # return
53 #    push_ebx
C3 #    ret
50               #  push_eax              # 0
B8 00000000 #   mov_eax, %0
8B5D00          #   mov_ebx,[ebp]         # return
53 #    push_ebx
C3 #    ret
 #
:f_strcpy #:f_strcpy
58 #    pop_eax
894500 #    mov_[ebp],eax
58 #    pop_eax
50               #  push_eax              # src (local)
8D85 04000000 # lea_eax,[ebp+DWORD] %4
5B                # pop_ebx               # =:
8918 #  mov_[eax],ebx
58 #    pop_eax
50               #  push_eax              # dest (local)
8D85 08000000 # lea_eax,[ebp+DWORD] %8
5B                # pop_ebx               # =:
8918 #  mov_[eax],ebx
58 #    pop_eax
50               #  push_eax              # result (local)
8D85 0C000000 # lea_eax,[ebp+DWORD] %12
50               #  push_eax              # dest (local)
8D85 08000000 # lea_eax,[ebp+DWORD] %8
8B00          # mov_eax,[eax]         # ?
5B                # pop_ebx               # =
8903 #  mov_[ebx],eax
58                # pop_eax               # ;
 ## stdlib.c 89
:_strcpy_loop1 #:_strcpy_loop1
50               #  push_eax              # src (local)
8D85 04000000 # lea_eax,[ebp+DWORD] %4
8B00          # mov_eax,[eax]         # ?
8A00           #    mov_al,[eax]          # ?1
0FB6C0 #    movzx_eax,al
0FBEC0           #  movsx_eax,al          # char
50               #  push_eax              # 0
B8 00000000 #   mov_eax, %0
5B                # pop_ebx               # !=
39C3 #  cmp_eax_ebx
0F95C0 #    setne_al
0FB6C0 #    movzx_eax,al
85C0           #    test_eax,eax          # !
0F94C0 #    sete_al
0FB6C0 #    movzx_eax,al
85C0           #    test_eax,eax          # if
58 #    pop_eax
0F84 %_strcpy_else2 #   je %_strcpy_else2
E9 %_strcpy_loop_end1 # jmp %_strcpy_loop_end1
 ## stdlib.c 90
:_strcpy_else2  #:_strcpy_else2 # no else
50               #  push_eax              # dest (local)
8D85 08000000 # lea_eax,[ebp+DWORD] %8
50               #  push_eax              # $ (dup)
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # 1
B8 01000000 #   mov_eax, %1
5B                # pop_ebx               # +
01D8 #  add_eax,ebx
5B                # pop_ebx               # =
8903 #  mov_[ebx],eax
50               #  push_eax              # 1
B8 01000000 #   mov_eax, %1
5B                # pop_ebx               # -
29C3 #  sub_ebx,eax
89D8 #  mov_eax,ebx
50               #  push_eax              # src (local)
8D85 04000000 # lea_eax,[ebp+DWORD] %4
50               #  push_eax              # $ (dup)
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # 1
B8 01000000 #   mov_eax, %1
5B                # pop_ebx               # +
01D8 #  add_eax,ebx
5B                # pop_ebx               # =
8903 #  mov_[ebx],eax
50               #  push_eax              # 1
B8 01000000 #   mov_eax, %1
5B                # pop_ebx               # -
29C3 #  sub_ebx,eax
89D8 #  mov_eax,ebx
8A00           #    mov_al,[eax]          # ?1
0FB6C0 #    movzx_eax,al
0FBEC0           #  movsx_eax,al          # char
5B                # pop_ebx               # =1
8803 #  mov_[ebx],al
58                # pop_eax               # ;
E9 %_strcpy_loop1 # jmp %_strcpy_loop1
:_strcpy_loop_end1 #:_strcpy_loop_end1
 ## stdlib.c 91
50               #  push_eax              # dest (local)
8D85 08000000 # lea_eax,[ebp+DWORD] %8
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # 0
B8 00000000 #   mov_eax, %0
5B                # pop_ebx               # =1
8803 #  mov_[ebx],al
58                # pop_eax               # ;
 ## stdlib.c 92
50               #  push_eax              # result (local)
8D85 0C000000 # lea_eax,[ebp+DWORD] %12
8B00          # mov_eax,[eax]         # ?
8B5D00          #   mov_ebx,[ebp]         # return
53 #    push_ebx
C3 #    ret
50               #  push_eax              # 0
B8 00000000 #   mov_eax, %0
8B5D00          #   mov_ebx,[ebp]         # return
53 #    push_ebx
C3 #    ret
 #
:f_strncpy #:f_strncpy
58 #    pop_eax
894500 #    mov_[ebp],eax
58 #    pop_eax
50               #  push_eax              # n (local)
8D85 04000000 # lea_eax,[ebp+DWORD] %4
5B                # pop_ebx               # =:
8918 #  mov_[eax],ebx
58 #    pop_eax
50               #  push_eax              # src (local)
8D85 08000000 # lea_eax,[ebp+DWORD] %8
5B                # pop_ebx               # =:
8918 #  mov_[eax],ebx
58 #    pop_eax
50               #  push_eax              # dest (local)
8D85 0C000000 # lea_eax,[ebp+DWORD] %12
5B                # pop_ebx               # =:
8918 #  mov_[eax],ebx
58 #    pop_eax
50               #  push_eax              # d (local)
8D85 10000000 # lea_eax,[ebp+DWORD] %16
50               #  push_eax              # dest (local)
8D85 0C000000 # lea_eax,[ebp+DWORD] %12
8B00          # mov_eax,[eax]         # ?
5B                # pop_ebx               # =
8903 #  mov_[ebx],eax
58                # pop_eax               # ;
50               #  push_eax              # s (local)
8D85 14000000 # lea_eax,[ebp+DWORD] %20
50               #  push_eax              # src (local)
8D85 08000000 # lea_eax,[ebp+DWORD] %8
8B00          # mov_eax,[eax]         # ?
5B                # pop_ebx               # =
8903 #  mov_[ebx],eax
58                # pop_eax               # ;
 ## stdlib.c 99
50               #  push_eax              # i (local)
8D85 18000000 # lea_eax,[ebp+DWORD] %24
50               #  push_eax              # 0
B8 00000000 #   mov_eax, %0
5B                # pop_ebx               # =
8903 #  mov_[ebx],eax
58                # pop_eax               # ;
:_strncpy_loop1 #:_strncpy_loop1
50               #  push_eax              # i (local)
8D85 18000000 # lea_eax,[ebp+DWORD] %24
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # n (local)
8D85 04000000 # lea_eax,[ebp+DWORD] %4
8B00          # mov_eax,[eax]         # ?
5B                # pop_ebx               # <s
39C3 #  cmp_eax_ebx
0F9CC0 #    setl_al
0FB6C0 #    movzx_eax,al
85C0           #    test_eax,eax          # !
0F94C0 #    sete_al
0FB6C0 #    movzx_eax,al
85C0           #    test_eax,eax          # if
58 #    pop_eax
0F84 %_strncpy_else2 #  je %_strncpy_else2
E9 %_strncpy_loop_end1 #    jmp %_strncpy_loop_end1
 ## stdlib.c 100
 ## stdlib.c 101
:_strncpy_else2  #:_strncpy_else2 # no else
50               #  push_eax              # d (local)
8D85 10000000 # lea_eax,[ebp+DWORD] %16
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # i (local)
8D85 18000000 # lea_eax,[ebp+DWORD] %24
8B00          # mov_eax,[eax]         # ?
5B                # pop_ebx               # +
01D8 #  add_eax,ebx
50               #  push_eax              # s (local)
8D85 14000000 # lea_eax,[ebp+DWORD] %20
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # i (local)
8D85 18000000 # lea_eax,[ebp+DWORD] %24
8B00          # mov_eax,[eax]         # ?
5B                # pop_ebx               # +
01D8 #  add_eax,ebx
8A00           #    mov_al,[eax]          # ?1
0FB6C0 #    movzx_eax,al
0FBEC0           #  movsx_eax,al          # char
5B                # pop_ebx               # =1
8803 #  mov_[ebx],al
58                # pop_eax               # ;
 ## stdlib.c 102
50               #  push_eax              # s (local)
8D85 14000000 # lea_eax,[ebp+DWORD] %20
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # i (local)
8D85 18000000 # lea_eax,[ebp+DWORD] %24
8B00          # mov_eax,[eax]         # ?
5B                # pop_ebx               # +
01D8 #  add_eax,ebx
8A00           #    mov_al,[eax]          # ?1
0FB6C0 #    movzx_eax,al
0FBEC0           #  movsx_eax,al          # char
50               #  push_eax              # 0
B8 00000000 #   mov_eax, %0
5B                # pop_ebx               # ==
39C3 #  cmp_eax_ebx
0F94C0 #    sete_al
0FB6C0 #    movzx_eax,al
85C0           #    test_eax,eax          # if
58 #    pop_eax
0F84 %_strncpy_else3 #  je %_strncpy_else3
 ## stdlib.c 103
E9 %_strncpy_loop_end1 #    jmp %_strncpy_loop_end1
:_strncpy_else3  #:_strncpy_else3 # no else
50               #  push_eax              # i (local)
8D85 18000000 # lea_eax,[ebp+DWORD] %24
50               #  push_eax              # $ (dup)
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # 1
B8 01000000 #   mov_eax, %1
5B                # pop_ebx               # +
01D8 #  add_eax,ebx
5B                # pop_ebx               # =
8903 #  mov_[ebx],eax
50               #  push_eax              # 1
B8 01000000 #   mov_eax, %1
5B                # pop_ebx               # -
29C3 #  sub_ebx,eax
89D8 #  mov_eax,ebx
58                # pop_eax               # ;
E9 %_strncpy_loop1 #    jmp %_strncpy_loop1
:_strncpy_loop_end1 #:_strncpy_loop_end1
 ## stdlib.c 105
50               #  push_eax              # dest (local)
8D85 0C000000 # lea_eax,[ebp+DWORD] %12
8B00          # mov_eax,[eax]         # ?
8B5D00          #   mov_ebx,[ebp]         # return
53 #    push_ebx
C3 #    ret
50               #  push_eax              # 0
B8 00000000 #   mov_eax, %0
8B5D00          #   mov_ebx,[ebp]         # return
53 #    push_ebx
C3 #    ret
 #
:f_strcat #:f_strcat
58 #    pop_eax
894500 #    mov_[ebp],eax
58 #    pop_eax
50               #  push_eax              # src (local)
8D85 04000000 # lea_eax,[ebp+DWORD] %4
5B                # pop_ebx               # =:
8918 #  mov_[eax],ebx
58 #    pop_eax
50               #  push_eax              # dest (local)
8D85 08000000 # lea_eax,[ebp+DWORD] %8
5B                # pop_ebx               # =:
8918 #  mov_[eax],ebx
58 #    pop_eax
 ## stdlib.c 110
50               #  push_eax              # dest (local)
8D85 08000000 # lea_eax,[ebp+DWORD] %8
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # dest (local)
8D85 08000000 # lea_eax,[ebp+DWORD] %8
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # strlen (function)
B8 &f_strlen #  mov_eax, &f_strlen
81C5 0C000000          #    add_ebp, %12         # ()
FFD0 #  call_eax
81ED 0C000000 # sub_ebp, %12
5B                # pop_ebx               # +
01D8 #  add_eax,ebx
50               #  push_eax              # src (local)
8D85 04000000 # lea_eax,[ebp+DWORD] %4
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # strcpy (function)
B8 &f_strcpy #  mov_eax, &f_strcpy
81C5 0C000000          #    add_ebp, %12         # ()
FFD0 #  call_eax
81ED 0C000000 # sub_ebp, %12
58                # pop_eax               # ;
 ## stdlib.c 111
50               #  push_eax              # dest (local)
8D85 08000000 # lea_eax,[ebp+DWORD] %8
8B00          # mov_eax,[eax]         # ?
8B5D00          #   mov_ebx,[ebp]         # return
53 #    push_ebx
C3 #    ret
50               #  push_eax              # 0
B8 00000000 #   mov_eax, %0
8B5D00          #   mov_ebx,[ebp]         # return
53 #    push_ebx
C3 #    ret
 #
:f_strchr #:f_strchr
58 #    pop_eax
894500 #    mov_[ebp],eax
58 #    pop_eax
50               #  push_eax              # c (local)
8D85 04000000 # lea_eax,[ebp+DWORD] %4
5B                # pop_ebx               # =:
8918 #  mov_[eax],ebx
58 #    pop_eax
50               #  push_eax              # s (local)
8D85 08000000 # lea_eax,[ebp+DWORD] %8
5B                # pop_ebx               # =:
8918 #  mov_[eax],ebx
58 #    pop_eax
 ## stdlib.c 116
:_strchr_loop1 #:_strchr_loop1
50               #  push_eax              # s (local)
8D85 08000000 # lea_eax,[ebp+DWORD] %8
8B00          # mov_eax,[eax]         # ?
8A00           #    mov_al,[eax]          # ?1
0FB6C0 #    movzx_eax,al
0FBEC0           #  movsx_eax,al          # char
50               #  push_eax              # 0
B8 00000000 #   mov_eax, %0
5B                # pop_ebx               # !=
39C3 #  cmp_eax_ebx
0F95C0 #    setne_al
0FB6C0 #    movzx_eax,al
85C0           #    test_eax,eax          # !
0F94C0 #    sete_al
0FB6C0 #    movzx_eax,al
85C0           #    test_eax,eax          # if
58 #    pop_eax
0F84 %_strchr_else2 #   je %_strchr_else2
E9 %_strchr_loop_end1 # jmp %_strchr_loop_end1
 ## stdlib.c 117
:_strchr_else2  #:_strchr_else2 # no else
50               #  push_eax              # s (local)
8D85 08000000 # lea_eax,[ebp+DWORD] %8
8B00          # mov_eax,[eax]         # ?
8A00           #    mov_al,[eax]          # ?1
0FB6C0 #    movzx_eax,al
0FBEC0           #  movsx_eax,al          # char
50               #  push_eax              # c (local)
8D85 04000000 # lea_eax,[ebp+DWORD] %4
8B00          # mov_eax,[eax]         # ?
5B                # pop_ebx               # ==
39C3 #  cmp_eax_ebx
0F94C0 #    sete_al
0FB6C0 #    movzx_eax,al
85C0           #    test_eax,eax          # if
58 #    pop_eax
0F84 %_strchr_else3 #   je %_strchr_else3
 ## stdlib.c 118
50               #  push_eax              # s (local)
8D85 08000000 # lea_eax,[ebp+DWORD] %8
8B00          # mov_eax,[eax]         # ?
8B5D00          #   mov_ebx,[ebp]         # return
53 #    push_ebx
C3 #    ret
:_strchr_else3  #:_strchr_else3 # no else
50               #  push_eax              # s (local)
8D85 08000000 # lea_eax,[ebp+DWORD] %8
50               #  push_eax              # $ (dup)
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # 1
B8 01000000 #   mov_eax, %1
5B                # pop_ebx               # +
01D8 #  add_eax,ebx
5B                # pop_ebx               # =
8903 #  mov_[ebx],eax
50               #  push_eax              # 1
B8 01000000 #   mov_eax, %1
5B                # pop_ebx               # -
29C3 #  sub_ebx,eax
89D8 #  mov_eax,ebx
58                # pop_eax               # ;
E9 %_strchr_loop1 # jmp %_strchr_loop1
:_strchr_loop_end1 #:_strchr_loop_end1
 ## stdlib.c 119
50               #  push_eax              # c (local)
8D85 04000000 # lea_eax,[ebp+DWORD] %4
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # 0
B8 00000000 #   mov_eax, %0
5B                # pop_ebx               # ==
39C3 #  cmp_eax_ebx
0F94C0 #    sete_al
0FB6C0 #    movzx_eax,al
85C0           #    test_eax,eax          # if
58 #    pop_eax
0F84 %_strchr_else4 #   je %_strchr_else4
50               #  push_eax              # s (local)
8D85 08000000 # lea_eax,[ebp+DWORD] %8
8B00          # mov_eax,[eax]         # ?
E9 %_strchr_else_end4 # jmp %_strchr_else_end4
:_strchr_else4 #:_strchr_else4
50               #  push_eax              # 0
B8 00000000 #   mov_eax, %0
:_strchr_else_end4 #:_strchr_else_end4
8B5D00          #   mov_ebx,[ebp]         # return
53 #    push_ebx
C3 #    ret
50               #  push_eax              # 0
B8 00000000 #   mov_eax, %0
8B5D00          #   mov_ebx,[ebp]         # return
53 #    push_ebx
C3 #    ret
 #
:f_strrchr #:f_strrchr
58 #    pop_eax
894500 #    mov_[ebp],eax
58 #    pop_eax
50               #  push_eax              # c (local)
8D85 04000000 # lea_eax,[ebp+DWORD] %4
5B                # pop_ebx               # =:
8918 #  mov_[eax],ebx
58 #    pop_eax
50               #  push_eax              # s (local)
8D85 08000000 # lea_eax,[ebp+DWORD] %8
5B                # pop_ebx               # =:
8918 #  mov_[eax],ebx
58 #    pop_eax
50               #  push_eax              # n (local)
8D85 0C000000 # lea_eax,[ebp+DWORD] %12
50               #  push_eax              # s (local)
8D85 08000000 # lea_eax,[ebp+DWORD] %8
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # strlen (function)
B8 &f_strlen #  mov_eax, &f_strlen
81C5 10000000          #    add_ebp, %16         # ()
FFD0 #  call_eax
81ED 10000000 # sub_ebp, %16
5B                # pop_ebx               # =
8903 #  mov_[ebx],eax
58                # pop_eax               # ;
 ## stdlib.c 125
50               #  push_eax              # i (local)
8D85 10000000 # lea_eax,[ebp+DWORD] %16
50               #  push_eax              # n (local)
8D85 0C000000 # lea_eax,[ebp+DWORD] %12
8B00          # mov_eax,[eax]         # ?
5B                # pop_ebx               # =
8903 #  mov_[ebx],eax
58                # pop_eax               # ;
:_strrchr_loop1 #:_strrchr_loop1
50               #  push_eax              # i (local)
8D85 10000000 # lea_eax,[ebp+DWORD] %16
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # 0
B8 00000000 #   mov_eax, %0
5B                # pop_ebx               # >=sfv
39C3 #  cmp_eax_ebx
0F9DC0 #    setge_al
0FB6C0 #    movzx_eax,al
85C0           #    test_eax,eax          # !
0F94C0 #    sete_al
0FB6C0 #    movzx_eax,al
85C0           #    test_eax,eax          # if
58 #    pop_eax
0F84 %_strrchr_else2 #  je %_strrchr_else2
E9 %_strrchr_loop_end1 #    jmp %_strrchr_loop_end1
 ## stdlib.c 126
:_strrchr_else2  #:_strrchr_else2 # no else
50               #  push_eax              # s (local)
8D85 08000000 # lea_eax,[ebp+DWORD] %8
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # i (local)
8D85 10000000 # lea_eax,[ebp+DWORD] %16
8B00          # mov_eax,[eax]         # ?
5B                # pop_ebx               # +
01D8 #  add_eax,ebx
8A00           #    mov_al,[eax]          # ?1
0FB6C0 #    movzx_eax,al
0FBEC0           #  movsx_eax,al          # char
50               #  push_eax              # c (local)
8D85 04000000 # lea_eax,[ebp+DWORD] %4
8B00          # mov_eax,[eax]         # ?
5B                # pop_ebx               # ==
39C3 #  cmp_eax_ebx
0F94C0 #    sete_al
0FB6C0 #    movzx_eax,al
85C0           #    test_eax,eax          # if
58 #    pop_eax
0F84 %_strrchr_else3 #  je %_strrchr_else3
 ## stdlib.c 127
50               #  push_eax              # s (local)
8D85 08000000 # lea_eax,[ebp+DWORD] %8
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # i (local)
8D85 10000000 # lea_eax,[ebp+DWORD] %16
8B00          # mov_eax,[eax]         # ?
5B                # pop_ebx               # +
01D8 #  add_eax,ebx
8B5D00          #   mov_ebx,[ebp]         # return
53 #    push_ebx
C3 #    ret
:_strrchr_else3  #:_strrchr_else3 # no else
50               #  push_eax              # i (local)
8D85 10000000 # lea_eax,[ebp+DWORD] %16
50               #  push_eax              # $ (dup)
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # 1
B8 01000000 #   mov_eax, %1
5B                # pop_ebx               # -
29C3 #  sub_ebx,eax
89D8 #  mov_eax,ebx
5B                # pop_ebx               # =
8903 #  mov_[ebx],eax
50               #  push_eax              # 1
B8 01000000 #   mov_eax, %1
5B                # pop_ebx               # +
01D8 #  add_eax,ebx
58                # pop_eax               # ;
E9 %_strrchr_loop1 #    jmp %_strrchr_loop1
:_strrchr_loop_end1 #:_strrchr_loop_end1
 ## stdlib.c 128
50               #  push_eax              # 0
B8 00000000 #   mov_eax, %0
8B5D00          #   mov_ebx,[ebp]         # return
53 #    push_ebx
C3 #    ret
50               #  push_eax              # 0
B8 00000000 #   mov_eax, %0
8B5D00          #   mov_ebx,[ebp]         # return
53 #    push_ebx
C3 #    ret
 #
:f_strcmp #:f_strcmp
58 #    pop_eax
894500 #    mov_[ebp],eax
58 #    pop_eax
50               #  push_eax              # s2 (local)
8D85 04000000 # lea_eax,[ebp+DWORD] %4
5B                # pop_ebx               # =:
8918 #  mov_[eax],ebx
58 #    pop_eax
50               #  push_eax              # s1 (local)
8D85 08000000 # lea_eax,[ebp+DWORD] %8
5B                # pop_ebx               # =:
8918 #  mov_[eax],ebx
58 #    pop_eax
 ## stdlib.c 133
:_strcmp_loop1 #:_strcmp_loop1
 ## stdlib.c 134
50               #  push_eax              # result (local)
8D85 0C000000 # lea_eax,[ebp+DWORD] %12
50               #  push_eax              # s1 (local)
8D85 08000000 # lea_eax,[ebp+DWORD] %8
8B00          # mov_eax,[eax]         # ?
8A00           #    mov_al,[eax]          # ?1
0FB6C0 #    movzx_eax,al
0FBEC0           #  movsx_eax,al          # char
50               #  push_eax              # s2 (local)
8D85 04000000 # lea_eax,[ebp+DWORD] %4
8B00          # mov_eax,[eax]         # ?
8A00           #    mov_al,[eax]          # ?1
0FB6C0 #    movzx_eax,al
0FBEC0           #  movsx_eax,al          # char
5B                # pop_ebx               # -
29C3 #  sub_ebx,eax
89D8 #  mov_eax,ebx
5B                # pop_ebx               # =
8903 #  mov_[ebx],eax
58                # pop_eax               # ;
 ## stdlib.c 136
50               #  push_eax              # result (local)
8D85 0C000000 # lea_eax,[ebp+DWORD] %12
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # 0
B8 00000000 #   mov_eax, %0
5B                # pop_ebx               # !=
39C3 #  cmp_eax_ebx
0F95C0 #    setne_al
0FB6C0 #    movzx_eax,al
85C0           #    test_eax,eax          # ||
0F85 %_strcmp_or_end2 # jne %_strcmp_or_end2
58 #    pop_eax
50               #  push_eax              # s1 (local)
8D85 08000000 # lea_eax,[ebp+DWORD] %8
8B00          # mov_eax,[eax]         # ?
8A00           #    mov_al,[eax]          # ?1
0FB6C0 #    movzx_eax,al
0FBEC0           #  movsx_eax,al          # char
50               #  push_eax              # 0
B8 00000000 #   mov_eax, %0
5B                # pop_ebx               # ==
39C3 #  cmp_eax_ebx
0F94C0 #    sete_al
0FB6C0 #    movzx_eax,al
:_strcmp_or_end2 #:_strcmp_or_end2
85C0           #    test_eax,eax          # if
58 #    pop_eax
0F84 %_strcmp_else3 #   je %_strcmp_else3
 ## stdlib.c 137
50               #  push_eax              # result (local)
8D85 0C000000 # lea_eax,[ebp+DWORD] %12
8B00          # mov_eax,[eax]         # ?
8B5D00          #   mov_ebx,[ebp]         # return
53 #    push_ebx
C3 #    ret
 ## stdlib.c 138
:_strcmp_else3  #:_strcmp_else3 # no else
50               #  push_eax              # s1 (local)
8D85 08000000 # lea_eax,[ebp+DWORD] %8
50               #  push_eax              # $ (dup)
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # 1
B8 01000000 #   mov_eax, %1
5B                # pop_ebx               # +
01D8 #  add_eax,ebx
5B                # pop_ebx               # =
8903 #  mov_[ebx],eax
50               #  push_eax              # 1
B8 01000000 #   mov_eax, %1
5B                # pop_ebx               # -
29C3 #  sub_ebx,eax
89D8 #  mov_eax,ebx
58                # pop_eax               # ;
 ## stdlib.c 139
50               #  push_eax              # s2 (local)
8D85 04000000 # lea_eax,[ebp+DWORD] %4
50               #  push_eax              # $ (dup)
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # 1
B8 01000000 #   mov_eax, %1
5B                # pop_ebx               # +
01D8 #  add_eax,ebx
5B                # pop_ebx               # =
8903 #  mov_[ebx],eax
50               #  push_eax              # 1
B8 01000000 #   mov_eax, %1
5B                # pop_ebx               # -
29C3 #  sub_ebx,eax
89D8 #  mov_eax,ebx
58                # pop_eax               # ;
E9 %_strcmp_loop1 # jmp %_strcmp_loop1
:_strcmp_loop_end1 #:_strcmp_loop_end1
 ## stdlib.c 141
50               #  push_eax              # 0
B8 00000000 #   mov_eax, %0
8B5D00          #   mov_ebx,[ebp]         # return
53 #    push_ebx
C3 #    ret
50               #  push_eax              # 0
B8 00000000 #   mov_eax, %0
8B5D00          #   mov_ebx,[ebp]         # return
53 #    push_ebx
C3 #    ret
 #
:f_strncmp #:f_strncmp
58 #    pop_eax
894500 #    mov_[ebp],eax
58 #    pop_eax
50               #  push_eax              # n (local)
8D85 04000000 # lea_eax,[ebp+DWORD] %4
5B                # pop_ebx               # =:
8918 #  mov_[eax],ebx
58 #    pop_eax
50               #  push_eax              # s2 (local)
8D85 08000000 # lea_eax,[ebp+DWORD] %8
5B                # pop_ebx               # =:
8918 #  mov_[eax],ebx
58 #    pop_eax
50               #  push_eax              # s1 (local)
8D85 0C000000 # lea_eax,[ebp+DWORD] %12
5B                # pop_ebx               # =:
8918 #  mov_[eax],ebx
58 #    pop_eax
 ## stdlib.c 146
:_strncmp_loop1 #:_strncmp_loop1
50               #  push_eax              # n (local)
8D85 04000000 # lea_eax,[ebp+DWORD] %4
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # 0
B8 00000000 #   mov_eax, %0
5B                # pop_ebx               # >
39C3 #  cmp_eax_ebx
0F97C0 #    seta_al
0FB6C0 #    movzx_eax,al
85C0           #    test_eax,eax          # !
0F94C0 #    sete_al
0FB6C0 #    movzx_eax,al
85C0           #    test_eax,eax          # if
58 #    pop_eax
0F84 %_strncmp_else2 #  je %_strncmp_else2
E9 %_strncmp_loop_end1 #    jmp %_strncmp_loop_end1
 ## stdlib.c 147
:_strncmp_else2  #:_strncmp_else2 # no else
50               #  push_eax              # result (local)
8D85 10000000 # lea_eax,[ebp+DWORD] %16
50               #  push_eax              # s1 (local)
8D85 0C000000 # lea_eax,[ebp+DWORD] %12
8B00          # mov_eax,[eax]         # ?
8A00           #    mov_al,[eax]          # ?1
0FB6C0 #    movzx_eax,al
0FBEC0           #  movsx_eax,al          # char
50               #  push_eax              # s2 (local)
8D85 08000000 # lea_eax,[ebp+DWORD] %8
8B00          # mov_eax,[eax]         # ?
8A00           #    mov_al,[eax]          # ?1
0FB6C0 #    movzx_eax,al
0FBEC0           #  movsx_eax,al          # char
5B                # pop_ebx               # -
29C3 #  sub_ebx,eax
89D8 #  mov_eax,ebx
5B                # pop_ebx               # =
8903 #  mov_[ebx],eax
58                # pop_eax               # ;
 ## stdlib.c 149
50               #  push_eax              # result (local)
8D85 10000000 # lea_eax,[ebp+DWORD] %16
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # 0
B8 00000000 #   mov_eax, %0
5B                # pop_ebx               # !=
39C3 #  cmp_eax_ebx
0F95C0 #    setne_al
0FB6C0 #    movzx_eax,al
85C0           #    test_eax,eax          # ||
0F85 %_strncmp_or_end3 #    jne %_strncmp_or_end3
58 #    pop_eax
50               #  push_eax              # s1 (local)
8D85 0C000000 # lea_eax,[ebp+DWORD] %12
8B00          # mov_eax,[eax]         # ?
8A00           #    mov_al,[eax]          # ?1
0FB6C0 #    movzx_eax,al
0FBEC0           #  movsx_eax,al          # char
50               #  push_eax              # 0
B8 00000000 #   mov_eax, %0
5B                # pop_ebx               # ==
39C3 #  cmp_eax_ebx
0F94C0 #    sete_al
0FB6C0 #    movzx_eax,al
:_strncmp_or_end3 #:_strncmp_or_end3
85C0           #    test_eax,eax          # if
58 #    pop_eax
0F84 %_strncmp_else4 #  je %_strncmp_else4
 ## stdlib.c 150
50               #  push_eax              # result (local)
8D85 10000000 # lea_eax,[ebp+DWORD] %16
8B00          # mov_eax,[eax]         # ?
8B5D00          #   mov_ebx,[ebp]         # return
53 #    push_ebx
C3 #    ret
 ## stdlib.c 151
:_strncmp_else4  #:_strncmp_else4 # no else
50               #  push_eax              # s1 (local)
8D85 0C000000 # lea_eax,[ebp+DWORD] %12
50               #  push_eax              # $ (dup)
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # 1
B8 01000000 #   mov_eax, %1
5B                # pop_ebx               # +
01D8 #  add_eax,ebx
5B                # pop_ebx               # =
8903 #  mov_[ebx],eax
50               #  push_eax              # 1
B8 01000000 #   mov_eax, %1
5B                # pop_ebx               # -
29C3 #  sub_ebx,eax
89D8 #  mov_eax,ebx
58                # pop_eax               # ;
 ## stdlib.c 152
50               #  push_eax              # s2 (local)
8D85 08000000 # lea_eax,[ebp+DWORD] %8
50               #  push_eax              # $ (dup)
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # 1
B8 01000000 #   mov_eax, %1
5B                # pop_ebx               # +
01D8 #  add_eax,ebx
5B                # pop_ebx               # =
8903 #  mov_[ebx],eax
50               #  push_eax              # 1
B8 01000000 #   mov_eax, %1
5B                # pop_ebx               # -
29C3 #  sub_ebx,eax
89D8 #  mov_eax,ebx
58                # pop_eax               # ;
50               #  push_eax              # n (local)
8D85 04000000 # lea_eax,[ebp+DWORD] %4
50               #  push_eax              # $ (dup)
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # 1
B8 01000000 #   mov_eax, %1
5B                # pop_ebx               # -
29C3 #  sub_ebx,eax
89D8 #  mov_eax,ebx
5B                # pop_ebx               # =
8903 #  mov_[ebx],eax
50               #  push_eax              # 1
B8 01000000 #   mov_eax, %1
5B                # pop_ebx               # +
01D8 #  add_eax,ebx
58                # pop_eax               # ;
E9 %_strncmp_loop1 #    jmp %_strncmp_loop1
:_strncmp_loop_end1 #:_strncmp_loop_end1
 ## stdlib.c 154
50               #  push_eax              # 0
B8 00000000 #   mov_eax, %0
8B5D00          #   mov_ebx,[ebp]         # return
53 #    push_ebx
C3 #    ret
50               #  push_eax              # 0
B8 00000000 #   mov_eax, %0
8B5D00          #   mov_ebx,[ebp]         # return
53 #    push_ebx
C3 #    ret
 #
:f_strstr #:f_strstr
58 #    pop_eax
894500 #    mov_[ebp],eax
58 #    pop_eax
50               #  push_eax              # needle (local)
8D85 04000000 # lea_eax,[ebp+DWORD] %4
5B                # pop_ebx               # =:
8918 #  mov_[eax],ebx
58 #    pop_eax
50               #  push_eax              # haystack (local)
8D85 08000000 # lea_eax,[ebp+DWORD] %8
5B                # pop_ebx               # =:
8918 #  mov_[eax],ebx
58 #    pop_eax
50               #  push_eax              # n (local)
8D85 0C000000 # lea_eax,[ebp+DWORD] %12
50               #  push_eax              # needle (local)
8D85 04000000 # lea_eax,[ebp+DWORD] %4
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # strlen (function)
B8 &f_strlen #  mov_eax, &f_strlen
81C5 10000000          #    add_ebp, %16         # ()
FFD0 #  call_eax
81ED 10000000 # sub_ebp, %16
5B                # pop_ebx               # =
8903 #  mov_[ebx],eax
58                # pop_eax               # ;
 ## stdlib.c 160
:_strstr_loop1 #:_strstr_loop1
50               #  push_eax              # haystack (local)
8D85 08000000 # lea_eax,[ebp+DWORD] %8
8B00          # mov_eax,[eax]         # ?
8A00           #    mov_al,[eax]          # ?1
0FB6C0 #    movzx_eax,al
0FBEC0           #  movsx_eax,al          # char
50               #  push_eax              # 0
B8 00000000 #   mov_eax, %0
5B                # pop_ebx               # !=
39C3 #  cmp_eax_ebx
0F95C0 #    setne_al
0FB6C0 #    movzx_eax,al
85C0           #    test_eax,eax          # !
0F94C0 #    sete_al
0FB6C0 #    movzx_eax,al
85C0           #    test_eax,eax          # if
58 #    pop_eax
0F84 %_strstr_else2 #   je %_strstr_else2
E9 %_strstr_loop_end1 # jmp %_strstr_loop_end1
 ## stdlib.c 161
:_strstr_else2  #:_strstr_else2 # no else
50               #  push_eax              # haystack (local)
8D85 08000000 # lea_eax,[ebp+DWORD] %8
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # needle (local)
8D85 04000000 # lea_eax,[ebp+DWORD] %4
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # n (local)
8D85 0C000000 # lea_eax,[ebp+DWORD] %12
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # strncmp (function)
B8 &f_strncmp # mov_eax, &f_strncmp
81C5 10000000          #    add_ebp, %16         # ()
FFD0 #  call_eax
81ED 10000000 # sub_ebp, %16
50               #  push_eax              # 0
B8 00000000 #   mov_eax, %0
5B                # pop_ebx               # ==
39C3 #  cmp_eax_ebx
0F94C0 #    sete_al
0FB6C0 #    movzx_eax,al
85C0           #    test_eax,eax          # if
58 #    pop_eax
0F84 %_strstr_else3 #   je %_strstr_else3
 ## stdlib.c 162
50               #  push_eax              # haystack (local)
8D85 08000000 # lea_eax,[ebp+DWORD] %8
8B00          # mov_eax,[eax]         # ?
8B5D00          #   mov_ebx,[ebp]         # return
53 #    push_ebx
C3 #    ret
:_strstr_else3  #:_strstr_else3 # no else
50               #  push_eax              # haystack (local)
8D85 08000000 # lea_eax,[ebp+DWORD] %8
50               #  push_eax              # $ (dup)
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # 1
B8 01000000 #   mov_eax, %1
5B                # pop_ebx               # +
01D8 #  add_eax,ebx
5B                # pop_ebx               # =
8903 #  mov_[ebx],eax
50               #  push_eax              # 1
B8 01000000 #   mov_eax, %1
5B                # pop_ebx               # -
29C3 #  sub_ebx,eax
89D8 #  mov_eax,ebx
58                # pop_eax               # ;
E9 %_strstr_loop1 # jmp %_strstr_loop1
:_strstr_loop_end1 #:_strstr_loop_end1
 ## stdlib.c 163
50               #  push_eax              # 0
B8 00000000 #   mov_eax, %0
8B5D00          #   mov_ebx,[ebp]         # return
53 #    push_ebx
C3 #    ret
50               #  push_eax              # 0
B8 00000000 #   mov_eax, %0
8B5D00          #   mov_ebx,[ebp]         # return
53 #    push_ebx
C3 #    ret
 #
:f_strtoul #:f_strtoul
58 #    pop_eax
894500 #    mov_[ebp],eax
58 #    pop_eax
50               #  push_eax              # base (local)
8D85 04000000 # lea_eax,[ebp+DWORD] %4
5B                # pop_ebx               # =:
8918 #  mov_[eax],ebx
58 #    pop_eax
50               #  push_eax              # endptr (local)
8D85 08000000 # lea_eax,[ebp+DWORD] %8
5B                # pop_ebx               # =:
8918 #  mov_[eax],ebx
58 #    pop_eax
50               #  push_eax              # nptr (local)
8D85 0C000000 # lea_eax,[ebp+DWORD] %12
5B                # pop_ebx               # =:
8918 #  mov_[eax],ebx
58 #    pop_eax
 ## stdlib.c 169
50               #  push_eax              # base (local)
8D85 04000000 # lea_eax,[ebp+DWORD] %4
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # 0
B8 00000000 #   mov_eax, %0
5B                # pop_ebx               # ==
39C3 #  cmp_eax_ebx
0F94C0 #    sete_al
0FB6C0 #    movzx_eax,al
85C0           #    test_eax,eax          # if
58 #    pop_eax
0F84 %_strtoul_else1 #  je %_strtoul_else1
 ## stdlib.c 170
 ## stdlib.c 171
50               #  push_eax              # base (local)
8D85 04000000 # lea_eax,[ebp+DWORD] %4
50               #  push_eax              # 10
B8 0A000000 #   mov_eax, %10
5B                # pop_ebx               # =
8903 #  mov_[ebx],eax
58                # pop_eax               # ;
 ## stdlib.c 172
50               #  push_eax              # nptr (local)
8D85 0C000000 # lea_eax,[ebp+DWORD] %12
8B00          # mov_eax,[eax]         # ?
8A00           #    mov_al,[eax]          # ?1
0FB6C0 #    movzx_eax,al
0FBEC0           #  movsx_eax,al          # char
50               #  push_eax              # 48
B8 30000000 #   mov_eax, %48
5B                # pop_ebx               # ==
39C3 #  cmp_eax_ebx
0F94C0 #    sete_al
0FB6C0 #    movzx_eax,al
85C0           #    test_eax,eax          # if
58 #    pop_eax
0F84 %_strtoul_else2 #  je %_strtoul_else2
 ## stdlib.c 173
 ## stdlib.c 174
50               #  push_eax              # base (local)
8D85 04000000 # lea_eax,[ebp+DWORD] %4
50               #  push_eax              # 8
B8 08000000 #   mov_eax, %8
5B                # pop_ebx               # =
8903 #  mov_[ebx],eax
58                # pop_eax               # ;
 ## stdlib.c 175
50               #  push_eax              # nptr (local)
8D85 0C000000 # lea_eax,[ebp+DWORD] %12
50               #  push_eax              # $ (dup)
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # 1
B8 01000000 #   mov_eax, %1
5B                # pop_ebx               # +
01D8 #  add_eax,ebx
5B                # pop_ebx               # =
8903 #  mov_[ebx],eax
50               #  push_eax              # 1
B8 01000000 #   mov_eax, %1
5B                # pop_ebx               # -
29C3 #  sub_ebx,eax
89D8 #  mov_eax,ebx
58                # pop_eax               # ;
 ## stdlib.c 176
50               #  push_eax              # nptr (local)
8D85 0C000000 # lea_eax,[ebp+DWORD] %12
8B00          # mov_eax,[eax]         # ?
8A00           #    mov_al,[eax]          # ?1
0FB6C0 #    movzx_eax,al
0FBEC0           #  movsx_eax,al          # char
50               #  push_eax              # 120
B8 78000000 #   mov_eax, %120
5B                # pop_ebx               # ==
39C3 #  cmp_eax_ebx
0F94C0 #    sete_al
0FB6C0 #    movzx_eax,al
85C0           #    test_eax,eax          # ||
0F85 %_strtoul_or_end3 #    jne %_strtoul_or_end3
58 #    pop_eax
50               #  push_eax              # nptr (local)
8D85 0C000000 # lea_eax,[ebp+DWORD] %12
8B00          # mov_eax,[eax]         # ?
8A00           #    mov_al,[eax]          # ?1
0FB6C0 #    movzx_eax,al
0FBEC0           #  movsx_eax,al          # char
50               #  push_eax              # 88
B8 58000000 #   mov_eax, %88
5B                # pop_ebx               # ==
39C3 #  cmp_eax_ebx
0F94C0 #    sete_al
0FB6C0 #    movzx_eax,al
:_strtoul_or_end3 #:_strtoul_or_end3
85C0           #    test_eax,eax          # if
58 #    pop_eax
0F84 %_strtoul_else4 #  je %_strtoul_else4
 ## stdlib.c 177
 ## stdlib.c 178
50               #  push_eax              # base (local)
8D85 04000000 # lea_eax,[ebp+DWORD] %4
50               #  push_eax              # 16
B8 10000000 #   mov_eax, %16
5B                # pop_ebx               # =
8903 #  mov_[ebx],eax
58                # pop_eax               # ;
 ## stdlib.c 179
50               #  push_eax              # nptr (local)
8D85 0C000000 # lea_eax,[ebp+DWORD] %12
50               #  push_eax              # $ (dup)
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # 1
B8 01000000 #   mov_eax, %1
5B                # pop_ebx               # +
01D8 #  add_eax,ebx
5B                # pop_ebx               # =
8903 #  mov_[ebx],eax
50               #  push_eax              # 1
B8 01000000 #   mov_eax, %1
5B                # pop_ebx               # -
29C3 #  sub_ebx,eax
89D8 #  mov_eax,ebx
58                # pop_eax               # ;
:_strtoul_else4  #:_strtoul_else4 # no else
:_strtoul_else2  #:_strtoul_else2 # no else
:_strtoul_else1  #:_strtoul_else1 # no else
50               #  push_eax              # result (local)
8D85 10000000 # lea_eax,[ebp+DWORD] %16
50               #  push_eax              # 0
B8 00000000 #   mov_eax, %0
5B                # pop_ebx               # =
8903 #  mov_[ebx],eax
58                # pop_eax               # ;
50               #  push_eax              # sub_10 (local)
8D85 14000000 # lea_eax,[ebp+DWORD] %20
50               #  push_eax              # 48
B8 30000000 #   mov_eax, %48
50               #  push_eax              # base (local)
8D85 04000000 # lea_eax,[ebp+DWORD] %4
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # 10
B8 0A000000 #   mov_eax, %10
5B                # pop_ebx               # <s
39C3 #  cmp_eax_ebx
0F9CC0 #    setl_al
0FB6C0 #    movzx_eax,al
85C0           #    test_eax,eax          # if
58 #    pop_eax
0F84 %_strtoul_else5 #  je %_strtoul_else5
50               #  push_eax              # base (local)
8D85 04000000 # lea_eax,[ebp+DWORD] %4
8B00          # mov_eax,[eax]         # ?
E9 %_strtoul_else_end5 #    jmp %_strtoul_else_end5
:_strtoul_else5 #:_strtoul_else5
50               #  push_eax              # 10
B8 0A000000 #   mov_eax, %10
:_strtoul_else_end5 #:_strtoul_else_end5
5B                # pop_ebx               # +
01D8 #  add_eax,ebx
5B                # pop_ebx               # =1
8803 #  mov_[ebx],al
58                # pop_eax               # ;
 ## stdlib.c 185
:_strtoul_loop6 #:_strtoul_loop6
 ## stdlib.c 186
 ## stdlib.c 187
50               #  push_eax              # 48
B8 30000000 #   mov_eax, %48
50               #  push_eax              # nptr (local)
8D85 0C000000 # lea_eax,[ebp+DWORD] %12
8B00          # mov_eax,[eax]         # ?
8A00           #    mov_al,[eax]          # ?1
0FB6C0 #    movzx_eax,al
0FBEC0           #  movsx_eax,al          # char
5B                # pop_ebx               # <=s
39C3 #  cmp_eax_ebx
0F9EC0 #    setle_al
0FB6C0 #    movzx_eax,al
85C0           #    test_eax,eax          # &&
0F84 %_strtoul_and_end7 #   je %_strtoul_and_end7
58 #    pop_eax
50               #  push_eax              # nptr (local)
8D85 0C000000 # lea_eax,[ebp+DWORD] %12
8B00          # mov_eax,[eax]         # ?
8A00           #    mov_al,[eax]          # ?1
0FB6C0 #    movzx_eax,al
0FBEC0           #  movsx_eax,al          # char
50               #  push_eax              # sub_10 (local)
8D85 14000000 # lea_eax,[ebp+DWORD] %20
8A00           #    mov_al,[eax]          # ?1
0FB6C0 #    movzx_eax,al
0FBEC0           #  movsx_eax,al          # char
5B                # pop_ebx               # <s
39C3 #  cmp_eax_ebx
0F9CC0 #    setl_al
0FB6C0 #    movzx_eax,al
:_strtoul_and_end7 #:_strtoul_and_end7
85C0           #    test_eax,eax          # if
58 #    pop_eax
0F84 %_strtoul_else8 #  je %_strtoul_else8
 ## stdlib.c 188
50               #  push_eax              # result (local)
8D85 10000000 # lea_eax,[ebp+DWORD] %16
50               #  push_eax              # base (local)
8D85 04000000 # lea_eax,[ebp+DWORD] %4
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # result (local)
8D85 10000000 # lea_eax,[ebp+DWORD] %16
8B00          # mov_eax,[eax]         # ?
5B                # pop_ebx               # *
F7E3 #  mul_ebx
50               #  push_eax              # nptr (local)
8D85 0C000000 # lea_eax,[ebp+DWORD] %12
8B00          # mov_eax,[eax]         # ?
8A00           #    mov_al,[eax]          # ?1
0FB6C0 #    movzx_eax,al
0FBEC0           #  movsx_eax,al          # char
5B                # pop_ebx               # +
01D8 #  add_eax,ebx
50               #  push_eax              # 48
B8 30000000 #   mov_eax, %48
5B                # pop_ebx               # -
29C3 #  sub_ebx,eax
89D8 #  mov_eax,ebx
5B                # pop_ebx               # =
8903 #  mov_[ebx],eax
58                # pop_eax               # ;
E9 %_strtoul_else_end8 #    jmp %_strtoul_else_end8
:_strtoul_else8 #:_strtoul_else8
 ## stdlib.c 189
50               #  push_eax              # 97
B8 61000000 #   mov_eax, %97
50               #  push_eax              # nptr (local)
8D85 0C000000 # lea_eax,[ebp+DWORD] %12
8B00          # mov_eax,[eax]         # ?
8A00           #    mov_al,[eax]          # ?1
0FB6C0 #    movzx_eax,al
0FBEC0           #  movsx_eax,al          # char
5B                # pop_ebx               # <=s
39C3 #  cmp_eax_ebx
0F9EC0 #    setle_al
0FB6C0 #    movzx_eax,al
85C0           #    test_eax,eax          # &&
0F84 %_strtoul_and_end9 #   je %_strtoul_and_end9
58 #    pop_eax
50               #  push_eax              # nptr (local)
8D85 0C000000 # lea_eax,[ebp+DWORD] %12
8B00          # mov_eax,[eax]         # ?
8A00           #    mov_al,[eax]          # ?1
0FB6C0 #    movzx_eax,al
0FBEC0           #  movsx_eax,al          # char
50               #  push_eax              # 97
B8 61000000 #   mov_eax, %97
50               #  push_eax              # base (local)
8D85 04000000 # lea_eax,[ebp+DWORD] %4
8B00          # mov_eax,[eax]         # ?
5B                # pop_ebx               # +
01D8 #  add_eax,ebx
50               #  push_eax              # 10
B8 0A000000 #   mov_eax, %10
5B                # pop_ebx               # -
29C3 #  sub_ebx,eax
89D8 #  mov_eax,ebx
5B                # pop_ebx               # <s
39C3 #  cmp_eax_ebx
0F9CC0 #    setl_al
0FB6C0 #    movzx_eax,al
:_strtoul_and_end9 #:_strtoul_and_end9
85C0           #    test_eax,eax          # if
58 #    pop_eax
0F84 %_strtoul_else10 # je %_strtoul_else10
 ## stdlib.c 190
50               #  push_eax              # result (local)
8D85 10000000 # lea_eax,[ebp+DWORD] %16
50               #  push_eax              # base (local)
8D85 04000000 # lea_eax,[ebp+DWORD] %4
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # result (local)
8D85 10000000 # lea_eax,[ebp+DWORD] %16
8B00          # mov_eax,[eax]         # ?
5B                # pop_ebx               # *
F7E3 #  mul_ebx
50               #  push_eax              # nptr (local)
8D85 0C000000 # lea_eax,[ebp+DWORD] %12
8B00          # mov_eax,[eax]         # ?
8A00           #    mov_al,[eax]          # ?1
0FB6C0 #    movzx_eax,al
0FBEC0           #  movsx_eax,al          # char
5B                # pop_ebx               # +
01D8 #  add_eax,ebx
50               #  push_eax              # 97
B8 61000000 #   mov_eax, %97
5B                # pop_ebx               # -
29C3 #  sub_ebx,eax
89D8 #  mov_eax,ebx
50               #  push_eax              # 10
B8 0A000000 #   mov_eax, %10
5B                # pop_ebx               # +
01D8 #  add_eax,ebx
5B                # pop_ebx               # =
8903 #  mov_[ebx],eax
58                # pop_eax               # ;
E9 %_strtoul_else_end10 #   jmp %_strtoul_else_end10
:_strtoul_else10 #:_strtoul_else10
 ## stdlib.c 191
50               #  push_eax              # 65
B8 41000000 #   mov_eax, %65
50               #  push_eax              # nptr (local)
8D85 0C000000 # lea_eax,[ebp+DWORD] %12
8B00          # mov_eax,[eax]         # ?
8A00           #    mov_al,[eax]          # ?1
0FB6C0 #    movzx_eax,al
0FBEC0           #  movsx_eax,al          # char
5B                # pop_ebx               # <=s
39C3 #  cmp_eax_ebx
0F9EC0 #    setle_al
0FB6C0 #    movzx_eax,al
85C0           #    test_eax,eax          # &&
0F84 %_strtoul_and_end11 #  je %_strtoul_and_end11
58 #    pop_eax
50               #  push_eax              # nptr (local)
8D85 0C000000 # lea_eax,[ebp+DWORD] %12
8B00          # mov_eax,[eax]         # ?
8A00           #    mov_al,[eax]          # ?1
0FB6C0 #    movzx_eax,al
0FBEC0           #  movsx_eax,al          # char
50               #  push_eax              # 65
B8 41000000 #   mov_eax, %65
50               #  push_eax              # base (local)
8D85 04000000 # lea_eax,[ebp+DWORD] %4
8B00          # mov_eax,[eax]         # ?
5B                # pop_ebx               # +
01D8 #  add_eax,ebx
50               #  push_eax              # 10
B8 0A000000 #   mov_eax, %10
5B                # pop_ebx               # -
29C3 #  sub_ebx,eax
89D8 #  mov_eax,ebx
5B                # pop_ebx               # <s
39C3 #  cmp_eax_ebx
0F9CC0 #    setl_al
0FB6C0 #    movzx_eax,al
:_strtoul_and_end11 #:_strtoul_and_end11
85C0           #    test_eax,eax          # if
58 #    pop_eax
0F84 %_strtoul_else12 # je %_strtoul_else12
 ## stdlib.c 192
50               #  push_eax              # result (local)
8D85 10000000 # lea_eax,[ebp+DWORD] %16
50               #  push_eax              # base (local)
8D85 04000000 # lea_eax,[ebp+DWORD] %4
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # result (local)
8D85 10000000 # lea_eax,[ebp+DWORD] %16
8B00          # mov_eax,[eax]         # ?
5B                # pop_ebx               # *
F7E3 #  mul_ebx
50               #  push_eax              # nptr (local)
8D85 0C000000 # lea_eax,[ebp+DWORD] %12
8B00          # mov_eax,[eax]         # ?
8A00           #    mov_al,[eax]          # ?1
0FB6C0 #    movzx_eax,al
0FBEC0           #  movsx_eax,al          # char
5B                # pop_ebx               # +
01D8 #  add_eax,ebx
50               #  push_eax              # 65
B8 41000000 #   mov_eax, %65
5B                # pop_ebx               # -
29C3 #  sub_ebx,eax
89D8 #  mov_eax,ebx
50               #  push_eax              # 10
B8 0A000000 #   mov_eax, %10
5B                # pop_ebx               # +
01D8 #  add_eax,ebx
5B                # pop_ebx               # =
8903 #  mov_[ebx],eax
58                # pop_eax               # ;
E9 %_strtoul_else_end12 #   jmp %_strtoul_else_end12
:_strtoul_else12 #:_strtoul_else12
 ## stdlib.c 194
E9 %_strtoul_loop_end6 #    jmp %_strtoul_loop_end6
:_strtoul_else_end12 #:_strtoul_else_end12
:_strtoul_else_end10 #:_strtoul_else_end10
:_strtoul_else_end8 #:_strtoul_else_end8
50               #  push_eax              # nptr (local)
8D85 0C000000 # lea_eax,[ebp+DWORD] %12
50               #  push_eax              # $ (dup)
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # 1
B8 01000000 #   mov_eax, %1
5B                # pop_ebx               # +
01D8 #  add_eax,ebx
5B                # pop_ebx               # =
8903 #  mov_[ebx],eax
50               #  push_eax              # 1
B8 01000000 #   mov_eax, %1
5B                # pop_ebx               # -
29C3 #  sub_ebx,eax
89D8 #  mov_eax,ebx
58                # pop_eax               # ;
E9 %_strtoul_loop6 #    jmp %_strtoul_loop6
:_strtoul_loop_end6 #:_strtoul_loop_end6
 ## stdlib.c 196
50               #  push_eax              # endptr (local)
8D85 08000000 # lea_eax,[ebp+DWORD] %8
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # 0
B8 00000000 #   mov_eax, %0
5B                # pop_ebx               # !=
39C3 #  cmp_eax_ebx
0F95C0 #    setne_al
0FB6C0 #    movzx_eax,al
85C0           #    test_eax,eax          # if
58 #    pop_eax
0F84 %_strtoul_else13 # je %_strtoul_else13
 ## stdlib.c 197
50               #  push_eax              # endptr (local)
8D85 08000000 # lea_eax,[ebp+DWORD] %8
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # nptr (local)
8D85 0C000000 # lea_eax,[ebp+DWORD] %12
8B00          # mov_eax,[eax]         # ?
5B                # pop_ebx               # =
8903 #  mov_[ebx],eax
58                # pop_eax               # ;
 ## stdlib.c 198
:_strtoul_else13  #:_strtoul_else13 # no else
50               #  push_eax              # result (local)
8D85 10000000 # lea_eax,[ebp+DWORD] %16
8B00          # mov_eax,[eax]         # ?
8B5D00          #   mov_ebx,[ebp]         # return
53 #    push_ebx
C3 #    ret
50               #  push_eax              # 0
B8 00000000 #   mov_eax, %0
8B5D00          #   mov_ebx,[ebp]         # return
53 #    push_ebx
C3 #    ret
 #
:f_strtol #:f_strtol
58 #    pop_eax
894500 #    mov_[ebp],eax
58 #    pop_eax
50               #  push_eax              # base (local)
8D85 04000000 # lea_eax,[ebp+DWORD] %4
5B                # pop_ebx               # =:
8918 #  mov_[eax],ebx
58 #    pop_eax
50               #  push_eax              # endptr (local)
8D85 08000000 # lea_eax,[ebp+DWORD] %8
5B                # pop_ebx               # =:
8918 #  mov_[eax],ebx
58 #    pop_eax
50               #  push_eax              # nptr (local)
8D85 0C000000 # lea_eax,[ebp+DWORD] %12
5B                # pop_ebx               # =:
8918 #  mov_[eax],ebx
58 #    pop_eax
50               #  push_eax              # sign (local)
8D85 10000000 # lea_eax,[ebp+DWORD] %16
50               #  push_eax              # 1
B8 01000000 #   mov_eax, %1
5B                # pop_ebx               # =
8903 #  mov_[ebx],eax
58                # pop_eax               # ;
 ## stdlib.c 204
50               #  push_eax              # nptr (local)
8D85 0C000000 # lea_eax,[ebp+DWORD] %12
8B00          # mov_eax,[eax]         # ?
8A00           #    mov_al,[eax]          # ?1
0FB6C0 #    movzx_eax,al
0FBEC0           #  movsx_eax,al          # char
50               #  push_eax              # 45
B8 2D000000 #   mov_eax, %45
5B                # pop_ebx               # ==
39C3 #  cmp_eax_ebx
0F94C0 #    sete_al
0FB6C0 #    movzx_eax,al
85C0           #    test_eax,eax          # if
58 #    pop_eax
0F84 %_strtol_else1 #   je %_strtol_else1
 ## stdlib.c 205
 ## stdlib.c 206
50               #  push_eax              # sign (local)
8D85 10000000 # lea_eax,[ebp+DWORD] %16
50               #  push_eax              # 4294967295
B8 FFFFFFFF #   mov_eax, %4294967295
5B                # pop_ebx               # =
8903 #  mov_[ebx],eax
58                # pop_eax               # ;
 ## stdlib.c 207
50               #  push_eax              # nptr (local)
8D85 0C000000 # lea_eax,[ebp+DWORD] %12
50               #  push_eax              # $ (dup)
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # 1
B8 01000000 #   mov_eax, %1
5B                # pop_ebx               # +
01D8 #  add_eax,ebx
5B                # pop_ebx               # =
8903 #  mov_[ebx],eax
50               #  push_eax              # 1
B8 01000000 #   mov_eax, %1
5B                # pop_ebx               # -
29C3 #  sub_ebx,eax
89D8 #  mov_eax,ebx
58                # pop_eax               # ;
 ## stdlib.c 209
:_strtol_else1  #:_strtol_else1 # no else
50               #  push_eax              # sign (local)
8D85 10000000 # lea_eax,[ebp+DWORD] %16
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # nptr (local)
8D85 0C000000 # lea_eax,[ebp+DWORD] %12
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # endptr (local)
8D85 08000000 # lea_eax,[ebp+DWORD] %8
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # base (local)
8D85 04000000 # lea_eax,[ebp+DWORD] %4
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # strtoul (function)
B8 &f_strtoul # mov_eax, &f_strtoul
81C5 14000000          #    add_ebp, %20         # ()
FFD0 #  call_eax
81ED 14000000 # sub_ebp, %20
5B                # pop_ebx               # *
F7E3 #  mul_ebx
8B5D00          #   mov_ebx,[ebp]         # return
53 #    push_ebx
C3 #    ret
50               #  push_eax              # 0
B8 00000000 #   mov_eax, %0
8B5D00          #   mov_ebx,[ebp]         # return
53 #    push_ebx
C3 #    ret
 #
:f_strtoll #:f_strtoll
58 #    pop_eax
894500 #    mov_[ebp],eax
58 #    pop_eax
50               #  push_eax              # base (local)
8D85 04000000 # lea_eax,[ebp+DWORD] %4
5B                # pop_ebx               # =:
8918 #  mov_[eax],ebx
58 #    pop_eax
50               #  push_eax              # endptr (local)
8D85 08000000 # lea_eax,[ebp+DWORD] %8
5B                # pop_ebx               # =:
8918 #  mov_[eax],ebx
58 #    pop_eax
50               #  push_eax              # nptr (local)
8D85 0C000000 # lea_eax,[ebp+DWORD] %12
5B                # pop_ebx               # =:
8918 #  mov_[eax],ebx
58 #    pop_eax
 ## stdlib.c 214
50               #  push_eax              # nptr (local)
8D85 0C000000 # lea_eax,[ebp+DWORD] %12
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # endptr (local)
8D85 08000000 # lea_eax,[ebp+DWORD] %8
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # base (local)
8D85 04000000 # lea_eax,[ebp+DWORD] %4
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # strtol (function)
B8 &f_strtol #  mov_eax, &f_strtol
81C5 10000000          #    add_ebp, %16         # ()
FFD0 #  call_eax
81ED 10000000 # sub_ebp, %16
8B5D00          #   mov_ebx,[ebp]         # return
53 #    push_ebx
C3 #    ret
50               #  push_eax              # 0
B8 00000000 #   mov_eax, %0
8B5D00          #   mov_ebx,[ebp]         # return
53 #    push_ebx
C3 #    ret
 #
:f_strtoull #:f_strtoull
58 #    pop_eax
894500 #    mov_[ebp],eax
58 #    pop_eax
50               #  push_eax              # base (local)
8D85 04000000 # lea_eax,[ebp+DWORD] %4
5B                # pop_ebx               # =:
8918 #  mov_[eax],ebx
58 #    pop_eax
50               #  push_eax              # endptr (local)
8D85 08000000 # lea_eax,[ebp+DWORD] %8
5B                # pop_ebx               # =:
8918 #  mov_[eax],ebx
58 #    pop_eax
50               #  push_eax              # nptr (local)
8D85 0C000000 # lea_eax,[ebp+DWORD] %12
5B                # pop_ebx               # =:
8918 #  mov_[eax],ebx
58 #    pop_eax
 ## stdlib.c 219
50               #  push_eax              # nptr (local)
8D85 0C000000 # lea_eax,[ebp+DWORD] %12
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # endptr (local)
8D85 08000000 # lea_eax,[ebp+DWORD] %8
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # base (local)
8D85 04000000 # lea_eax,[ebp+DWORD] %4
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # strtoul (function)
B8 &f_strtoul # mov_eax, &f_strtoul
81C5 10000000          #    add_ebp, %16         # ()
FFD0 #  call_eax
81ED 10000000 # sub_ebp, %16
8B5D00          #   mov_ebx,[ebp]         # return
53 #    push_ebx
C3 #    ret
50               #  push_eax              # 0
B8 00000000 #   mov_eax, %0
8B5D00          #   mov_ebx,[ebp]         # return
53 #    push_ebx
C3 #    ret
 #
:f_strtof #:f_strtof
58 #    pop_eax
894500 #    mov_[ebp],eax
58 #    pop_eax
50               #  push_eax              # endptr (local)
8D85 04000000 # lea_eax,[ebp+DWORD] %4
5B                # pop_ebx               # =:
8918 #  mov_[eax],ebx
58 #    pop_eax
50               #  push_eax              # str (local)
8D85 08000000 # lea_eax,[ebp+DWORD] %8
5B                # pop_ebx               # =:
8918 #  mov_[eax],ebx
58 #    pop_eax
 ## stdlib.c 225
50               #  push_eax              # endptr (local)
8D85 04000000 # lea_eax,[ebp+DWORD] %4
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # str (local)
8D85 08000000 # lea_eax,[ebp+DWORD] %8
8B00          # mov_eax,[eax]         # ?
5B                # pop_ebx               # =
8903 #  mov_[ebx],eax
58                # pop_eax               # ;
 ## stdlib.c 226
50               #  push_eax              # 0
B8 00000000 #   mov_eax, %0
8B5D00          #   mov_ebx,[ebp]         # return
53 #    push_ebx
C3 #    ret
50               #  push_eax              # 0
B8 00000000 #   mov_eax, %0
8B5D00          #   mov_ebx,[ebp]         # return
53 #    push_ebx
C3 #    ret
 #
:f_malloc #:f_malloc
58 #    pop_eax
894500 #    mov_[ebp],eax
58 #    pop_eax
50               #  push_eax              # size (local)
8D85 04000000 # lea_eax,[ebp+DWORD] %4
5B                # pop_ebx               # =:
8918 #  mov_[eax],ebx
58 #    pop_eax
 ## stdlib.c 231
50               #  push_eax              # size (local)
8D85 04000000 # lea_eax,[ebp+DWORD] %4
50               #  push_eax              # size (local)
8D85 04000000 # lea_eax,[ebp+DWORD] %4
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # 3
B8 03000000 #   mov_eax, %3
5B                # pop_ebx               # +
01D8 #  add_eax,ebx
50               #  push_eax              # 3
B8 03000000 #   mov_eax, %3
F7D0                #   not_eax               # ~
5B                # pop_ebx               # &
21D8 #  and_eax,ebx
5B                # pop_ebx               # =
8903 #  mov_[ebx],eax
58                # pop_eax               # ;
50               #  push_eax              # result (local)
8D85 08000000 # lea_eax,[ebp+DWORD] %8
50               #  push_eax              # size (local)
8D85 04000000 # lea_eax,[ebp+DWORD] %4
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # 4
B8 04000000 #   mov_eax, %4
5B                # pop_ebx               # +
01D8 #  add_eax,ebx
50               #  push_eax              # sys_malloc (function)
B8 &f_sys_malloc #  mov_eax, &f_sys_malloc
81C5 0C000000          #    add_ebp, %12         # ()
FFD0 #  call_eax
81ED 0C000000 # sub_ebp, %12
5B                # pop_ebx               # =
8903 #  mov_[ebx],eax
58                # pop_eax               # ;
 ## stdlib.c 233
50               #  push_eax              # result (local)
8D85 08000000 # lea_eax,[ebp+DWORD] %8
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # size (local)
8D85 04000000 # lea_eax,[ebp+DWORD] %4
8B00          # mov_eax,[eax]         # ?
5B                # pop_ebx               # =
8903 #  mov_[ebx],eax
58                # pop_eax               # ;
 ## stdlib.c 234
50               #  push_eax              # result (local)
8D85 08000000 # lea_eax,[ebp+DWORD] %8
50               #  push_eax              # $ (dup)
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # 4
B8 04000000 #   mov_eax, %4
5B                # pop_ebx               # +
01D8 #  add_eax,ebx
5B                # pop_ebx               # =
8903 #  mov_[ebx],eax
50               #  push_eax              # 4
B8 04000000 #   mov_eax, %4
5B                # pop_ebx               # -
29C3 #  sub_ebx,eax
89D8 #  mov_eax,ebx
58                # pop_eax               # ;
 ## stdlib.c 235
50               #  push_eax              # result (local)
8D85 08000000 # lea_eax,[ebp+DWORD] %8
8B00          # mov_eax,[eax]         # ?
8B5D00          #   mov_ebx,[ebp]         # return
53 #    push_ebx
C3 #    ret
50               #  push_eax              # 0
B8 00000000 #   mov_eax, %0
8B5D00          #   mov_ebx,[ebp]         # return
53 #    push_ebx
C3 #    ret
 #
:f_realloc #:f_realloc
58 #    pop_eax
894500 #    mov_[ebp],eax
58 #    pop_eax
50               #  push_eax              # size (local)
8D85 04000000 # lea_eax,[ebp+DWORD] %4
5B                # pop_ebx               # =:
8918 #  mov_[eax],ebx
58 #    pop_eax
50               #  push_eax              # ptr (local)
8D85 08000000 # lea_eax,[ebp+DWORD] %8
5B                # pop_ebx               # =:
8918 #  mov_[eax],ebx
58 #    pop_eax
50               #  push_eax              # result (local)
8D85 0C000000 # lea_eax,[ebp+DWORD] %12
50               #  push_eax              # size (local)
8D85 04000000 # lea_eax,[ebp+DWORD] %4
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # malloc (function)
B8 &f_malloc #  mov_eax, &f_malloc
81C5 10000000          #    add_ebp, %16         # ()
FFD0 #  call_eax
81ED 10000000 # sub_ebp, %16
5B                # pop_ebx               # =
8903 #  mov_[ebx],eax
58                # pop_eax               # ;
 ## stdlib.c 241
50               #  push_eax              # ptr (local)
8D85 08000000 # lea_eax,[ebp+DWORD] %8
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # 0
B8 00000000 #   mov_eax, %0
5B                # pop_ebx               # !=
39C3 #  cmp_eax_ebx
0F95C0 #    setne_al
0FB6C0 #    movzx_eax,al
85C0           #    test_eax,eax          # if
58 #    pop_eax
0F84 %_realloc_else1 #  je %_realloc_else1
 ## stdlib.c 242
50               #  push_eax              # old_ptr (local)
8D85 10000000 # lea_eax,[ebp+DWORD] %16
50               #  push_eax              # ptr (local)
8D85 08000000 # lea_eax,[ebp+DWORD] %8
8B00          # mov_eax,[eax]         # ?
5B                # pop_ebx               # =
8903 #  mov_[ebx],eax
58                # pop_eax               # ;
50               #  push_eax              # old_size (local)
8D85 14000000 # lea_eax,[ebp+DWORD] %20
50               #  push_eax              # old_ptr (local)
8D85 10000000 # lea_eax,[ebp+DWORD] %16
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # 4294967295
B8 FFFFFFFF #   mov_eax, %4294967295
50               #  push_eax              # 4
B8 04000000 #   mov_eax, %4
5B                # pop_ebx               # *
F7E3 #  mul_ebx
5B                # pop_ebx               # +
01D8 #  add_eax,ebx
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # 4
B8 04000000 #   mov_eax, %4
89C3            #   mov_ebx,eax           # /s
58 #    pop_eax
99 #    cdq
F7FB #  idiv_ebx
5B                # pop_ebx               # =
8903 #  mov_[ebx],eax
58                # pop_eax               # ;
 ## stdlib.c 245
50               #  push_eax              # i (local)
8D85 18000000 # lea_eax,[ebp+DWORD] %24
50               #  push_eax              # 0
B8 00000000 #   mov_eax, %0
5B                # pop_ebx               # =
8903 #  mov_[ebx],eax
58                # pop_eax               # ;
:_realloc_loop2 #:_realloc_loop2
50               #  push_eax              # i (local)
8D85 18000000 # lea_eax,[ebp+DWORD] %24
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # old_size (local)
8D85 14000000 # lea_eax,[ebp+DWORD] %20
8B00          # mov_eax,[eax]         # ?
5B                # pop_ebx               # <s
39C3 #  cmp_eax_ebx
0F9CC0 #    setl_al
0FB6C0 #    movzx_eax,al
85C0           #    test_eax,eax          # !
0F94C0 #    sete_al
0FB6C0 #    movzx_eax,al
85C0           #    test_eax,eax          # if
58 #    pop_eax
0F84 %_realloc_else3 #  je %_realloc_else3
E9 %_realloc_loop_end2 #    jmp %_realloc_loop_end2
 ## stdlib.c 246
:_realloc_else3  #:_realloc_else3 # no else
50               #  push_eax              # result (local)
8D85 0C000000 # lea_eax,[ebp+DWORD] %12
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # i (local)
8D85 18000000 # lea_eax,[ebp+DWORD] %24
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # 4
B8 04000000 #   mov_eax, %4
5B                # pop_ebx               # *
F7E3 #  mul_ebx
5B                # pop_ebx               # +
01D8 #  add_eax,ebx
50               #  push_eax              # old_ptr (local)
8D85 10000000 # lea_eax,[ebp+DWORD] %16
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # i (local)
8D85 18000000 # lea_eax,[ebp+DWORD] %24
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # 4
B8 04000000 #   mov_eax, %4
5B                # pop_ebx               # *
F7E3 #  mul_ebx
5B                # pop_ebx               # +
01D8 #  add_eax,ebx
8B00          # mov_eax,[eax]         # ?
5B                # pop_ebx               # =
8903 #  mov_[ebx],eax
58                # pop_eax               # ;
50               #  push_eax              # i (local)
8D85 18000000 # lea_eax,[ebp+DWORD] %24
50               #  push_eax              # $ (dup)
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # 1
B8 01000000 #   mov_eax, %1
5B                # pop_ebx               # +
01D8 #  add_eax,ebx
5B                # pop_ebx               # =
8903 #  mov_[ebx],eax
50               #  push_eax              # 1
B8 01000000 #   mov_eax, %1
5B                # pop_ebx               # -
29C3 #  sub_ebx,eax
89D8 #  mov_eax,ebx
58                # pop_eax               # ;
E9 %_realloc_loop2 #    jmp %_realloc_loop2
:_realloc_loop_end2 #:_realloc_loop_end2
 ## stdlib.c 248
:_realloc_else1  #:_realloc_else1 # no else
50               #  push_eax              # result (local)
8D85 0C000000 # lea_eax,[ebp+DWORD] %12
8B00          # mov_eax,[eax]         # ?
8B5D00          #   mov_ebx,[ebp]         # return
53 #    push_ebx
C3 #    ret
50               #  push_eax              # 0
B8 00000000 #   mov_eax, %0
8B5D00          #   mov_ebx,[ebp]         # return
53 #    push_ebx
C3 #    ret
 #
:f_calloc #:f_calloc
58 #    pop_eax
894500 #    mov_[ebp],eax
58 #    pop_eax
50               #  push_eax              # S (local)
8D85 04000000 # lea_eax,[ebp+DWORD] %4
5B                # pop_ebx               # =:
8918 #  mov_[eax],ebx
58 #    pop_eax
50               #  push_eax              # N (local)
8D85 08000000 # lea_eax,[ebp+DWORD] %8
5B                # pop_ebx               # =:
8918 #  mov_[eax],ebx
58 #    pop_eax
50               #  push_eax              # len (local)
8D85 0C000000 # lea_eax,[ebp+DWORD] %12
50               #  push_eax              # N (local)
8D85 08000000 # lea_eax,[ebp+DWORD] %8
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # S (local)
8D85 04000000 # lea_eax,[ebp+DWORD] %4
8B00          # mov_eax,[eax]         # ?
5B                # pop_ebx               # *
F7E3 #  mul_ebx
5B                # pop_ebx               # =
8903 #  mov_[ebx],eax
58                # pop_eax               # ;
50               #  push_eax              # r (local)
8D85 10000000 # lea_eax,[ebp+DWORD] %16
50               #  push_eax              # len (local)
8D85 0C000000 # lea_eax,[ebp+DWORD] %12
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # malloc (function)
B8 &f_malloc #  mov_eax, &f_malloc
81C5 14000000          #    add_ebp, %20         # ()
FFD0 #  call_eax
81ED 14000000 # sub_ebp, %20
5B                # pop_ebx               # =
8903 #  mov_[ebx],eax
58                # pop_eax               # ;
 ## stdlib.c 255
50               #  push_eax              # i (local)
8D85 14000000 # lea_eax,[ebp+DWORD] %20
50               #  push_eax              # 0
B8 00000000 #   mov_eax, %0
5B                # pop_ebx               # =
8903 #  mov_[ebx],eax
58                # pop_eax               # ;
:_calloc_loop1 #:_calloc_loop1
50               #  push_eax              # i (local)
8D85 14000000 # lea_eax,[ebp+DWORD] %20
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # len (local)
8D85 0C000000 # lea_eax,[ebp+DWORD] %12
8B00          # mov_eax,[eax]         # ?
5B                # pop_ebx               # <s
39C3 #  cmp_eax_ebx
0F9CC0 #    setl_al
0FB6C0 #    movzx_eax,al
85C0           #    test_eax,eax          # !
0F94C0 #    sete_al
0FB6C0 #    movzx_eax,al
85C0           #    test_eax,eax          # if
58 #    pop_eax
0F84 %_calloc_else2 #   je %_calloc_else2
E9 %_calloc_loop_end1 # jmp %_calloc_loop_end1
 ## stdlib.c 256
:_calloc_else2  #:_calloc_else2 # no else
50               #  push_eax              # r (local)
8D85 10000000 # lea_eax,[ebp+DWORD] %16
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # i (local)
8D85 14000000 # lea_eax,[ebp+DWORD] %20
8B00          # mov_eax,[eax]         # ?
5B                # pop_ebx               # +
01D8 #  add_eax,ebx
50               #  push_eax              # 0
B8 00000000 #   mov_eax, %0
5B                # pop_ebx               # =1
8803 #  mov_[ebx],al
58                # pop_eax               # ;
50               #  push_eax              # i (local)
8D85 14000000 # lea_eax,[ebp+DWORD] %20
50               #  push_eax              # $ (dup)
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # 1
B8 01000000 #   mov_eax, %1
5B                # pop_ebx               # +
01D8 #  add_eax,ebx
5B                # pop_ebx               # =
8903 #  mov_[ebx],eax
50               #  push_eax              # 1
B8 01000000 #   mov_eax, %1
5B                # pop_ebx               # -
29C3 #  sub_ebx,eax
89D8 #  mov_eax,ebx
58                # pop_eax               # ;
E9 %_calloc_loop1 # jmp %_calloc_loop1
:_calloc_loop_end1 #:_calloc_loop_end1
 ## stdlib.c 257
50               #  push_eax              # r (local)
8D85 10000000 # lea_eax,[ebp+DWORD] %16
8B00          # mov_eax,[eax]         # ?
8B5D00          #   mov_ebx,[ebp]         # return
53 #    push_ebx
C3 #    ret
50               #  push_eax              # 0
B8 00000000 #   mov_eax, %0
8B5D00          #   mov_ebx,[ebp]         # return
53 #    push_ebx
C3 #    ret
 #
:f_free #:f_free
58 #    pop_eax
894500 #    mov_[ebp],eax
58 #    pop_eax
50               #  push_eax              # ptr (local)
8D85 04000000 # lea_eax,[ebp+DWORD] %4
5B                # pop_ebx               # =:
8918 #  mov_[eax],ebx
58 #    pop_eax
 ## stdlib.c 263
50               #  push_eax              # 0
B8 00000000 #   mov_eax, %0
8B5D00          #   mov_ebx,[ebp]         # return
53 #    push_ebx
C3 #    ret
50               #  push_eax              # 0
B8 00000000 #   mov_eax, %0
8B5D00          #   mov_ebx,[ebp]         # return
53 #    push_ebx
C3 #    ret
 #
:f_fwrite #:f_fwrite
58 #    pop_eax
894500 #    mov_[ebp],eax
58 #    pop_eax
50               #  push_eax              # stream (local)
8D85 04000000 # lea_eax,[ebp+DWORD] %4
5B                # pop_ebx               # =:
8918 #  mov_[eax],ebx
58 #    pop_eax
50               #  push_eax              # nmemb (local)
8D85 08000000 # lea_eax,[ebp+DWORD] %8
5B                # pop_ebx               # =:
8918 #  mov_[eax],ebx
58 #    pop_eax
50               #  push_eax              # size (local)
8D85 0C000000 # lea_eax,[ebp+DWORD] %12
5B                # pop_ebx               # =:
8918 #  mov_[eax],ebx
58 #    pop_eax
50               #  push_eax              # ptr (local)
8D85 10000000 # lea_eax,[ebp+DWORD] %16
5B                # pop_ebx               # =:
8918 #  mov_[eax],ebx
58 #    pop_eax
 ## stdlib.c 268
50               #  push_eax              # 4
B8 04000000 #   mov_eax, %4
50               #  push_eax              # stream (local)
8D85 04000000 # lea_eax,[ebp+DWORD] %4
8B00          # mov_eax,[eax]         # ->
81C0 00000000 # add_eax, %0
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # ptr (local)
8D85 10000000 # lea_eax,[ebp+DWORD] %16
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # size (local)
8D85 0C000000 # lea_eax,[ebp+DWORD] %12
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # nmemb (local)
8D85 08000000 # lea_eax,[ebp+DWORD] %8
8B00          # mov_eax,[eax]         # ?
5B                # pop_ebx               # *
F7E3 #  mul_ebx
50               #  push_eax              # sys_int80 (function)
B8 &f_sys_int80 #   mov_eax, &f_sys_int80
81C5 14000000          #    add_ebp, %20         # ()
FFD0 #  call_eax
81ED 14000000 # sub_ebp, %20
8B5D00          #   mov_ebx,[ebp]         # return
53 #    push_ebx
C3 #    ret
50               #  push_eax              # 0
B8 00000000 #   mov_eax, %0
8B5D00          #   mov_ebx,[ebp]         # return
53 #    push_ebx
C3 #    ret
 #
:f_fputc #:f_fputc
58 #    pop_eax
894500 #    mov_[ebp],eax
58 #    pop_eax
50               #  push_eax              # stream (local)
8D85 04000000 # lea_eax,[ebp+DWORD] %4
5B                # pop_ebx               # =:
8918 #  mov_[eax],ebx
58 #    pop_eax
50               #  push_eax              # c (local)
8D85 08000000 # lea_eax,[ebp+DWORD] %8
5B                # pop_ebx               # =:
8918 #  mov_[eax],ebx
58 #    pop_eax
 ## stdlib.c 273
50               #  push_eax              # 4
B8 04000000 #   mov_eax, %4
50               #  push_eax              # stream (local)
8D85 04000000 # lea_eax,[ebp+DWORD] %4
8B00          # mov_eax,[eax]         # ->
81C0 00000000 # add_eax, %0
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # c (local)
8D85 08000000 # lea_eax,[ebp+DWORD] %8
50               #  push_eax              # 1
B8 01000000 #   mov_eax, %1
50               #  push_eax              # sys_int80 (function)
B8 &f_sys_int80 #   mov_eax, &f_sys_int80
81C5 0C000000          #    add_ebp, %12         # ()
FFD0 #  call_eax
81ED 0C000000 # sub_ebp, %12
8B5D00          #   mov_ebx,[ebp]         # return
53 #    push_ebx
C3 #    ret
50               #  push_eax              # 0
B8 00000000 #   mov_eax, %0
8B5D00          #   mov_ebx,[ebp]         # return
53 #    push_ebx
C3 #    ret
 #
:f_fputs #:f_fputs
58 #    pop_eax
894500 #    mov_[ebp],eax
58 #    pop_eax
50               #  push_eax              # stream (local)
8D85 04000000 # lea_eax,[ebp+DWORD] %4
5B                # pop_ebx               # =:
8918 #  mov_[eax],ebx
58 #    pop_eax
50               #  push_eax              # s (local)
8D85 08000000 # lea_eax,[ebp+DWORD] %8
5B                # pop_ebx               # =:
8918 #  mov_[eax],ebx
58 #    pop_eax
 ## stdlib.c 278
50               #  push_eax              # 4
B8 04000000 #   mov_eax, %4
50               #  push_eax              # stream (local)
8D85 04000000 # lea_eax,[ebp+DWORD] %4
8B00          # mov_eax,[eax]         # ->
81C0 00000000 # add_eax, %0
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # s (local)
8D85 08000000 # lea_eax,[ebp+DWORD] %8
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # s (local)
8D85 08000000 # lea_eax,[ebp+DWORD] %8
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # strlen (function)
B8 &f_strlen #  mov_eax, &f_strlen
81C5 0C000000          #    add_ebp, %12         # ()
FFD0 #  call_eax
81ED 0C000000 # sub_ebp, %12
50               #  push_eax              # sys_int80 (function)
B8 &f_sys_int80 #   mov_eax, &f_sys_int80
81C5 0C000000          #    add_ebp, %12         # ()
FFD0 #  call_eax
81ED 0C000000 # sub_ebp, %12
8B5D00          #   mov_ebx,[ebp]         # return
53 #    push_ebx
C3 #    ret
50               #  push_eax              # 0
B8 00000000 #   mov_eax, %0
8B5D00          #   mov_ebx,[ebp]         # return
53 #    push_ebx
C3 #    ret
 #
:f___sys_printf #:f___sys_printf
58 #    pop_eax
894500 #    mov_[ebp],eax
58 #    pop_eax
50               #  push_eax              # args (local)
8D85 04000000 # lea_eax,[ebp+DWORD] %4
5B                # pop_ebx               # =:
8918 #  mov_[eax],ebx
58 #    pop_eax
50               #  push_eax              # format (local)
8D85 08000000 # lea_eax,[ebp+DWORD] %8
5B                # pop_ebx               # =:
8918 #  mov_[eax],ebx
58 #    pop_eax
50               #  push_eax              # len (local)
8D85 0C000000 # lea_eax,[ebp+DWORD] %12
5B                # pop_ebx               # =:
8918 #  mov_[eax],ebx
58 #    pop_eax
50               #  push_eax              # trg (local)
8D85 10000000 # lea_eax,[ebp+DWORD] %16
5B                # pop_ebx               # =:
8918 #  mov_[eax],ebx
58 #    pop_eax
50               #  push_eax              # stream (local)
8D85 14000000 # lea_eax,[ebp+DWORD] %20
5B                # pop_ebx               # =:
8918 #  mov_[eax],ebx
58 #    pop_eax
50               #  push_eax              # l (local)
8D85 2C000000 # lea_eax,[ebp+DWORD] %44
50               #  push_eax              # 0
B8 00000000 #   mov_eax, %0
5B                # pop_ebx               # =
8903 #  mov_[ebx],eax
58                # pop_eax               # ;
50               #  push_eax              # cnt (local)
8D85 34000000 # lea_eax,[ebp+DWORD] %52
50               #  push_eax              # 0
B8 00000000 #   mov_eax, %0
5B                # pop_ebx               # =
8903 #  mov_[ebx],eax
58                # pop_eax               # ;
50               #  push_eax              # org_format (local)
8D85 38000000 # lea_eax,[ebp+DWORD] %56
50               #  push_eax              # format (local)
8D85 08000000 # lea_eax,[ebp+DWORD] %8
8B00          # mov_eax,[eax]         # ?
5B                # pop_ebx               # =
8903 #  mov_[ebx],eax
58                # pop_eax               # ;
 ## stdlib.c 292
:___sys_printf_loop1 #:___sys_printf_loop1
 ## stdlib.c 293
 ## stdlib.c 294
50               #  push_eax              # len (local)
8D85 0C000000 # lea_eax,[ebp+DWORD] %12
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # 0
B8 00000000 #   mov_eax, %0
5B                # pop_ebx               # ==
39C3 #  cmp_eax_ebx
0F94C0 #    sete_al
0FB6C0 #    movzx_eax,al
85C0           #    test_eax,eax          # if
58 #    pop_eax
0F84 %___sys_printf_else2 # je %___sys_printf_else2
 ## stdlib.c 295
E9 %___sys_printf_loop_end1 #   jmp %___sys_printf_loop_end1
 ## stdlib.c 296
:___sys_printf_else2  #:___sys_printf_else2 # no else
50               #  push_eax              # l (local)
8D85 2C000000 # lea_eax,[ebp+DWORD] %44
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # 0
B8 00000000 #   mov_eax, %0
5B                # pop_ebx               # >s
39C3 #  cmp_eax_ebx
0F9FC0 #    setg_al
0FB6C0 #    movzx_eax,al
85C0           #    test_eax,eax          # if
58 #    pop_eax
0F84 %___sys_printf_else3 # je %___sys_printf_else3
 ## stdlib.c 297
 ## stdlib.c 298
50               #  push_eax              # stream (local)
8D85 14000000 # lea_eax,[ebp+DWORD] %20
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # 0
B8 00000000 #   mov_eax, %0
5B                # pop_ebx               # !=
39C3 #  cmp_eax_ebx
0F95C0 #    setne_al
0FB6C0 #    movzx_eax,al
85C0           #    test_eax,eax          # if
58 #    pop_eax
0F84 %___sys_printf_else4 # je %___sys_printf_else4
 ## stdlib.c 299
50               #  push_eax              # s (local)
8D85 30000000 # lea_eax,[ebp+DWORD] %48
8B00          # mov_eax,[eax]         # ?
8A00           #    mov_al,[eax]          # ?1
0FB6C0 #    movzx_eax,al
0FBEC0           #  movsx_eax,al          # char
50               #  push_eax              # stream (local)
8D85 14000000 # lea_eax,[ebp+DWORD] %20
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # fputc (function)
B8 &f_fputc #   mov_eax, &f_fputc
81C5 3C000000          #    add_ebp, %60         # ()
FFD0 #  call_eax
81ED 3C000000 # sub_ebp, %60
58                # pop_eax               # ;
E9 %___sys_printf_else_end4 #   jmp %___sys_printf_else_end4
:___sys_printf_else4 #:___sys_printf_else4
 ## stdlib.c 300
50               #  push_eax              # trg (local)
8D85 10000000 # lea_eax,[ebp+DWORD] %16
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # 0
B8 00000000 #   mov_eax, %0
5B                # pop_ebx               # !=
39C3 #  cmp_eax_ebx
0F95C0 #    setne_al
0FB6C0 #    movzx_eax,al
85C0           #    test_eax,eax          # if
58 #    pop_eax
0F84 %___sys_printf_else5 # je %___sys_printf_else5
 ## stdlib.c 301
50               #  push_eax              # trg (local)
8D85 10000000 # lea_eax,[ebp+DWORD] %16
50               #  push_eax              # $ (dup)
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # 1
B8 01000000 #   mov_eax, %1
5B                # pop_ebx               # +
01D8 #  add_eax,ebx
5B                # pop_ebx               # =
8903 #  mov_[ebx],eax
50               #  push_eax              # 1
B8 01000000 #   mov_eax, %1
5B                # pop_ebx               # -
29C3 #  sub_ebx,eax
89D8 #  mov_eax,ebx
50               #  push_eax              # s (local)
8D85 30000000 # lea_eax,[ebp+DWORD] %48
8B00          # mov_eax,[eax]         # ?
8A00           #    mov_al,[eax]          # ?1
0FB6C0 #    movzx_eax,al
0FBEC0           #  movsx_eax,al          # char
5B                # pop_ebx               # =1
8803 #  mov_[ebx],al
58                # pop_eax               # ;
:___sys_printf_else5  #:___sys_printf_else5 # no else
:___sys_printf_else_end4 #:___sys_printf_else_end4
 ## stdlib.c 302
50               #  push_eax              # s (local)
8D85 30000000 # lea_eax,[ebp+DWORD] %48
50               #  push_eax              # $ (dup)
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # 1
B8 01000000 #   mov_eax, %1
5B                # pop_ebx               # +
01D8 #  add_eax,ebx
5B                # pop_ebx               # =
8903 #  mov_[ebx],eax
50               #  push_eax              # 1
B8 01000000 #   mov_eax, %1
5B                # pop_ebx               # -
29C3 #  sub_ebx,eax
89D8 #  mov_eax,ebx
58                # pop_eax               # ;
 ## stdlib.c 303
50               #  push_eax              # l (local)
8D85 2C000000 # lea_eax,[ebp+DWORD] %44
50               #  push_eax              # $ (dup)
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # 1
B8 01000000 #   mov_eax, %1
5B                # pop_ebx               # -
29C3 #  sub_ebx,eax
89D8 #  mov_eax,ebx
5B                # pop_ebx               # =
8903 #  mov_[ebx],eax
50               #  push_eax              # 1
B8 01000000 #   mov_eax, %1
5B                # pop_ebx               # +
01D8 #  add_eax,ebx
58                # pop_eax               # ;
 ## stdlib.c 304
50               #  push_eax              # cnt (local)
8D85 34000000 # lea_eax,[ebp+DWORD] %52
50               #  push_eax              # $ (dup)
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # 1
B8 01000000 #   mov_eax, %1
5B                # pop_ebx               # +
01D8 #  add_eax,ebx
5B                # pop_ebx               # =
8903 #  mov_[ebx],eax
50               #  push_eax              # 1
B8 01000000 #   mov_eax, %1
5B                # pop_ebx               # -
29C3 #  sub_ebx,eax
89D8 #  mov_eax,ebx
58                # pop_eax               # ;
 ## stdlib.c 305
50               #  push_eax              # len (local)
8D85 0C000000 # lea_eax,[ebp+DWORD] %12
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # 0
B8 00000000 #   mov_eax, %0
5B                # pop_ebx               # >s
39C3 #  cmp_eax_ebx
0F9FC0 #    setg_al
0FB6C0 #    movzx_eax,al
85C0           #    test_eax,eax          # if
58 #    pop_eax
0F84 %___sys_printf_else6 # je %___sys_printf_else6
 ## stdlib.c 306
50               #  push_eax              # len (local)
8D85 0C000000 # lea_eax,[ebp+DWORD] %12
50               #  push_eax              # $ (dup)
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # 1
B8 01000000 #   mov_eax, %1
5B                # pop_ebx               # -
29C3 #  sub_ebx,eax
89D8 #  mov_eax,ebx
5B                # pop_ebx               # =
8903 #  mov_[ebx],eax
50               #  push_eax              # 1
B8 01000000 #   mov_eax, %1
5B                # pop_ebx               # +
01D8 #  add_eax,ebx
58                # pop_eax               # ;
:___sys_printf_else6  #:___sys_printf_else6 # no else
 ## stdlib.c 308
:___sys_printf_else3  #:___sys_printf_else3 # no else
50               #  push_eax              # l (local)
8D85 2C000000 # lea_eax,[ebp+DWORD] %44
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # 0
B8 00000000 #   mov_eax, %0
5B                # pop_ebx               # ==
39C3 #  cmp_eax_ebx
0F94C0 #    sete_al
0FB6C0 #    movzx_eax,al
85C0           #    test_eax,eax          # if
58 #    pop_eax
0F84 %___sys_printf_else7 # je %___sys_printf_else7
 ## stdlib.c 309
 ## stdlib.c 310
50               #  push_eax              # format (local)
8D85 08000000 # lea_eax,[ebp+DWORD] %8
8B00          # mov_eax,[eax]         # ?
8A00           #    mov_al,[eax]          # ?1
0FB6C0 #    movzx_eax,al
0FBEC0           #  movsx_eax,al          # char
50               #  push_eax              # 0
B8 00000000 #   mov_eax, %0
5B                # pop_ebx               # ==
39C3 #  cmp_eax_ebx
0F94C0 #    sete_al
0FB6C0 #    movzx_eax,al
85C0           #    test_eax,eax          # if
58 #    pop_eax
0F84 %___sys_printf_else8 # je %___sys_printf_else8
 ## stdlib.c 311
E9 %___sys_printf_loop_end1 #   jmp %___sys_printf_loop_end1
 ## stdlib.c 312
:___sys_printf_else8  #:___sys_printf_else8 # no else
50               #  push_eax              # s (local)
8D85 30000000 # lea_eax,[ebp+DWORD] %48
50               #  push_eax              # buffer (local)
8D85 18000000 # lea_eax,[ebp+DWORD] %24
5B                # pop_ebx               # =
8903 #  mov_[ebx],eax
58                # pop_eax               # ;
 ## stdlib.c 313
50               #  push_eax              # l (local)
8D85 2C000000 # lea_eax,[ebp+DWORD] %44
50               #  push_eax              # 1
B8 01000000 #   mov_eax, %1
5B                # pop_ebx               # =
8903 #  mov_[ebx],eax
58                # pop_eax               # ;
 ## stdlib.c 314
50               #  push_eax              # format (local)
8D85 08000000 # lea_eax,[ebp+DWORD] %8
8B00          # mov_eax,[eax]         # ?
8A00           #    mov_al,[eax]          # ?1
0FB6C0 #    movzx_eax,al
0FBEC0           #  movsx_eax,al          # char
50               #  push_eax              # 37
B8 25000000 #   mov_eax, %37
5B                # pop_ebx               # ==
39C3 #  cmp_eax_ebx
0F94C0 #    sete_al
0FB6C0 #    movzx_eax,al
85C0           #    test_eax,eax          # if
58 #    pop_eax
0F84 %___sys_printf_else9 # je %___sys_printf_else9
 ## stdlib.c 315
 ## stdlib.c 316
50               #  push_eax              # format (local)
8D85 08000000 # lea_eax,[ebp+DWORD] %8
50               #  push_eax              # $ (dup)
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # 1
B8 01000000 #   mov_eax, %1
5B                # pop_ebx               # +
01D8 #  add_eax,ebx
5B                # pop_ebx               # =
8903 #  mov_[ebx],eax
50               #  push_eax              # 1
B8 01000000 #   mov_eax, %1
5B                # pop_ebx               # -
29C3 #  sub_ebx,eax
89D8 #  mov_eax,ebx
58                # pop_eax               # ;
 ## stdlib.c 317
50               #  push_eax              # format (local)
8D85 08000000 # lea_eax,[ebp+DWORD] %8
8B00          # mov_eax,[eax]         # ?
8A00           #    mov_al,[eax]          # ?1
0FB6C0 #    movzx_eax,al
0FBEC0           #  movsx_eax,al          # char
50               #  push_eax              # 37
B8 25000000 #   mov_eax, %37
5B                # pop_ebx               # ==
39C3 #  cmp_eax_ebx
0F94C0 #    sete_al
0FB6C0 #    movzx_eax,al
85C0           #    test_eax,eax          # if
58 #    pop_eax
0F84 %___sys_printf_else10 #    je %___sys_printf_else10
 ## stdlib.c 318
50               #  push_eax              # buffer (local)
8D85 18000000 # lea_eax,[ebp+DWORD] %24
50               #  push_eax              # 0
B8 00000000 #   mov_eax, %0
5B                # pop_ebx               # +
01D8 #  add_eax,ebx
50               #  push_eax              # 37
B8 25000000 #   mov_eax, %37
5B                # pop_ebx               # =1
8803 #  mov_[ebx],al
58                # pop_eax               # ;
E9 %___sys_printf_else_end10 #  jmp %___sys_printf_else_end10
:___sys_printf_else10 #:___sys_printf_else10
 ## stdlib.c 320
50               #  push_eax              # modifier (local)
8D85 3C000000 # lea_eax,[ebp+DWORD] %60
50               #  push_eax              # 0
B8 00000000 #   mov_eax, %0
5B                # pop_ebx               # =
8903 #  mov_[ebx],eax
58                # pop_eax               # ;
50               #  push_eax              # sign (local)
8D85 40000000 # lea_eax,[ebp+DWORD] %64
50               #  push_eax              # 1
B8 01000000 #   mov_eax, %1
5B                # pop_ebx               # =
8903 #  mov_[ebx],eax
58                # pop_eax               # ;
 ## stdlib.c 323
50               #  push_eax              # format (local)
8D85 08000000 # lea_eax,[ebp+DWORD] %8
8B00          # mov_eax,[eax]         # ?
8A00           #    mov_al,[eax]          # ?1
0FB6C0 #    movzx_eax,al
0FBEC0           #  movsx_eax,al          # char
50               #  push_eax              # 45
B8 2D000000 #   mov_eax, %45
5B                # pop_ebx               # ==
39C3 #  cmp_eax_ebx
0F94C0 #    sete_al
0FB6C0 #    movzx_eax,al
85C0           #    test_eax,eax          # if
58 #    pop_eax
0F84 %___sys_printf_else11 #    je %___sys_printf_else11
 ## stdlib.c 324
 ## stdlib.c 325
50               #  push_eax              # sign (local)
8D85 40000000 # lea_eax,[ebp+DWORD] %64
50               #  push_eax              # 4294967295
B8 FFFFFFFF #   mov_eax, %4294967295
5B                # pop_ebx               # =
8903 #  mov_[ebx],eax
58                # pop_eax               # ;
 ## stdlib.c 326
50               #  push_eax              # format (local)
8D85 08000000 # lea_eax,[ebp+DWORD] %8
50               #  push_eax              # $ (dup)
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # 1
B8 01000000 #   mov_eax, %1
5B                # pop_ebx               # +
01D8 #  add_eax,ebx
5B                # pop_ebx               # =
8903 #  mov_[ebx],eax
50               #  push_eax              # 1
B8 01000000 #   mov_eax, %1
5B                # pop_ebx               # -
29C3 #  sub_ebx,eax
89D8 #  mov_eax,ebx
58                # pop_eax               # ;
 ## stdlib.c 328
:___sys_printf_else11  #:___sys_printf_else11 # no else
:___sys_printf_loop12 #:___sys_printf_loop12
50               #  push_eax              # 48
B8 30000000 #   mov_eax, %48
50               #  push_eax              # format (local)
8D85 08000000 # lea_eax,[ebp+DWORD] %8
8B00          # mov_eax,[eax]         # ?
8A00           #    mov_al,[eax]          # ?1
0FB6C0 #    movzx_eax,al
0FBEC0           #  movsx_eax,al          # char
5B                # pop_ebx               # <=s
39C3 #  cmp_eax_ebx
0F9EC0 #    setle_al
0FB6C0 #    movzx_eax,al
85C0           #    test_eax,eax          # &&
0F84 %___sys_printf_and_end13 # je %___sys_printf_and_end13
58 #    pop_eax
50               #  push_eax              # format (local)
8D85 08000000 # lea_eax,[ebp+DWORD] %8
8B00          # mov_eax,[eax]         # ?
8A00           #    mov_al,[eax]          # ?1
0FB6C0 #    movzx_eax,al
0FBEC0           #  movsx_eax,al          # char
50               #  push_eax              # 57
B8 39000000 #   mov_eax, %57
5B                # pop_ebx               # <=s
39C3 #  cmp_eax_ebx
0F9EC0 #    setle_al
0FB6C0 #    movzx_eax,al
:___sys_printf_and_end13 #:___sys_printf_and_end13
85C0           #    test_eax,eax          # !
0F94C0 #    sete_al
0FB6C0 #    movzx_eax,al
85C0           #    test_eax,eax          # if
58 #    pop_eax
0F84 %___sys_printf_else14 #    je %___sys_printf_else14
E9 %___sys_printf_loop_end12 #  jmp %___sys_printf_loop_end12
 ## stdlib.c 329
 ## stdlib.c 330
:___sys_printf_else14  #:___sys_printf_else14 # no else
50               #  push_eax              # modifier (local)
8D85 3C000000 # lea_eax,[ebp+DWORD] %60
50               #  push_eax              # 10
B8 0A000000 #   mov_eax, %10
50               #  push_eax              # modifier (local)
8D85 3C000000 # lea_eax,[ebp+DWORD] %60
8B00          # mov_eax,[eax]         # ?
5B                # pop_ebx               # *
F7E3 #  mul_ebx
50               #  push_eax              # format (local)
8D85 08000000 # lea_eax,[ebp+DWORD] %8
8B00          # mov_eax,[eax]         # ?
8A00           #    mov_al,[eax]          # ?1
0FB6C0 #    movzx_eax,al
0FBEC0           #  movsx_eax,al          # char
5B                # pop_ebx               # +
01D8 #  add_eax,ebx
50               #  push_eax              # 48
B8 30000000 #   mov_eax, %48
5B                # pop_ebx               # -
29C3 #  sub_ebx,eax
89D8 #  mov_eax,ebx
5B                # pop_ebx               # =
8903 #  mov_[ebx],eax
58                # pop_eax               # ;
 ## stdlib.c 331
50               #  push_eax              # format (local)
8D85 08000000 # lea_eax,[ebp+DWORD] %8
50               #  push_eax              # $ (dup)
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # 1
B8 01000000 #   mov_eax, %1
5B                # pop_ebx               # +
01D8 #  add_eax,ebx
5B                # pop_ebx               # =
8903 #  mov_[ebx],eax
50               #  push_eax              # 1
B8 01000000 #   mov_eax, %1
5B                # pop_ebx               # -
29C3 #  sub_ebx,eax
89D8 #  mov_eax,ebx
58                # pop_eax               # ;
E9 %___sys_printf_loop12 #  jmp %___sys_printf_loop12
:___sys_printf_loop_end12 #:___sys_printf_loop_end12
 ## stdlib.c 333
50               #  push_eax              # format (local)
8D85 08000000 # lea_eax,[ebp+DWORD] %8
8B00          # mov_eax,[eax]         # ?
8A00           #    mov_al,[eax]          # ?1
0FB6C0 #    movzx_eax,al
0FBEC0           #  movsx_eax,al          # char
50               #  push_eax              # 115
B8 73000000 #   mov_eax, %115
5B                # pop_ebx               # ==
39C3 #  cmp_eax_ebx
0F94C0 #    sete_al
0FB6C0 #    movzx_eax,al
85C0           #    test_eax,eax          # if
58 #    pop_eax
0F84 %___sys_printf_else15 #    je %___sys_printf_else15
 ## stdlib.c 334
 ## stdlib.c 335
50               #  push_eax              # s (local)
8D85 30000000 # lea_eax,[ebp+DWORD] %48
50               #  push_eax              # args (local)
8D85 04000000 # lea_eax,[ebp+DWORD] %4
50               #  push_eax              # $ (dup)
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # 4
B8 04000000 #   mov_eax, %4
5B                # pop_ebx               # +
01D8 #  add_eax,ebx
5B                # pop_ebx               # =
8903 #  mov_[ebx],eax
50               #  push_eax              # 4
B8 04000000 #   mov_eax, %4
5B                # pop_ebx               # -
29C3 #  sub_ebx,eax
89D8 #  mov_eax,ebx
8B00          # mov_eax,[eax]         # ?
5B                # pop_ebx               # =
8903 #  mov_[ebx],eax
58                # pop_eax               # ;
 ## stdlib.c 336
50               #  push_eax              # l (local)
8D85 2C000000 # lea_eax,[ebp+DWORD] %44
50               #  push_eax              # s (local)
8D85 30000000 # lea_eax,[ebp+DWORD] %48
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # strlen (function)
B8 &f_strlen #  mov_eax, &f_strlen
81C5 44000000          #    add_ebp, %68         # ()
FFD0 #  call_eax
81ED 44000000 # sub_ebp, %68
5B                # pop_ebx               # =
8903 #  mov_[ebx],eax
58                # pop_eax               # ;
E9 %___sys_printf_else_end15 #  jmp %___sys_printf_else_end15
:___sys_printf_else15 #:___sys_printf_else15
 ## stdlib.c 338
50               #  push_eax              # format (local)
8D85 08000000 # lea_eax,[ebp+DWORD] %8
8B00          # mov_eax,[eax]         # ?
8A00           #    mov_al,[eax]          # ?1
0FB6C0 #    movzx_eax,al
0FBEC0           #  movsx_eax,al          # char
50               #  push_eax              # 100
B8 64000000 #   mov_eax, %100
5B                # pop_ebx               # ==
39C3 #  cmp_eax_ebx
0F94C0 #    sete_al
0FB6C0 #    movzx_eax,al
85C0           #    test_eax,eax          # if
58 #    pop_eax
0F84 %___sys_printf_else16 #    je %___sys_printf_else16
 ## stdlib.c 339
50               #  push_eax              # v (local)
8D85 44000000 # lea_eax,[ebp+DWORD] %68
50               #  push_eax              # args (local)
8D85 04000000 # lea_eax,[ebp+DWORD] %4
8B00          # mov_eax,[eax]         # ?
8B00          # mov_eax,[eax]         # ?
5B                # pop_ebx               # =
8903 #  mov_[ebx],eax
58                # pop_eax               # ;
50               #  push_eax              # b (local)
8D85 48000000 # lea_eax,[ebp+DWORD] %72
50               #  push_eax              # 20
B8 14000000 #   mov_eax, %20
5B                # pop_ebx               # =
8903 #  mov_[ebx],eax
58                # pop_eax               # ;
 ## stdlib.c 342
50               #  push_eax              # v (local)
8D85 44000000 # lea_eax,[ebp+DWORD] %68
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # 0
B8 00000000 #   mov_eax, %0
5B                # pop_ebx               # ==
39C3 #  cmp_eax_ebx
0F94C0 #    sete_al
0FB6C0 #    movzx_eax,al
85C0           #    test_eax,eax          # if
58 #    pop_eax
0F84 %___sys_printf_else17 #    je %___sys_printf_else17
 ## stdlib.c 343
50               #  push_eax              # buffer (local)
8D85 18000000 # lea_eax,[ebp+DWORD] %24
50               #  push_eax              # b (local)
8D85 48000000 # lea_eax,[ebp+DWORD] %72
50               #  push_eax              # $ (dup)
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # 1
B8 01000000 #   mov_eax, %1
5B                # pop_ebx               # -
29C3 #  sub_ebx,eax
89D8 #  mov_eax,ebx
5B                # pop_ebx               # =
8903 #  mov_[ebx],eax
5B                # pop_ebx               # +
01D8 #  add_eax,ebx
50               #  push_eax              # 48
B8 30000000 #   mov_eax, %48
5B                # pop_ebx               # =1
8803 #  mov_[ebx],al
58                # pop_eax               # ;
E9 %___sys_printf_else_end17 #  jmp %___sys_printf_else_end17
:___sys_printf_else17 #:___sys_printf_else17
 ## stdlib.c 345
 ## stdlib.c 346
50               #  push_eax              # v (local)
8D85 44000000 # lea_eax,[ebp+DWORD] %68
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # 0
B8 00000000 #   mov_eax, %0
5B                # pop_ebx               # <s
39C3 #  cmp_eax_ebx
0F9CC0 #    setl_al
0FB6C0 #    movzx_eax,al
85C0           #    test_eax,eax          # if
58 #    pop_eax
0F84 %___sys_printf_else18 #    je %___sys_printf_else18
 ## stdlib.c 346
50               #  push_eax              # v (local)
8D85 44000000 # lea_eax,[ebp+DWORD] %68
50               #  push_eax              # 0
B8 00000000 #   mov_eax, %0
50               #  push_eax              # v (local)
8D85 44000000 # lea_eax,[ebp+DWORD] %68
8B00          # mov_eax,[eax]         # ?
5B                # pop_ebx               # -
29C3 #  sub_ebx,eax
89D8 #  mov_eax,ebx
5B                # pop_ebx               # =
8903 #  mov_[ebx],eax
58                # pop_eax               # ;
 ## stdlib.c 347
:___sys_printf_else18  #:___sys_printf_else18 # no else
:___sys_printf_loop19 #:___sys_printf_loop19
50               #  push_eax              # v (local)
8D85 44000000 # lea_eax,[ebp+DWORD] %68
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # 0
B8 00000000 #   mov_eax, %0
5B                # pop_ebx               # >s
39C3 #  cmp_eax_ebx
0F9FC0 #    setg_al
0FB6C0 #    movzx_eax,al
85C0           #    test_eax,eax          # !
0F94C0 #    sete_al
0FB6C0 #    movzx_eax,al
85C0           #    test_eax,eax          # if
58 #    pop_eax
0F84 %___sys_printf_else20 #    je %___sys_printf_else20
E9 %___sys_printf_loop_end19 #  jmp %___sys_printf_loop_end19
 ## stdlib.c 348
:___sys_printf_else20  #:___sys_printf_else20 # no else
50               #  push_eax              # buffer (local)
8D85 18000000 # lea_eax,[ebp+DWORD] %24
50               #  push_eax              # b (local)
8D85 48000000 # lea_eax,[ebp+DWORD] %72
50               #  push_eax              # $ (dup)
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # 1
B8 01000000 #   mov_eax, %1
5B                # pop_ebx               # -
29C3 #  sub_ebx,eax
89D8 #  mov_eax,ebx
5B                # pop_ebx               # =
8903 #  mov_[ebx],eax
5B                # pop_ebx               # +
01D8 #  add_eax,ebx
50               #  push_eax              # 48
B8 30000000 #   mov_eax, %48
50               #  push_eax              # v (local)
8D85 44000000 # lea_eax,[ebp+DWORD] %68
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # 10
B8 0A000000 #   mov_eax, %10
89C3            #   mov_ebx,eax           # %s
58 #    pop_eax
99 #    cdq
F7FB #  idiv_ebx
89D0 5B                #    mov_eax,edx pop_ebx               # +
01D8 #  add_eax,ebx
5B                # pop_ebx               # =1
8803 #  mov_[ebx],al
58                # pop_eax               # ;
50               #  push_eax              # v (local)
8D85 44000000 # lea_eax,[ebp+DWORD] %68
50               #  push_eax              # v (local)
8D85 44000000 # lea_eax,[ebp+DWORD] %68
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # 10
B8 0A000000 #   mov_eax, %10
89C3            #   mov_ebx,eax           # /s
58 #    pop_eax
99 #    cdq
F7FB #  idiv_ebx
5B                # pop_ebx               # =
8903 #  mov_[ebx],eax
58                # pop_eax               # ;
E9 %___sys_printf_loop19 #  jmp %___sys_printf_loop19
:___sys_printf_loop_end19 #:___sys_printf_loop_end19
 ## stdlib.c 349
50               #  push_eax              # args (local)
8D85 04000000 # lea_eax,[ebp+DWORD] %4
8B00          # mov_eax,[eax]         # ?
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # 0
B8 00000000 #   mov_eax, %0
5B                # pop_ebx               # <s
39C3 #  cmp_eax_ebx
0F9CC0 #    setl_al
0FB6C0 #    movzx_eax,al
85C0           #    test_eax,eax          # if
58 #    pop_eax
0F84 %___sys_printf_else21 #    je %___sys_printf_else21
 ## stdlib.c 350
50               #  push_eax              # buffer (local)
8D85 18000000 # lea_eax,[ebp+DWORD] %24
50               #  push_eax              # b (local)
8D85 48000000 # lea_eax,[ebp+DWORD] %72
50               #  push_eax              # $ (dup)
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # 1
B8 01000000 #   mov_eax, %1
5B                # pop_ebx               # -
29C3 #  sub_ebx,eax
89D8 #  mov_eax,ebx
5B                # pop_ebx               # =
8903 #  mov_[ebx],eax
5B                # pop_ebx               # +
01D8 #  add_eax,ebx
50               #  push_eax              # 45
B8 2D000000 #   mov_eax, %45
5B                # pop_ebx               # =1
8803 #  mov_[ebx],al
58                # pop_eax               # ;
:___sys_printf_else21  #:___sys_printf_else21 # no else
:___sys_printf_else_end17 #:___sys_printf_else_end17
 ## stdlib.c 352
50               #  push_eax              # l (local)
8D85 2C000000 # lea_eax,[ebp+DWORD] %44
50               #  push_eax              # 20
B8 14000000 #   mov_eax, %20
50               #  push_eax              # b (local)
8D85 48000000 # lea_eax,[ebp+DWORD] %72
8B00          # mov_eax,[eax]         # ?
5B                # pop_ebx               # -
29C3 #  sub_ebx,eax
89D8 #  mov_eax,ebx
5B                # pop_ebx               # =
8903 #  mov_[ebx],eax
58                # pop_eax               # ;
 ## stdlib.c 353
50               #  push_eax              # modifier (local)
8D85 3C000000 # lea_eax,[ebp+DWORD] %60
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # 0
B8 00000000 #   mov_eax, %0
5B                # pop_ebx               # >s
39C3 #  cmp_eax_ebx
0F9FC0 #    setg_al
0FB6C0 #    movzx_eax,al
85C0           #    test_eax,eax          # if
58 #    pop_eax
0F84 %___sys_printf_else22 #    je %___sys_printf_else22
 ## stdlib.c 354
 ## stdlib.c 355
50               #  push_eax              # modifier (local)
8D85 3C000000 # lea_eax,[ebp+DWORD] %60
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # l (local)
8D85 2C000000 # lea_eax,[ebp+DWORD] %44
8B00          # mov_eax,[eax]         # ?
5B                # pop_ebx               # >s
39C3 #  cmp_eax_ebx
0F9FC0 #    setg_al
0FB6C0 #    movzx_eax,al
85C0           #    test_eax,eax          # if
58 #    pop_eax
0F84 %___sys_printf_else23 #    je %___sys_printf_else23
 ## stdlib.c 356
 ## stdlib.c 357
50               #  push_eax              # sign (local)
8D85 40000000 # lea_eax,[ebp+DWORD] %64
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # 4294967295
B8 FFFFFFFF #   mov_eax, %4294967295
5B                # pop_ebx               # ==
39C3 #  cmp_eax_ebx
0F94C0 #    sete_al
0FB6C0 #    movzx_eax,al
85C0           #    test_eax,eax          # if
58 #    pop_eax
0F84 %___sys_printf_else24 #    je %___sys_printf_else24
 ## stdlib.c 358
 ## stdlib.c 359
50               #  push_eax              # i (local)
8D85 4C000000 # lea_eax,[ebp+DWORD] %76
50               #  push_eax              # 20
B8 14000000 #   mov_eax, %20
50               #  push_eax              # modifier (local)
8D85 3C000000 # lea_eax,[ebp+DWORD] %60
8B00          # mov_eax,[eax]         # ?
5B                # pop_ebx               # -
29C3 #  sub_ebx,eax
89D8 #  mov_eax,ebx
5B                # pop_ebx               # =
8903 #  mov_[ebx],eax
58                # pop_eax               # ;
:___sys_printf_loop25 #:___sys_printf_loop25
50               #  push_eax              # i (local)
8D85 4C000000 # lea_eax,[ebp+DWORD] %76
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # 20
B8 14000000 #   mov_eax, %20
5B                # pop_ebx               # <s
39C3 #  cmp_eax_ebx
0F9CC0 #    setl_al
0FB6C0 #    movzx_eax,al
85C0           #    test_eax,eax          # !
0F94C0 #    sete_al
0FB6C0 #    movzx_eax,al
85C0           #    test_eax,eax          # if
58 #    pop_eax
0F84 %___sys_printf_else26 #    je %___sys_printf_else26
E9 %___sys_printf_loop_end25 #  jmp %___sys_printf_loop_end25
 ## stdlib.c 360
:___sys_printf_else26  #:___sys_printf_else26 # no else
50               #  push_eax              # buffer (local)
8D85 18000000 # lea_eax,[ebp+DWORD] %24
50               #  push_eax              # i (local)
8D85 4C000000 # lea_eax,[ebp+DWORD] %76
8B00          # mov_eax,[eax]         # ?
5B                # pop_ebx               # +
01D8 #  add_eax,ebx
50               #  push_eax              # b (local)
8D85 48000000 # lea_eax,[ebp+DWORD] %72
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # 20
B8 14000000 #   mov_eax, %20
5B                # pop_ebx               # <s
39C3 #  cmp_eax_ebx
0F9CC0 #    setl_al
0FB6C0 #    movzx_eax,al
85C0           #    test_eax,eax          # if
58 #    pop_eax
0F84 %___sys_printf_else27 #    je %___sys_printf_else27
50               #  push_eax              # buffer (local)
8D85 18000000 # lea_eax,[ebp+DWORD] %24
50               #  push_eax              # b (local)
8D85 48000000 # lea_eax,[ebp+DWORD] %72
50               #  push_eax              # $ (dup)
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # 1
B8 01000000 #   mov_eax, %1
5B                # pop_ebx               # +
01D8 #  add_eax,ebx
5B                # pop_ebx               # =
8903 #  mov_[ebx],eax
50               #  push_eax              # 1
B8 01000000 #   mov_eax, %1
5B                # pop_ebx               # -
29C3 #  sub_ebx,eax
89D8 #  mov_eax,ebx
5B                # pop_ebx               # +
01D8 #  add_eax,ebx
8A00           #    mov_al,[eax]          # ?1
0FB6C0 #    movzx_eax,al
0FBEC0           #  movsx_eax,al          # char
E9 %___sys_printf_else_end27 #  jmp %___sys_printf_else_end27
:___sys_printf_else27 #:___sys_printf_else27
50               #  push_eax              # 32
B8 20000000 #   mov_eax, %32
:___sys_printf_else_end27 #:___sys_printf_else_end27
5B                # pop_ebx               # =1
8803 #  mov_[ebx],al
58                # pop_eax               # ;
50               #  push_eax              # i (local)
8D85 4C000000 # lea_eax,[ebp+DWORD] %76
50               #  push_eax              # $ (dup)
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # 1
B8 01000000 #   mov_eax, %1
5B                # pop_ebx               # +
01D8 #  add_eax,ebx
5B                # pop_ebx               # =
8903 #  mov_[ebx],eax
50               #  push_eax              # 1
B8 01000000 #   mov_eax, %1
5B                # pop_ebx               # -
29C3 #  sub_ebx,eax
89D8 #  mov_eax,ebx
58                # pop_eax               # ;
E9 %___sys_printf_loop25 #  jmp %___sys_printf_loop25
:___sys_printf_loop_end25 #:___sys_printf_loop_end25
 ## stdlib.c 361
50               #  push_eax              # b (local)
8D85 48000000 # lea_eax,[ebp+DWORD] %72
50               #  push_eax              # 20
B8 14000000 #   mov_eax, %20
50               #  push_eax              # modifier (local)
8D85 3C000000 # lea_eax,[ebp+DWORD] %60
8B00          # mov_eax,[eax]         # ?
5B                # pop_ebx               # -
29C3 #  sub_ebx,eax
89D8 #  mov_eax,ebx
5B                # pop_ebx               # =
8903 #  mov_[ebx],eax
58                # pop_eax               # ;
E9 %___sys_printf_else_end24 #  jmp %___sys_printf_else_end24
:___sys_printf_else24 #:___sys_printf_else24
 ## stdlib.c 364
:___sys_printf_loop28 #:___sys_printf_loop28
50               #  push_eax              # l (local)
8D85 2C000000 # lea_eax,[ebp+DWORD] %44
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # modifier (local)
8D85 3C000000 # lea_eax,[ebp+DWORD] %60
8B00          # mov_eax,[eax]         # ?
5B                # pop_ebx               # <s
39C3 #  cmp_eax_ebx
0F9CC0 #    setl_al
0FB6C0 #    movzx_eax,al
85C0           #    test_eax,eax          # !
0F94C0 #    sete_al
0FB6C0 #    movzx_eax,al
85C0           #    test_eax,eax          # if
58 #    pop_eax
0F84 %___sys_printf_else29 #    je %___sys_printf_else29
E9 %___sys_printf_loop_end28 #  jmp %___sys_printf_loop_end28
 ## stdlib.c 365
:___sys_printf_else29  #:___sys_printf_else29 # no else
50               #  push_eax              # buffer (local)
8D85 18000000 # lea_eax,[ebp+DWORD] %24
50               #  push_eax              # b (local)
8D85 48000000 # lea_eax,[ebp+DWORD] %72
50               #  push_eax              # $ (dup)
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # 1
B8 01000000 #   mov_eax, %1
5B                # pop_ebx               # -
29C3 #  sub_ebx,eax
89D8 #  mov_eax,ebx
5B                # pop_ebx               # =
8903 #  mov_[ebx],eax
5B                # pop_ebx               # +
01D8 #  add_eax,ebx
50               #  push_eax              # 32
B8 20000000 #   mov_eax, %32
5B                # pop_ebx               # =1
8803 #  mov_[ebx],al
58                # pop_eax               # ;
50               #  push_eax              # l (local)
8D85 2C000000 # lea_eax,[ebp+DWORD] %44
50               #  push_eax              # $ (dup)
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # 1
B8 01000000 #   mov_eax, %1
5B                # pop_ebx               # +
01D8 #  add_eax,ebx
5B                # pop_ebx               # =
8903 #  mov_[ebx],eax
50               #  push_eax              # 1
B8 01000000 #   mov_eax, %1
5B                # pop_ebx               # -
29C3 #  sub_ebx,eax
89D8 #  mov_eax,ebx
58                # pop_eax               # ;
E9 %___sys_printf_loop28 #  jmp %___sys_printf_loop28
:___sys_printf_loop_end28 #:___sys_printf_loop_end28
:___sys_printf_else_end24 #:___sys_printf_else_end24
 ## stdlib.c 367
:___sys_printf_else23  #:___sys_printf_else23 # no else
50               #  push_eax              # l (local)
8D85 2C000000 # lea_eax,[ebp+DWORD] %44
50               #  push_eax              # modifier (local)
8D85 3C000000 # lea_eax,[ebp+DWORD] %60
8B00          # mov_eax,[eax]         # ?
5B                # pop_ebx               # =
8903 #  mov_[ebx],eax
58                # pop_eax               # ;
 ## stdlib.c 369
:___sys_printf_else22  #:___sys_printf_else22 # no else
50               #  push_eax              # s (local)
8D85 30000000 # lea_eax,[ebp+DWORD] %48
50               #  push_eax              # buffer (local)
8D85 18000000 # lea_eax,[ebp+DWORD] %24
50               #  push_eax              # b (local)
8D85 48000000 # lea_eax,[ebp+DWORD] %72
8B00          # mov_eax,[eax]         # ?
5B                # pop_ebx               # +
01D8 #  add_eax,ebx
5B                # pop_ebx               # =
8903 #  mov_[ebx],eax
58                # pop_eax               # ;
 ## stdlib.c 370
50               #  push_eax              # args (local)
8D85 04000000 # lea_eax,[ebp+DWORD] %4
50               #  push_eax              # $ (dup)
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # 4
B8 04000000 #   mov_eax, %4
5B                # pop_ebx               # +
01D8 #  add_eax,ebx
5B                # pop_ebx               # =
8903 #  mov_[ebx],eax
50               #  push_eax              # 4
B8 04000000 #   mov_eax, %4
5B                # pop_ebx               # -
29C3 #  sub_ebx,eax
89D8 #  mov_eax,ebx
58                # pop_eax               # ;
E9 %___sys_printf_else_end16 #  jmp %___sys_printf_else_end16
:___sys_printf_else16 #:___sys_printf_else16
 ## stdlib.c 372
50               #  push_eax              # format (local)
8D85 08000000 # lea_eax,[ebp+DWORD] %8
8B00          # mov_eax,[eax]         # ?
8A00           #    mov_al,[eax]          # ?1
0FB6C0 #    movzx_eax,al
0FBEC0           #  movsx_eax,al          # char
50               #  push_eax              # 117
B8 75000000 #   mov_eax, %117
5B                # pop_ebx               # ==
39C3 #  cmp_eax_ebx
0F94C0 #    sete_al
0FB6C0 #    movzx_eax,al
85C0           #    test_eax,eax          # if
58 #    pop_eax
0F84 %___sys_printf_else30 #    je %___sys_printf_else30
 ## stdlib.c 373
50               #  push_eax              # v (local)
8D85 44000000 # lea_eax,[ebp+DWORD] %68
50               #  push_eax              # args (local)
8D85 04000000 # lea_eax,[ebp+DWORD] %4
50               #  push_eax              # $ (dup)
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # 4
B8 04000000 #   mov_eax, %4
5B                # pop_ebx               # +
01D8 #  add_eax,ebx
5B                # pop_ebx               # =
8903 #  mov_[ebx],eax
50               #  push_eax              # 4
B8 04000000 #   mov_eax, %4
5B                # pop_ebx               # -
29C3 #  sub_ebx,eax
89D8 #  mov_eax,ebx
8B00          # mov_eax,[eax]         # ?
5B                # pop_ebx               # =
8903 #  mov_[ebx],eax
58                # pop_eax               # ;
 ## stdlib.c 375
50               #  push_eax              # v (local)
8D85 44000000 # lea_eax,[ebp+DWORD] %68
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # 0
B8 00000000 #   mov_eax, %0
5B                # pop_ebx               # ==
39C3 #  cmp_eax_ebx
0F94C0 #    sete_al
0FB6C0 #    movzx_eax,al
85C0           #    test_eax,eax          # if
58 #    pop_eax
0F84 %___sys_printf_else31 #    je %___sys_printf_else31
 ## stdlib.c 376
50               #  push_eax              # buffer (local)
8D85 18000000 # lea_eax,[ebp+DWORD] %24
50               #  push_eax              # 0
B8 00000000 #   mov_eax, %0
5B                # pop_ebx               # +
01D8 #  add_eax,ebx
50               #  push_eax              # 48
B8 30000000 #   mov_eax, %48
5B                # pop_ebx               # =1
8803 #  mov_[ebx],al
58                # pop_eax               # ;
E9 %___sys_printf_else_end31 #  jmp %___sys_printf_else_end31
:___sys_printf_else31 #:___sys_printf_else31
 ## stdlib.c 378
 ## stdlib.c 379
50               #  push_eax              # l (local)
8D85 2C000000 # lea_eax,[ebp+DWORD] %44
50               #  push_eax              # 20
B8 14000000 #   mov_eax, %20
5B                # pop_ebx               # =
8903 #  mov_[ebx],eax
58                # pop_eax               # ;
 ## stdlib.c 380
:___sys_printf_loop32 #:___sys_printf_loop32
50               #  push_eax              # v (local)
8D85 44000000 # lea_eax,[ebp+DWORD] %68
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # 0
B8 00000000 #   mov_eax, %0
5B                # pop_ebx               # >
39C3 #  cmp_eax_ebx
0F97C0 #    seta_al
0FB6C0 #    movzx_eax,al
85C0           #    test_eax,eax          # !
0F94C0 #    sete_al
0FB6C0 #    movzx_eax,al
85C0           #    test_eax,eax          # if
58 #    pop_eax
0F84 %___sys_printf_else33 #    je %___sys_printf_else33
E9 %___sys_printf_loop_end32 #  jmp %___sys_printf_loop_end32
 ## stdlib.c 381
:___sys_printf_else33  #:___sys_printf_else33 # no else
50               #  push_eax              # buffer (local)
8D85 18000000 # lea_eax,[ebp+DWORD] %24
50               #  push_eax              # l (local)
8D85 2C000000 # lea_eax,[ebp+DWORD] %44
50               #  push_eax              # $ (dup)
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # 1
B8 01000000 #   mov_eax, %1
5B                # pop_ebx               # -
29C3 #  sub_ebx,eax
89D8 #  mov_eax,ebx
5B                # pop_ebx               # =
8903 #  mov_[ebx],eax
5B                # pop_ebx               # +
01D8 #  add_eax,ebx
50               #  push_eax              # 48
B8 30000000 #   mov_eax, %48
50               #  push_eax              # v (local)
8D85 44000000 # lea_eax,[ebp+DWORD] %68
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # 10
B8 0A000000 #   mov_eax, %10
89C3            #   mov_ebx,eax           # %
58 #    pop_eax
BA 00000000 #   mov_edx, %0
F7F3 #  div_ebx
89D0 #  mov_eax,edx
5B                # pop_ebx               # +
01D8 #  add_eax,ebx
5B                # pop_ebx               # =1
8803 #  mov_[ebx],al
58                # pop_eax               # ;
50               #  push_eax              # v (local)
8D85 44000000 # lea_eax,[ebp+DWORD] %68
50               #  push_eax              # v (local)
8D85 44000000 # lea_eax,[ebp+DWORD] %68
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # 10
B8 0A000000 #   mov_eax, %10
89C3            #   mov_ebx,eax           # /
58 #    pop_eax
BA 00000000 #   mov_edx, %0
F7F3 #  div_ebx
5B                # pop_ebx               # =
8903 #  mov_[ebx],eax
58                # pop_eax               # ;
E9 %___sys_printf_loop32 #  jmp %___sys_printf_loop32
:___sys_printf_loop_end32 #:___sys_printf_loop_end32
 ## stdlib.c 382
50               #  push_eax              # s (local)
8D85 30000000 # lea_eax,[ebp+DWORD] %48
50               #  push_eax              # buffer (local)
8D85 18000000 # lea_eax,[ebp+DWORD] %24
50               #  push_eax              # l (local)
8D85 2C000000 # lea_eax,[ebp+DWORD] %44
8B00          # mov_eax,[eax]         # ?
5B                # pop_ebx               # +
01D8 #  add_eax,ebx
5B                # pop_ebx               # =
8903 #  mov_[ebx],eax
58                # pop_eax               # ;
 ## stdlib.c 383
50               #  push_eax              # l (local)
8D85 2C000000 # lea_eax,[ebp+DWORD] %44
50               #  push_eax              # 20
B8 14000000 #   mov_eax, %20
50               #  push_eax              # l (local)
8D85 2C000000 # lea_eax,[ebp+DWORD] %44
8B00          # mov_eax,[eax]         # ?
5B                # pop_ebx               # -
29C3 #  sub_ebx,eax
89D8 #  mov_eax,ebx
5B                # pop_ebx               # =
8903 #  mov_[ebx],eax
58                # pop_eax               # ;
:___sys_printf_else_end31 #:___sys_printf_else_end31
E9 %___sys_printf_else_end30 #  jmp %___sys_printf_else_end30
:___sys_printf_else30 #:___sys_printf_else30
 ## stdlib.c 386
50               #  push_eax              # format (local)
8D85 08000000 # lea_eax,[ebp+DWORD] %8
8B00          # mov_eax,[eax]         # ?
8A00           #    mov_al,[eax]          # ?1
0FB6C0 #    movzx_eax,al
0FBEC0           #  movsx_eax,al          # char
50               #  push_eax              # 120
B8 78000000 #   mov_eax, %120
5B                # pop_ebx               # ==
39C3 #  cmp_eax_ebx
0F94C0 #    sete_al
0FB6C0 #    movzx_eax,al
85C0           #    test_eax,eax          # ||
0F85 %___sys_printf_or_end34 #  jne %___sys_printf_or_end34
58 #    pop_eax
50               #  push_eax              # format (local)
8D85 08000000 # lea_eax,[ebp+DWORD] %8
8B00          # mov_eax,[eax]         # ?
8A00           #    mov_al,[eax]          # ?1
0FB6C0 #    movzx_eax,al
0FBEC0           #  movsx_eax,al          # char
50               #  push_eax              # 112
B8 70000000 #   mov_eax, %112
5B                # pop_ebx               # ==
39C3 #  cmp_eax_ebx
0F94C0 #    sete_al
0FB6C0 #    movzx_eax,al
:___sys_printf_or_end34 #:___sys_printf_or_end34
85C0           #    test_eax,eax          # if
58 #    pop_eax
0F84 %___sys_printf_else35 #    je %___sys_printf_else35
 ## stdlib.c 387
50               #  push_eax              # v (local)
8D85 44000000 # lea_eax,[ebp+DWORD] %68
50               #  push_eax              # args (local)
8D85 04000000 # lea_eax,[ebp+DWORD] %4
50               #  push_eax              # $ (dup)
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # 4
B8 04000000 #   mov_eax, %4
5B                # pop_ebx               # +
01D8 #  add_eax,ebx
5B                # pop_ebx               # =
8903 #  mov_[ebx],eax
50               #  push_eax              # 4
B8 04000000 #   mov_eax, %4
5B                # pop_ebx               # -
29C3 #  sub_ebx,eax
89D8 #  mov_eax,ebx
8B00          # mov_eax,[eax]         # ?
5B                # pop_ebx               # =
8903 #  mov_[ebx],eax
58                # pop_eax               # ;
 ## stdlib.c 389
50               #  push_eax              # v (local)
8D85 44000000 # lea_eax,[ebp+DWORD] %68
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # 0
B8 00000000 #   mov_eax, %0
5B                # pop_ebx               # ==
39C3 #  cmp_eax_ebx
0F94C0 #    sete_al
0FB6C0 #    movzx_eax,al
85C0           #    test_eax,eax          # if
58 #    pop_eax
0F84 %___sys_printf_else36 #    je %___sys_printf_else36
 ## stdlib.c 390
50               #  push_eax              # buffer (local)
8D85 18000000 # lea_eax,[ebp+DWORD] %24
50               #  push_eax              # 0
B8 00000000 #   mov_eax, %0
5B                # pop_ebx               # +
01D8 #  add_eax,ebx
50               #  push_eax              # 48
B8 30000000 #   mov_eax, %48
5B                # pop_ebx               # =1
8803 #  mov_[ebx],al
58                # pop_eax               # ;
E9 %___sys_printf_else_end36 #  jmp %___sys_printf_else_end36
:___sys_printf_else36 #:___sys_printf_else36
 ## stdlib.c 392
 ## stdlib.c 393
50               #  push_eax              # l (local)
8D85 2C000000 # lea_eax,[ebp+DWORD] %44
50               #  push_eax              # 20
B8 14000000 #   mov_eax, %20
5B                # pop_ebx               # =
8903 #  mov_[ebx],eax
58                # pop_eax               # ;
 ## stdlib.c 394
:___sys_printf_loop37 #:___sys_printf_loop37
50               #  push_eax              # v (local)
8D85 44000000 # lea_eax,[ebp+DWORD] %68
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # 0
B8 00000000 #   mov_eax, %0
5B                # pop_ebx               # !=
39C3 #  cmp_eax_ebx
0F95C0 #    setne_al
0FB6C0 #    movzx_eax,al
85C0           #    test_eax,eax          # !
0F94C0 #    sete_al
0FB6C0 #    movzx_eax,al
85C0           #    test_eax,eax          # if
58 #    pop_eax
0F84 %___sys_printf_else38 #    je %___sys_printf_else38
E9 %___sys_printf_loop_end37 #  jmp %___sys_printf_loop_end37
 ## stdlib.c 395
:___sys_printf_else38  #:___sys_printf_else38 # no else
50               #  push_eax              # buffer (local)
8D85 18000000 # lea_eax,[ebp+DWORD] %24
50               #  push_eax              # l (local)
8D85 2C000000 # lea_eax,[ebp+DWORD] %44
50               #  push_eax              # $ (dup)
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # 1
B8 01000000 #   mov_eax, %1
5B                # pop_ebx               # -
29C3 #  sub_ebx,eax
89D8 #  mov_eax,ebx
5B                # pop_ebx               # =
8903 #  mov_[ebx],eax
5B                # pop_ebx               # +
01D8 #  add_eax,ebx
50               #  push_eax              # v (local)
8D85 44000000 # lea_eax,[ebp+DWORD] %68
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # 15
B8 0F000000 #   mov_eax, %15
5B                # pop_ebx               # &
21D8 #  and_eax,ebx
50               #  push_eax              # 10
B8 0A000000 #   mov_eax, %10
5B                # pop_ebx               # <
39C3 #  cmp_eax_ebx
0F92C0 #    setb_al
0FB6C0 #    movzx_eax,al
85C0           #    test_eax,eax          # if
58 #    pop_eax
0F84 %___sys_printf_else39 #    je %___sys_printf_else39
50               #  push_eax              # 48
B8 30000000 #   mov_eax, %48
E9 %___sys_printf_else_end39 #  jmp %___sys_printf_else_end39
:___sys_printf_else39 #:___sys_printf_else39
50               #  push_eax              # 97
B8 61000000 #   mov_eax, %97
50               #  push_eax              # 10
B8 0A000000 #   mov_eax, %10
5B                # pop_ebx               # -
29C3 #  sub_ebx,eax
89D8 #  mov_eax,ebx
:___sys_printf_else_end39 #:___sys_printf_else_end39
50               #  push_eax              # v (local)
8D85 44000000 # lea_eax,[ebp+DWORD] %68
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # 15
B8 0F000000 #   mov_eax, %15
5B                # pop_ebx               # &
21D8 #  and_eax,ebx
5B                # pop_ebx               # +
01D8 #  add_eax,ebx
5B                # pop_ebx               # =1
8803 #  mov_[ebx],al
58                # pop_eax               # ;
50               #  push_eax              # v (local)
8D85 44000000 # lea_eax,[ebp+DWORD] %68
50               #  push_eax              # $ (dup)
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # 4
B8 04000000 #   mov_eax, %4
89C1            #   mov_ecx,eax           # >>
58 #    pop_eax
D3E8 #  shr_eax,cl
5B                # pop_ebx               # =
8903 #  mov_[ebx],eax
58                # pop_eax               # ;
E9 %___sys_printf_loop37 #  jmp %___sys_printf_loop37
:___sys_printf_loop_end37 #:___sys_printf_loop_end37
 ## stdlib.c 396
50               #  push_eax              # s (local)
8D85 30000000 # lea_eax,[ebp+DWORD] %48
50               #  push_eax              # buffer (local)
8D85 18000000 # lea_eax,[ebp+DWORD] %24
50               #  push_eax              # l (local)
8D85 2C000000 # lea_eax,[ebp+DWORD] %44
8B00          # mov_eax,[eax]         # ?
5B                # pop_ebx               # +
01D8 #  add_eax,ebx
5B                # pop_ebx               # =
8903 #  mov_[ebx],eax
58                # pop_eax               # ;
 ## stdlib.c 397
50               #  push_eax              # l (local)
8D85 2C000000 # lea_eax,[ebp+DWORD] %44
50               #  push_eax              # 20
B8 14000000 #   mov_eax, %20
50               #  push_eax              # l (local)
8D85 2C000000 # lea_eax,[ebp+DWORD] %44
8B00          # mov_eax,[eax]         # ?
5B                # pop_ebx               # -
29C3 #  sub_ebx,eax
89D8 #  mov_eax,ebx
5B                # pop_ebx               # =
8903 #  mov_[ebx],eax
58                # pop_eax               # ;
:___sys_printf_else_end36 #:___sys_printf_else_end36
E9 %___sys_printf_else_end35 #  jmp %___sys_printf_else_end35
:___sys_printf_else35 #:___sys_printf_else35
 ## stdlib.c 400
50               #  push_eax              # format (local)
8D85 08000000 # lea_eax,[ebp+DWORD] %8
8B00          # mov_eax,[eax]         # ?
8A00           #    mov_al,[eax]          # ?1
0FB6C0 #    movzx_eax,al
0FBEC0           #  movsx_eax,al          # char
50               #  push_eax              # 99
B8 63000000 #   mov_eax, %99
5B                # pop_ebx               # ==
39C3 #  cmp_eax_ebx
0F94C0 #    sete_al
0FB6C0 #    movzx_eax,al
85C0           #    test_eax,eax          # if
58 #    pop_eax
0F84 %___sys_printf_else40 #    je %___sys_printf_else40
 ## stdlib.c 401
 ## stdlib.c 402
50               #  push_eax              # buffer (local)
8D85 18000000 # lea_eax,[ebp+DWORD] %24
50               #  push_eax              # 0
B8 00000000 #   mov_eax, %0
5B                # pop_ebx               # +
01D8 #  add_eax,ebx
50               #  push_eax              # args (local)
8D85 04000000 # lea_eax,[ebp+DWORD] %4
50               #  push_eax              # $ (dup)
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # 4
B8 04000000 #   mov_eax, %4
5B                # pop_ebx               # +
01D8 #  add_eax,ebx
5B                # pop_ebx               # =
8903 #  mov_[ebx],eax
50               #  push_eax              # 4
B8 04000000 #   mov_eax, %4
5B                # pop_ebx               # -
29C3 #  sub_ebx,eax
89D8 #  mov_eax,ebx
8B00          # mov_eax,[eax]         # ?
5B                # pop_ebx               # =1
8803 #  mov_[ebx],al
58                # pop_eax               # ;
E9 %___sys_printf_else_end40 #  jmp %___sys_printf_else_end40
:___sys_printf_else40 #:___sys_printf_else40
 ## stdlib.c 405
 ## stdlib.c 406
50               #  push_eax              # '__sys_printf %'
B8 &string_0 #  mov_eax, &string_0
50               #  push_eax              # stderr (global)
B8 &g_stderr #  mov_eax, &g_stderr
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # fputs (function)
B8 &f_fputs #   mov_eax, &f_fputs
81C5 44000000          #    add_ebp, %68         # ()
FFD0 #  call_eax
81ED 44000000 # sub_ebp, %68
58                # pop_eax               # ;
 ## stdlib.c 407
50               #  push_eax              # format (local)
8D85 08000000 # lea_eax,[ebp+DWORD] %8
8B00          # mov_eax,[eax]         # ?
8A00           #    mov_al,[eax]          # ?1
0FB6C0 #    movzx_eax,al
0FBEC0           #  movsx_eax,al          # char
50               #  push_eax              # stderr (global)
B8 &g_stderr #  mov_eax, &g_stderr
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # fputc (function)
B8 &f_fputc #   mov_eax, &f_fputc
81C5 44000000          #    add_ebp, %68         # ()
FFD0 #  call_eax
81ED 44000000 # sub_ebp, %68
58                # pop_eax               # ;
 ## stdlib.c 408
50               #  push_eax              # ' '
B8 &string_1 #  mov_eax, &string_1
50               #  push_eax              # stderr (global)
B8 &g_stderr #  mov_eax, &g_stderr
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # fputs (function)
B8 &f_fputs #   mov_eax, &f_fputs
81C5 44000000          #    add_ebp, %68         # ()
FFD0 #  call_eax
81ED 44000000 # sub_ebp, %68
58                # pop_eax               # ;
 ## stdlib.c 409
50               #  push_eax              # org_format (local)
8D85 38000000 # lea_eax,[ebp+DWORD] %56
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # stderr (global)
B8 &g_stderr #  mov_eax, &g_stderr
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # fputs (function)
B8 &f_fputs #   mov_eax, &f_fputs
81C5 44000000          #    add_ebp, %68         # ()
FFD0 #  call_eax
81ED 44000000 # sub_ebp, %68
58                # pop_eax               # ;
 ## stdlib.c 410
50               #  push_eax              # '\n'
B8 &string_2 #  mov_eax, &string_2
50               #  push_eax              # stderr (global)
B8 &g_stderr #  mov_eax, &g_stderr
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # fputs (function)
B8 &f_fputs #   mov_eax, &f_fputs
81C5 44000000          #    add_ebp, %68         # ()
FFD0 #  call_eax
81ED 44000000 # sub_ebp, %68
58                # pop_eax               # ;
 ## stdlib.c 411
50               #  push_eax              # 1
B8 01000000 #   mov_eax, %1
50               #  push_eax              # exit (function)
B8 &f_exit #    mov_eax, &f_exit
81C5 44000000          #    add_ebp, %68         # ()
FFD0 #  call_eax
81ED 44000000 # sub_ebp, %68
58                # pop_eax               # ;
:___sys_printf_else_end40 #:___sys_printf_else_end40
:___sys_printf_else_end35 #:___sys_printf_else_end35
:___sys_printf_else_end30 #:___sys_printf_else_end30
:___sys_printf_else_end16 #:___sys_printf_else_end16
:___sys_printf_else_end15 #:___sys_printf_else_end15
:___sys_printf_else_end10 #:___sys_printf_else_end10
E9 %___sys_printf_else_end9 #   jmp %___sys_printf_else_end9
:___sys_printf_else9 #:___sys_printf_else9
 ## stdlib.c 416
 ## stdlib.c 417
50               #  push_eax              # buffer (local)
8D85 18000000 # lea_eax,[ebp+DWORD] %24
50               #  push_eax              # 0
B8 00000000 #   mov_eax, %0
5B                # pop_ebx               # +
01D8 #  add_eax,ebx
50               #  push_eax              # format (local)
8D85 08000000 # lea_eax,[ebp+DWORD] %8
8B00          # mov_eax,[eax]         # ?
8A00           #    mov_al,[eax]          # ?1
0FB6C0 #    movzx_eax,al
0FBEC0           #  movsx_eax,al          # char
5B                # pop_ebx               # =1
8803 #  mov_[ebx],al
58                # pop_eax               # ;
 ## stdlib.c 418
50               #  push_eax              # s (local)
8D85 30000000 # lea_eax,[ebp+DWORD] %48
50               #  push_eax              # buffer (local)
8D85 18000000 # lea_eax,[ebp+DWORD] %24
5B                # pop_ebx               # =
8903 #  mov_[ebx],eax
58                # pop_eax               # ;
 ## stdlib.c 419
50               #  push_eax              # l (local)
8D85 2C000000 # lea_eax,[ebp+DWORD] %44
50               #  push_eax              # 1
B8 01000000 #   mov_eax, %1
5B                # pop_ebx               # =
8903 #  mov_[ebx],eax
58                # pop_eax               # ;
:___sys_printf_else_end9 #:___sys_printf_else_end9
 ## stdlib.c 421
50               #  push_eax              # format (local)
8D85 08000000 # lea_eax,[ebp+DWORD] %8
50               #  push_eax              # $ (dup)
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # 1
B8 01000000 #   mov_eax, %1
5B                # pop_ebx               # +
01D8 #  add_eax,ebx
5B                # pop_ebx               # =
8903 #  mov_[ebx],eax
50               #  push_eax              # 1
B8 01000000 #   mov_eax, %1
5B                # pop_ebx               # -
29C3 #  sub_ebx,eax
89D8 #  mov_eax,ebx
58                # pop_eax               # ;
:___sys_printf_else7  #:___sys_printf_else7 # no else
E9 %___sys_printf_loop1 #   jmp %___sys_printf_loop1
:___sys_printf_loop_end1 #:___sys_printf_loop_end1
 ## stdlib.c 424
50               #  push_eax              # len (local)
8D85 0C000000 # lea_eax,[ebp+DWORD] %12
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # 0
B8 00000000 #   mov_eax, %0
5B                # pop_ebx               # !=
39C3 #  cmp_eax_ebx
0F95C0 #    setne_al
0FB6C0 #    movzx_eax,al
85C0           #    test_eax,eax          # &&
0F84 %___sys_printf_and_end41 # je %___sys_printf_and_end41
58 #    pop_eax
50               #  push_eax              # trg (local)
8D85 10000000 # lea_eax,[ebp+DWORD] %16
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # 0
B8 00000000 #   mov_eax, %0
5B                # pop_ebx               # !=
39C3 #  cmp_eax_ebx
0F95C0 #    setne_al
0FB6C0 #    movzx_eax,al
:___sys_printf_and_end41 #:___sys_printf_and_end41
85C0           #    test_eax,eax          # if
58 #    pop_eax
0F84 %___sys_printf_else42 #    je %___sys_printf_else42
 ## stdlib.c 425
50               #  push_eax              # trg (local)
8D85 10000000 # lea_eax,[ebp+DWORD] %16
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # 0
B8 00000000 #   mov_eax, %0
5B                # pop_ebx               # =1
8803 #  mov_[ebx],al
58                # pop_eax               # ;
 ## stdlib.c 426
:___sys_printf_else42  #:___sys_printf_else42 # no else
50               #  push_eax              # cnt (local)
8D85 34000000 # lea_eax,[ebp+DWORD] %52
8B00          # mov_eax,[eax]         # ?
8B5D00          #   mov_ebx,[ebp]         # return
53 #    push_ebx
C3 #    ret
50               #  push_eax              # 0
B8 00000000 #   mov_eax, %0
8B5D00          #   mov_ebx,[ebp]         # return
53 #    push_ebx
C3 #    ret
 #
:f_va_end #:f_va_end
58 #    pop_eax
894500 #    mov_[ebp],eax
58 #    pop_eax
50               #  push_eax              # ap (local)
8D85 04000000 # lea_eax,[ebp+DWORD] %4
5B                # pop_ebx               # =:
8918 #  mov_[eax],ebx
58 #    pop_eax
50               #  push_eax              # 0
B8 00000000 #   mov_eax, %0
8B5D00          #   mov_ebx,[ebp]         # return
53 #    push_ebx
C3 #    ret
 #
:f_fprintf #:f_fprintf
58 #    pop_eax
894500 #    mov_[ebp],eax
58 #    pop_eax
50               #  push_eax              # __var_args (local)
8D85 04000000 # lea_eax,[ebp+DWORD] %4
5B                # pop_ebx               # =:
8918 #  mov_[eax],ebx
58 #    pop_eax
50               #  push_eax              # format (local)
8D85 08000000 # lea_eax,[ebp+DWORD] %8
5B                # pop_ebx               # =:
8918 #  mov_[eax],ebx
58 #    pop_eax
50               #  push_eax              # stream (local)
8D85 0C000000 # lea_eax,[ebp+DWORD] %12
5B                # pop_ebx               # =:
8918 #  mov_[eax],ebx
58 #    pop_eax
 ## stdlib.c 435
50               #  push_eax              # ap (local)
8D85 10000000 # lea_eax,[ebp+DWORD] %16
50               #  push_eax              # __var_args (local)
8D85 04000000 # lea_eax,[ebp+DWORD] %4
8B00          # mov_eax,[eax]         # ?
5B                # pop_ebx               # =
8903 #  mov_[ebx],eax
58                # pop_eax               # ;
 ## stdlib.c 436
50               #  push_eax              # stream (local)
8D85 0C000000 # lea_eax,[ebp+DWORD] %12
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # 0
B8 00000000 #   mov_eax, %0
50               #  push_eax              # 4294967295
B8 FFFFFFFF #   mov_eax, %4294967295
50               #  push_eax              # format (local)
8D85 08000000 # lea_eax,[ebp+DWORD] %8
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # ap (local)
8D85 10000000 # lea_eax,[ebp+DWORD] %16
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # __sys_printf (function)
B8 &f___sys_printf #    mov_eax, &f___sys_printf
81C5 14000000          #    add_ebp, %20         # ()
FFD0 #  call_eax
81ED 14000000 # sub_ebp, %20
8B5D00          #   mov_ebx,[ebp]         # return
53 #    push_ebx
C3 #    ret
50               #  push_eax              # 0
B8 00000000 #   mov_eax, %0
8B5D00          #   mov_ebx,[ebp]         # return
53 #    push_ebx
C3 #    ret
 #
:f_printf #:f_printf
58 #    pop_eax
894500 #    mov_[ebp],eax
58 #    pop_eax
50               #  push_eax              # __var_args (local)
8D85 04000000 # lea_eax,[ebp+DWORD] %4
5B                # pop_ebx               # =:
8918 #  mov_[eax],ebx
58 #    pop_eax
50               #  push_eax              # format (local)
8D85 08000000 # lea_eax,[ebp+DWORD] %8
5B                # pop_ebx               # =:
8918 #  mov_[eax],ebx
58 #    pop_eax
 ## stdlib.c 442
50               #  push_eax              # ap (local)
8D85 0C000000 # lea_eax,[ebp+DWORD] %12
50               #  push_eax              # __var_args (local)
8D85 04000000 # lea_eax,[ebp+DWORD] %4
8B00          # mov_eax,[eax]         # ?
5B                # pop_ebx               # =
8903 #  mov_[ebx],eax
58                # pop_eax               # ;
 ## stdlib.c 443
50               #  push_eax              # stdout (global)
B8 &g_stdout #  mov_eax, &g_stdout
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # 0
B8 00000000 #   mov_eax, %0
50               #  push_eax              # 4294967295
B8 FFFFFFFF #   mov_eax, %4294967295
50               #  push_eax              # format (local)
8D85 08000000 # lea_eax,[ebp+DWORD] %8
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # ap (local)
8D85 0C000000 # lea_eax,[ebp+DWORD] %12
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # __sys_printf (function)
B8 &f___sys_printf #    mov_eax, &f___sys_printf
81C5 10000000          #    add_ebp, %16         # ()
FFD0 #  call_eax
81ED 10000000 # sub_ebp, %16
8B5D00          #   mov_ebx,[ebp]         # return
53 #    push_ebx
C3 #    ret
50               #  push_eax              # 0
B8 00000000 #   mov_eax, %0
8B5D00          #   mov_ebx,[ebp]         # return
53 #    push_ebx
C3 #    ret
 #
:f_sprintf #:f_sprintf
58 #    pop_eax
894500 #    mov_[ebp],eax
58 #    pop_eax
50               #  push_eax              # __var_args (local)
8D85 04000000 # lea_eax,[ebp+DWORD] %4
5B                # pop_ebx               # =:
8918 #  mov_[eax],ebx
58 #    pop_eax
50               #  push_eax              # format (local)
8D85 08000000 # lea_eax,[ebp+DWORD] %8
5B                # pop_ebx               # =:
8918 #  mov_[eax],ebx
58 #    pop_eax
50               #  push_eax              # str (local)
8D85 0C000000 # lea_eax,[ebp+DWORD] %12
5B                # pop_ebx               # =:
8918 #  mov_[eax],ebx
58 #    pop_eax
 ## stdlib.c 449
50               #  push_eax              # ap (local)
8D85 10000000 # lea_eax,[ebp+DWORD] %16
50               #  push_eax              # __var_args (local)
8D85 04000000 # lea_eax,[ebp+DWORD] %4
8B00          # mov_eax,[eax]         # ?
5B                # pop_ebx               # =
8903 #  mov_[ebx],eax
58                # pop_eax               # ;
 ## stdlib.c 450
50               #  push_eax              # 0
B8 00000000 #   mov_eax, %0
50               #  push_eax              # str (local)
8D85 0C000000 # lea_eax,[ebp+DWORD] %12
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # 4294967295
B8 FFFFFFFF #   mov_eax, %4294967295
50               #  push_eax              # format (local)
8D85 08000000 # lea_eax,[ebp+DWORD] %8
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # ap (local)
8D85 10000000 # lea_eax,[ebp+DWORD] %16
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # __sys_printf (function)
B8 &f___sys_printf #    mov_eax, &f___sys_printf
81C5 14000000          #    add_ebp, %20         # ()
FFD0 #  call_eax
81ED 14000000 # sub_ebp, %20
8B5D00          #   mov_ebx,[ebp]         # return
53 #    push_ebx
C3 #    ret
50               #  push_eax              # 0
B8 00000000 #   mov_eax, %0
8B5D00          #   mov_ebx,[ebp]         # return
53 #    push_ebx
C3 #    ret
 #
:f_snprintf #:f_snprintf
58 #    pop_eax
894500 #    mov_[ebp],eax
58 #    pop_eax
50               #  push_eax              # __var_args (local)
8D85 04000000 # lea_eax,[ebp+DWORD] %4
5B                # pop_ebx               # =:
8918 #  mov_[eax],ebx
58 #    pop_eax
50               #  push_eax              # format (local)
8D85 08000000 # lea_eax,[ebp+DWORD] %8
5B                # pop_ebx               # =:
8918 #  mov_[eax],ebx
58 #    pop_eax
50               #  push_eax              # size (local)
8D85 0C000000 # lea_eax,[ebp+DWORD] %12
5B                # pop_ebx               # =:
8918 #  mov_[eax],ebx
58 #    pop_eax
50               #  push_eax              # str (local)
8D85 10000000 # lea_eax,[ebp+DWORD] %16
5B                # pop_ebx               # =:
8918 #  mov_[eax],ebx
58 #    pop_eax
 ## stdlib.c 455
50               #  push_eax              # ap (local)
8D85 14000000 # lea_eax,[ebp+DWORD] %20
50               #  push_eax              # __var_args (local)
8D85 04000000 # lea_eax,[ebp+DWORD] %4
8B00          # mov_eax,[eax]         # ?
5B                # pop_ebx               # =
8903 #  mov_[ebx],eax
58                # pop_eax               # ;
 ## stdlib.c 456
50               #  push_eax              # 0
B8 00000000 #   mov_eax, %0
50               #  push_eax              # str (local)
8D85 10000000 # lea_eax,[ebp+DWORD] %16
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # size (local)
8D85 0C000000 # lea_eax,[ebp+DWORD] %12
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # format (local)
8D85 08000000 # lea_eax,[ebp+DWORD] %8
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # ap (local)
8D85 14000000 # lea_eax,[ebp+DWORD] %20
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # __sys_printf (function)
B8 &f___sys_printf #    mov_eax, &f___sys_printf
81C5 18000000          #    add_ebp, %24         # ()
FFD0 #  call_eax
81ED 18000000 # sub_ebp, %24
8B5D00          #   mov_ebx,[ebp]         # return
53 #    push_ebx
C3 #    ret
50               #  push_eax              # 0
B8 00000000 #   mov_eax, %0
8B5D00          #   mov_ebx,[ebp]         # return
53 #    push_ebx
C3 #    ret
 #
:f_vsnprintf #:f_vsnprintf
58 #    pop_eax
894500 #    mov_[ebp],eax
58 #    pop_eax
50               #  push_eax              # ap (local)
8D85 04000000 # lea_eax,[ebp+DWORD] %4
5B                # pop_ebx               # =:
8918 #  mov_[eax],ebx
58 #    pop_eax
50               #  push_eax              # format (local)
8D85 08000000 # lea_eax,[ebp+DWORD] %8
5B                # pop_ebx               # =:
8918 #  mov_[eax],ebx
58 #    pop_eax
50               #  push_eax              # size (local)
8D85 0C000000 # lea_eax,[ebp+DWORD] %12
5B                # pop_ebx               # =:
8918 #  mov_[eax],ebx
58 #    pop_eax
50               #  push_eax              # str (local)
8D85 10000000 # lea_eax,[ebp+DWORD] %16
5B                # pop_ebx               # =:
8918 #  mov_[eax],ebx
58 #    pop_eax
 ## stdlib.c 461
50               #  push_eax              # 0
B8 00000000 #   mov_eax, %0
50               #  push_eax              # str (local)
8D85 10000000 # lea_eax,[ebp+DWORD] %16
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # size (local)
8D85 0C000000 # lea_eax,[ebp+DWORD] %12
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # format (local)
8D85 08000000 # lea_eax,[ebp+DWORD] %8
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # ap (local)
8D85 04000000 # lea_eax,[ebp+DWORD] %4
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # __sys_printf (function)
B8 &f___sys_printf #    mov_eax, &f___sys_printf
81C5 14000000          #    add_ebp, %20         # ()
FFD0 #  call_eax
81ED 14000000 # sub_ebp, %20
8B5D00          #   mov_ebx,[ebp]         # return
53 #    push_ebx
C3 #    ret
50               #  push_eax              # 0
B8 00000000 #   mov_eax, %0
8B5D00          #   mov_ebx,[ebp]         # return
53 #    push_ebx
C3 #    ret
 #
:f_open #:f_open
58 #    pop_eax
894500 #    mov_[ebp],eax
58 #    pop_eax
50               #  push_eax              # __var_args (local)
8D85 04000000 # lea_eax,[ebp+DWORD] %4
5B                # pop_ebx               # =:
8918 #  mov_[eax],ebx
58 #    pop_eax
50               #  push_eax              # flag (local)
8D85 08000000 # lea_eax,[ebp+DWORD] %8
5B                # pop_ebx               # =:
8918 #  mov_[eax],ebx
58 #    pop_eax
50               #  push_eax              # filename (local)
8D85 0C000000 # lea_eax,[ebp+DWORD] %12
5B                # pop_ebx               # =:
8918 #  mov_[eax],ebx
58 #    pop_eax
50               #  push_eax              # mode (local)
8D85 10000000 # lea_eax,[ebp+DWORD] %16
50               #  push_eax              # 0
B8 00000000 #   mov_eax, %0
5B                # pop_ebx               # =
8903 #  mov_[ebx],eax
58                # pop_eax               # ;
 ## stdlib.c 477
50               #  push_eax              # flag (local)
8D85 08000000 # lea_eax,[ebp+DWORD] %8
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # 1
B8 01000000 #   mov_eax, %1
5B                # pop_ebx               # &
21D8 #  and_eax,ebx
50               #  push_eax              # 0
B8 00000000 #   mov_eax, %0
5B                # pop_ebx               # !=
39C3 #  cmp_eax_ebx
0F95C0 #    setne_al
0FB6C0 #    movzx_eax,al
85C0           #    test_eax,eax          # if
58 #    pop_eax
0F84 %_open_else1 # je %_open_else1
 ## stdlib.c 478
 ## stdlib.c 480
50               #  push_eax              # ap (local)
8D85 14000000 # lea_eax,[ebp+DWORD] %20
50               #  push_eax              # __var_args (local)
8D85 04000000 # lea_eax,[ebp+DWORD] %4
8B00          # mov_eax,[eax]         # ?
5B                # pop_ebx               # =
8903 #  mov_[ebx],eax
58                # pop_eax               # ;
 ## stdlib.c 481
50               #  push_eax              # mode (local)
8D85 10000000 # lea_eax,[ebp+DWORD] %16
50               #  push_eax              # ap (local)
8D85 14000000 # lea_eax,[ebp+DWORD] %20
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # 0
B8 00000000 #   mov_eax, %0
50               #  push_eax              # 4
B8 04000000 #   mov_eax, %4
5B                # pop_ebx               # *
F7E3 #  mul_ebx
5B                # pop_ebx               # +
01D8 #  add_eax,ebx
8B00          # mov_eax,[eax]         # ?
5B                # pop_ebx               # =
8903 #  mov_[ebx],eax
58                # pop_eax               # ;
 ## stdlib.c 483
:_open_else1  #:_open_else1 # no else
50               #  push_eax              # 5
B8 05000000 #   mov_eax, %5
50               #  push_eax              # filename (local)
8D85 0C000000 # lea_eax,[ebp+DWORD] %12
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # flag (local)
8D85 08000000 # lea_eax,[ebp+DWORD] %8
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # mode (local)
8D85 10000000 # lea_eax,[ebp+DWORD] %16
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # sys_int80 (function)
B8 &f_sys_int80 #   mov_eax, &f_sys_int80
81C5 14000000          #    add_ebp, %20         # ()
FFD0 #  call_eax
81ED 14000000 # sub_ebp, %20
8B5D00          #   mov_ebx,[ebp]         # return
53 #    push_ebx
C3 #    ret
50               #  push_eax              # 0
B8 00000000 #   mov_eax, %0
8B5D00          #   mov_ebx,[ebp]         # return
53 #    push_ebx
C3 #    ret
 #
:f_close #:f_close
58 #    pop_eax
894500 #    mov_[ebp],eax
58 #    pop_eax
50               #  push_eax              # fd (local)
8D85 04000000 # lea_eax,[ebp+DWORD] %4
5B                # pop_ebx               # =:
8918 #  mov_[eax],ebx
58 #    pop_eax
 ## stdlib.c 488
50               #  push_eax              # 6
B8 06000000 #   mov_eax, %6
50               #  push_eax              # fd (local)
8D85 04000000 # lea_eax,[ebp+DWORD] %4
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # 0
B8 00000000 #   mov_eax, %0
50               #  push_eax              # 0
B8 00000000 #   mov_eax, %0
50               #  push_eax              # sys_int80 (function)
B8 &f_sys_int80 #   mov_eax, &f_sys_int80
81C5 08000000          #    add_ebp, %8         # ()
FFD0 #  call_eax
81ED 08000000 # sub_ebp, %8
8B5D00          #   mov_ebx,[ebp]         # return
53 #    push_ebx
C3 #    ret
50               #  push_eax              # 0
B8 00000000 #   mov_eax, %0
8B5D00          #   mov_ebx,[ebp]         # return
53 #    push_ebx
C3 #    ret
 #
:f_read #:f_read
58 #    pop_eax
894500 #    mov_[ebp],eax
58 #    pop_eax
50               #  push_eax              # count (local)
8D85 04000000 # lea_eax,[ebp+DWORD] %4
5B                # pop_ebx               # =:
8918 #  mov_[eax],ebx
58 #    pop_eax
50               #  push_eax              # buf (local)
8D85 08000000 # lea_eax,[ebp+DWORD] %8
5B                # pop_ebx               # =:
8918 #  mov_[eax],ebx
58 #    pop_eax
50               #  push_eax              # fd (local)
8D85 0C000000 # lea_eax,[ebp+DWORD] %12
5B                # pop_ebx               # =:
8918 #  mov_[eax],ebx
58 #    pop_eax
 ## stdlib.c 493
50               #  push_eax              # 3
B8 03000000 #   mov_eax, %3
50               #  push_eax              # fd (local)
8D85 0C000000 # lea_eax,[ebp+DWORD] %12
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # buf (local)
8D85 08000000 # lea_eax,[ebp+DWORD] %8
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # count (local)
8D85 04000000 # lea_eax,[ebp+DWORD] %4
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # sys_int80 (function)
B8 &f_sys_int80 #   mov_eax, &f_sys_int80
81C5 10000000          #    add_ebp, %16         # ()
FFD0 #  call_eax
81ED 10000000 # sub_ebp, %16
8B5D00          #   mov_ebx,[ebp]         # return
53 #    push_ebx
C3 #    ret
50               #  push_eax              # 0
B8 00000000 #   mov_eax, %0
8B5D00          #   mov_ebx,[ebp]         # return
53 #    push_ebx
C3 #    ret
 #
:f_lseek #:f_lseek
58 #    pop_eax
894500 #    mov_[ebp],eax
58 #    pop_eax
50               #  push_eax              # whence (local)
8D85 04000000 # lea_eax,[ebp+DWORD] %4
5B                # pop_ebx               # =:
8918 #  mov_[eax],ebx
58 #    pop_eax
50               #  push_eax              # offset (local)
8D85 08000000 # lea_eax,[ebp+DWORD] %8
5B                # pop_ebx               # =:
8918 #  mov_[eax],ebx
58 #    pop_eax
50               #  push_eax              # fd (local)
8D85 0C000000 # lea_eax,[ebp+DWORD] %12
5B                # pop_ebx               # =:
8918 #  mov_[eax],ebx
58 #    pop_eax
 ## stdlib.c 498
50               #  push_eax              # 19
B8 13000000 #   mov_eax, %19
50               #  push_eax              # fd (local)
8D85 0C000000 # lea_eax,[ebp+DWORD] %12
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # offset (local)
8D85 08000000 # lea_eax,[ebp+DWORD] %8
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # whence (local)
8D85 04000000 # lea_eax,[ebp+DWORD] %4
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # sys_int80 (function)
B8 &f_sys_int80 #   mov_eax, &f_sys_int80
81C5 10000000          #    add_ebp, %16         # ()
FFD0 #  call_eax
81ED 10000000 # sub_ebp, %16
8B5D00          #   mov_ebx,[ebp]         # return
53 #    push_ebx
C3 #    ret
50               #  push_eax              # 0
B8 00000000 #   mov_eax, %0
8B5D00          #   mov_ebx,[ebp]         # return
53 #    push_ebx
C3 #    ret
 #
:f_fopen #:f_fopen
58 #    pop_eax
894500 #    mov_[ebp],eax
58 #    pop_eax
50               #  push_eax              # mode (local)
8D85 04000000 # lea_eax,[ebp+DWORD] %4
5B                # pop_ebx               # =:
8918 #  mov_[eax],ebx
58 #    pop_eax
50               #  push_eax              # pathname (local)
8D85 08000000 # lea_eax,[ebp+DWORD] %8
5B                # pop_ebx               # =:
8918 #  mov_[eax],ebx
58 #    pop_eax
50               #  push_eax              # rw (local)
8D85 0C000000 # lea_eax,[ebp+DWORD] %12
50               #  push_eax              # mode (local)
8D85 04000000 # lea_eax,[ebp+DWORD] %4
8B00          # mov_eax,[eax]         # ?
8A00           #    mov_al,[eax]          # ?1
0FB6C0 #    movzx_eax,al
0FBEC0           #  movsx_eax,al          # char
5B                # pop_ebx               # =1
8803 #  mov_[ebx],al
58                # pop_eax               # ;
 ## stdlib.c 504
50               #  push_eax              # mode (local)
8D85 04000000 # lea_eax,[ebp+DWORD] %4
8B00          # mov_eax,[eax]         # ?
8A00           #    mov_al,[eax]          # ?1
0FB6C0 #    movzx_eax,al
0FBEC0           #  movsx_eax,al          # char
50               #  push_eax              # 114
B8 72000000 #   mov_eax, %114
5B                # pop_ebx               # ==
39C3 #  cmp_eax_ebx
0F94C0 #    sete_al
0FB6C0 #    movzx_eax,al
85C0           #    test_eax,eax          # ||
0F85 %_fopen_or_end1 #  jne %_fopen_or_end1
58 #    pop_eax
50               #  push_eax              # mode (local)
8D85 04000000 # lea_eax,[ebp+DWORD] %4
8B00          # mov_eax,[eax]         # ?
8A00           #    mov_al,[eax]          # ?1
0FB6C0 #    movzx_eax,al
0FBEC0           #  movsx_eax,al          # char
50               #  push_eax              # 119
B8 77000000 #   mov_eax, %119
5B                # pop_ebx               # ==
39C3 #  cmp_eax_ebx
0F94C0 #    sete_al
0FB6C0 #    movzx_eax,al
:_fopen_or_end1 #:_fopen_or_end1
85C0           #    test_eax,eax          # if
58 #    pop_eax
0F84 %_fopen_else2 #    je %_fopen_else2
 ## stdlib.c 505
50               #  push_eax              # mode (local)
8D85 04000000 # lea_eax,[ebp+DWORD] %4
50               #  push_eax              # $ (dup)
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # 1
B8 01000000 #   mov_eax, %1
5B                # pop_ebx               # +
01D8 #  add_eax,ebx
5B                # pop_ebx               # =
8903 #  mov_[ebx],eax
50               #  push_eax              # 1
B8 01000000 #   mov_eax, %1
5B                # pop_ebx               # -
29C3 #  sub_ebx,eax
89D8 #  mov_eax,ebx
58                # pop_eax               # ;
:_fopen_else2  #:_fopen_else2 # no else
50               #  push_eax              # bin (local)
8D85 10000000 # lea_eax,[ebp+DWORD] %16
50               #  push_eax              # 0
B8 00000000 #   mov_eax, %0
5B                # pop_ebx               # =
8903 #  mov_[ebx],eax
58                # pop_eax               # ;
 ## stdlib.c 507
50               #  push_eax              # mode (local)
8D85 04000000 # lea_eax,[ebp+DWORD] %4
8B00          # mov_eax,[eax]         # ?
8A00           #    mov_al,[eax]          # ?1
0FB6C0 #    movzx_eax,al
0FBEC0           #  movsx_eax,al          # char
50               #  push_eax              # 98
B8 62000000 #   mov_eax, %98
5B                # pop_ebx               # ==
39C3 #  cmp_eax_ebx
0F94C0 #    sete_al
0FB6C0 #    movzx_eax,al
85C0           #    test_eax,eax          # if
58 #    pop_eax
0F84 %_fopen_else3 #    je %_fopen_else3
 ## stdlib.c 508
 ## stdlib.c 509
50               #  push_eax              # bin (local)
8D85 10000000 # lea_eax,[ebp+DWORD] %16
50               #  push_eax              # 1
B8 01000000 #   mov_eax, %1
5B                # pop_ebx               # =
8903 #  mov_[ebx],eax
58                # pop_eax               # ;
 ## stdlib.c 510
50               #  push_eax              # mode (local)
8D85 04000000 # lea_eax,[ebp+DWORD] %4
50               #  push_eax              # $ (dup)
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # 1
B8 01000000 #   mov_eax, %1
5B                # pop_ebx               # +
01D8 #  add_eax,ebx
5B                # pop_ebx               # =
8903 #  mov_[ebx],eax
50               #  push_eax              # 1
B8 01000000 #   mov_eax, %1
5B                # pop_ebx               # -
29C3 #  sub_ebx,eax
89D8 #  mov_eax,ebx
58                # pop_eax               # ;
:_fopen_else3  #:_fopen_else3 # no else
50               #  push_eax              # plus (local)
8D85 14000000 # lea_eax,[ebp+DWORD] %20
50               #  push_eax              # 0
B8 00000000 #   mov_eax, %0
5B                # pop_ebx               # =
8903 #  mov_[ebx],eax
58                # pop_eax               # ;
 ## stdlib.c 513
50               #  push_eax              # mode (local)
8D85 04000000 # lea_eax,[ebp+DWORD] %4
8B00          # mov_eax,[eax]         # ?
8A00           #    mov_al,[eax]          # ?1
0FB6C0 #    movzx_eax,al
0FBEC0           #  movsx_eax,al          # char
50               #  push_eax              # 43
B8 2B000000 #   mov_eax, %43
5B                # pop_ebx               # ==
39C3 #  cmp_eax_ebx
0F94C0 #    sete_al
0FB6C0 #    movzx_eax,al
85C0           #    test_eax,eax          # if
58 #    pop_eax
0F84 %_fopen_else4 #    je %_fopen_else4
 ## stdlib.c 514
 ## stdlib.c 515
50               #  push_eax              # plus (local)
8D85 14000000 # lea_eax,[ebp+DWORD] %20
50               #  push_eax              # 1
B8 01000000 #   mov_eax, %1
5B                # pop_ebx               # =
8903 #  mov_[ebx],eax
58                # pop_eax               # ;
 ## stdlib.c 516
50               #  push_eax              # mode (local)
8D85 04000000 # lea_eax,[ebp+DWORD] %4
50               #  push_eax              # $ (dup)
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # 1
B8 01000000 #   mov_eax, %1
5B                # pop_ebx               # +
01D8 #  add_eax,ebx
5B                # pop_ebx               # =
8903 #  mov_[ebx],eax
50               #  push_eax              # 1
B8 01000000 #   mov_eax, %1
5B                # pop_ebx               # -
29C3 #  sub_ebx,eax
89D8 #  mov_eax,ebx
58                # pop_eax               # ;
 ## stdlib.c 518
:_fopen_else4  #:_fopen_else4 # no else
50               #  push_eax              # mode (local)
8D85 04000000 # lea_eax,[ebp+DWORD] %4
8B00          # mov_eax,[eax]         # ?
8A00           #    mov_al,[eax]          # ?1
0FB6C0 #    movzx_eax,al
0FBEC0           #  movsx_eax,al          # char
50               #  push_eax              # 0
B8 00000000 #   mov_eax, %0
5B                # pop_ebx               # !=
39C3 #  cmp_eax_ebx
0F95C0 #    setne_al
0FB6C0 #    movzx_eax,al
85C0           #    test_eax,eax          # if
58 #    pop_eax
0F84 %_fopen_else5 #    je %_fopen_else5
 ## stdlib.c 519
 ## stdlib.c 520
50               #  push_eax              # 'Mode %s should be 'r/w(b)(+)', 'w', or 'wb'\n'
B8 &string_3 #  mov_eax, &string_3
50               #  push_eax              # __var_args (local)
8D85 18000000 # lea_eax,[ebp+DWORD] %24
50               #  push_eax              # mode (local)
8D85 04000000 # lea_eax,[ebp+DWORD] %4
8B00          # mov_eax,[eax]         # ?
5B                # pop_ebx               # =
8903 #  mov_[ebx],eax
58                # pop_eax               # ;
50               #  push_eax              # __var_args (local)
8D85 18000000 # lea_eax,[ebp+DWORD] %24
50               #  push_eax              # printf (function)
B8 &f_printf #  mov_eax, &f_printf
81C5 1C000000          #    add_ebp, %28         # ()
FFD0 #  call_eax
81ED 1C000000 # sub_ebp, %28
58                # pop_eax               # ;
 ## stdlib.c 521
50               #  push_eax              # 0
B8 00000000 #   mov_eax, %0
8B5D00          #   mov_ebx,[ebp]         # return
53 #    push_ebx
C3 #    ret
:_fopen_else5  #:_fopen_else5 # no else
50               #  push_eax              # open_mode (local)
8D85 18000000 # lea_eax,[ebp+DWORD] %24
50               #  push_eax              # rw (local)
8D85 0C000000 # lea_eax,[ebp+DWORD] %12
8A00           #    mov_al,[eax]          # ?1
0FB6C0 #    movzx_eax,al
0FBEC0           #  movsx_eax,al          # char
50               #  push_eax              # 114
B8 72000000 #   mov_eax, %114
5B                # pop_ebx               # ==
39C3 #  cmp_eax_ebx
0F94C0 #    sete_al
0FB6C0 #    movzx_eax,al
85C0           #    test_eax,eax          # if
58 #    pop_eax
0F84 %_fopen_else6 #    je %_fopen_else6
50               #  push_eax              # plus (local)
8D85 14000000 # lea_eax,[ebp+DWORD] %20
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # 1
B8 01000000 #   mov_eax, %1
5B                # pop_ebx               # ==
39C3 #  cmp_eax_ebx
0F94C0 #    sete_al
0FB6C0 #    movzx_eax,al
85C0           #    test_eax,eax          # if
58 #    pop_eax
0F84 %_fopen_else7 #    je %_fopen_else7
50               #  push_eax              # 2
B8 02000000 #   mov_eax, %2
E9 %_fopen_else_end7 #  jmp %_fopen_else_end7
:_fopen_else7 #:_fopen_else7
50               #  push_eax              # 0
B8 00000000 #   mov_eax, %0
:_fopen_else_end7 #:_fopen_else_end7
E9 %_fopen_else_end6 #  jmp %_fopen_else_end6
:_fopen_else6 #:_fopen_else6
50               #  push_eax              # plus (local)
8D85 14000000 # lea_eax,[ebp+DWORD] %20
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # 1
B8 01000000 #   mov_eax, %1
5B                # pop_ebx               # ==
39C3 #  cmp_eax_ebx
0F94C0 #    sete_al
0FB6C0 #    movzx_eax,al
85C0           #    test_eax,eax          # if
58 #    pop_eax
0F84 %_fopen_else8 #    je %_fopen_else8
50               #  push_eax              # 2
B8 02000000 #   mov_eax, %2
E9 %_fopen_else_end8 #  jmp %_fopen_else_end8
:_fopen_else8 #:_fopen_else8
50               #  push_eax              # 1
B8 01000000 #   mov_eax, %1
:_fopen_else_end8 #:_fopen_else_end8
50               #  push_eax              # 64
B8 40000000 #   mov_eax, %64
5B                # pop_ebx               # |
09D8 #  or_eax,ebx
50               #  push_eax              # 512
B8 00020000 #   mov_eax, %512
5B                # pop_ebx               # |
09D8 #  or_eax,ebx
:_fopen_else_end6 #:_fopen_else_end6
5B                # pop_ebx               # =
8903 #  mov_[ebx],eax
58                # pop_eax               # ;
50               #  push_eax              # fh (local)
8D85 1C000000 # lea_eax,[ebp+DWORD] %28
50               #  push_eax              # 5
B8 05000000 #   mov_eax, %5
50               #  push_eax              # pathname (local)
8D85 08000000 # lea_eax,[ebp+DWORD] %8
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # open_mode (local)
8D85 18000000 # lea_eax,[ebp+DWORD] %24
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # 511
B8 FF010000 #   mov_eax, %511
50               #  push_eax              # sys_int80 (function)
B8 &f_sys_int80 #   mov_eax, &f_sys_int80
81C5 20000000          #    add_ebp, %32         # ()
FFD0 #  call_eax
81ED 20000000 # sub_ebp, %32
5B                # pop_ebx               # =
8903 #  mov_[ebx],eax
58                # pop_eax               # ;
 ## stdlib.c 528
50               #  push_eax              # fh (local)
8D85 1C000000 # lea_eax,[ebp+DWORD] %28
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # 0
B8 00000000 #   mov_eax, %0
5B                # pop_ebx               # <s
39C3 #  cmp_eax_ebx
0F9CC0 #    setl_al
0FB6C0 #    movzx_eax,al
85C0           #    test_eax,eax          # if
58 #    pop_eax
0F84 %_fopen_else9 #    je %_fopen_else9
 ## stdlib.c 529
 ## stdlib.c 530
50               #  push_eax              # 'fopen %s %s returned %d\n'
B8 &string_4 #  mov_eax, &string_4
50               #  push_eax              # __var_args (local)
8D85 20000000 # lea_eax,[ebp+DWORD] %32
50               #  push_eax              # pathname (local)
8D85 08000000 # lea_eax,[ebp+DWORD] %8
8B00          # mov_eax,[eax]         # ?
5B                # pop_ebx               # =
8903 #  mov_[ebx],eax
58                # pop_eax               # ;
50               #  push_eax              # __var_args (local)
8D85 20000000 # lea_eax,[ebp+DWORD] %32
50               #  push_eax              # 4
B8 04000000 #   mov_eax, %4
5B                # pop_ebx               # +
01D8 #  add_eax,ebx
50               #  push_eax              # mode (local)
8D85 04000000 # lea_eax,[ebp+DWORD] %4
8B00          # mov_eax,[eax]         # ?
5B                # pop_ebx               # =
8903 #  mov_[ebx],eax
58                # pop_eax               # ;
50               #  push_eax              # __var_args (local)
8D85 20000000 # lea_eax,[ebp+DWORD] %32
50               #  push_eax              # 8
B8 08000000 #   mov_eax, %8
5B                # pop_ebx               # +
01D8 #  add_eax,ebx
50               #  push_eax              # fh (local)
8D85 1C000000 # lea_eax,[ebp+DWORD] %28
8B00          # mov_eax,[eax]         # ?
5B                # pop_ebx               # =
8903 #  mov_[ebx],eax
58                # pop_eax               # ;
50               #  push_eax              # __var_args (local)
8D85 20000000 # lea_eax,[ebp+DWORD] %32
50               #  push_eax              # printf (function)
B8 &f_printf #  mov_eax, &f_printf
81C5 2C000000          #    add_ebp, %44         # ()
FFD0 #  call_eax
81ED 2C000000 # sub_ebp, %44
58                # pop_eax               # ;
 ## stdlib.c 531
50               #  push_eax              # 0
B8 00000000 #   mov_eax, %0
8B5D00          #   mov_ebx,[ebp]         # return
53 #    push_ebx
C3 #    ret
:_fopen_else9  #:_fopen_else9 # no else
50               #  push_eax              # f (local)
8D85 20000000 # lea_eax,[ebp+DWORD] %32
50               #  push_eax              # 8
B8 08000000 #   mov_eax, %8
50               #  push_eax              # malloc (function)
B8 &f_malloc #  mov_eax, &f_malloc
81C5 24000000          #    add_ebp, %36         # ()
FFD0 #  call_eax
81ED 24000000 # sub_ebp, %36
5B                # pop_ebx               # =
8903 #  mov_[ebx],eax
58                # pop_eax               # ;
 ## stdlib.c 534
50               #  push_eax              # f (local)
8D85 20000000 # lea_eax,[ebp+DWORD] %32
8B00          # mov_eax,[eax]         # ->
81C0 00000000 # add_eax, %0
50               #  push_eax              # fh (local)
8D85 1C000000 # lea_eax,[ebp+DWORD] %28
8B00          # mov_eax,[eax]         # ?
5B                # pop_ebx               # =
8903 #  mov_[ebx],eax
58                # pop_eax               # ;
 ## stdlib.c 535
50               #  push_eax              # f (local)
8D85 20000000 # lea_eax,[ebp+DWORD] %32
8B00          # mov_eax,[eax]         # ->
81C0 04000000 # add_eax, %4
50               #  push_eax              # 0
B8 00000000 #   mov_eax, %0
5B                # pop_ebx               # =
8903 #  mov_[ebx],eax
58                # pop_eax               # ;
 ## stdlib.c 536
50               #  push_eax              # f (local)
8D85 20000000 # lea_eax,[ebp+DWORD] %32
8B00          # mov_eax,[eax]         # ?
8B5D00          #   mov_ebx,[ebp]         # return
53 #    push_ebx
C3 #    ret
50               #  push_eax              # 0
B8 00000000 #   mov_eax, %0
8B5D00          #   mov_ebx,[ebp]         # return
53 #    push_ebx
C3 #    ret
 #
:f_fdopen #:f_fdopen
58 #    pop_eax
894500 #    mov_[ebp],eax
58 #    pop_eax
50               #  push_eax              # mode (local)
8D85 04000000 # lea_eax,[ebp+DWORD] %4
5B                # pop_ebx               # =:
8918 #  mov_[eax],ebx
58 #    pop_eax
50               #  push_eax              # fd (local)
8D85 08000000 # lea_eax,[ebp+DWORD] %8
5B                # pop_ebx               # =:
8918 #  mov_[eax],ebx
58 #    pop_eax
50               #  push_eax              # f (local)
8D85 0C000000 # lea_eax,[ebp+DWORD] %12
50               #  push_eax              # 8
B8 08000000 #   mov_eax, %8
50               #  push_eax              # malloc (function)
B8 &f_malloc #  mov_eax, &f_malloc
81C5 10000000          #    add_ebp, %16         # ()
FFD0 #  call_eax
81ED 10000000 # sub_ebp, %16
5B                # pop_ebx               # =
8903 #  mov_[ebx],eax
58                # pop_eax               # ;
 ## stdlib.c 542
50               #  push_eax              # f (local)
8D85 0C000000 # lea_eax,[ebp+DWORD] %12
8B00          # mov_eax,[eax]         # ->
81C0 00000000 # add_eax, %0
50               #  push_eax              # fd (local)
8D85 08000000 # lea_eax,[ebp+DWORD] %8
8B00          # mov_eax,[eax]         # ?
5B                # pop_ebx               # =
8903 #  mov_[ebx],eax
58                # pop_eax               # ;
 ## stdlib.c 543
50               #  push_eax              # f (local)
8D85 0C000000 # lea_eax,[ebp+DWORD] %12
8B00          # mov_eax,[eax]         # ->
81C0 04000000 # add_eax, %4
50               #  push_eax              # 0
B8 00000000 #   mov_eax, %0
5B                # pop_ebx               # =
8903 #  mov_[ebx],eax
58                # pop_eax               # ;
 ## stdlib.c 544
50               #  push_eax              # f (local)
8D85 0C000000 # lea_eax,[ebp+DWORD] %12
8B00          # mov_eax,[eax]         # ?
8B5D00          #   mov_ebx,[ebp]         # return
53 #    push_ebx
C3 #    ret
50               #  push_eax              # 0
B8 00000000 #   mov_eax, %0
8B5D00          #   mov_ebx,[ebp]         # return
53 #    push_ebx
C3 #    ret
 #
:f_fclose #:f_fclose
58 #    pop_eax
894500 #    mov_[ebp],eax
58 #    pop_eax
50               #  push_eax              # stream (local)
8D85 04000000 # lea_eax,[ebp+DWORD] %4
5B                # pop_ebx               # =:
8918 #  mov_[eax],ebx
58 #    pop_eax
 ## stdlib.c 549
50               #  push_eax              # 6
B8 06000000 #   mov_eax, %6
50               #  push_eax              # stream (local)
8D85 04000000 # lea_eax,[ebp+DWORD] %4
8B00          # mov_eax,[eax]         # ->
81C0 00000000 # add_eax, %0
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # 0
B8 00000000 #   mov_eax, %0
50               #  push_eax              # 0
B8 00000000 #   mov_eax, %0
50               #  push_eax              # sys_int80 (function)
B8 &f_sys_int80 #   mov_eax, &f_sys_int80
81C5 08000000          #    add_ebp, %8         # ()
FFD0 #  call_eax
81ED 08000000 # sub_ebp, %8
8B5D00          #   mov_ebx,[ebp]         # return
53 #    push_ebx
C3 #    ret
50               #  push_eax              # 0
B8 00000000 #   mov_eax, %0
8B5D00          #   mov_ebx,[ebp]         # return
53 #    push_ebx
C3 #    ret
 #
:f_fflush #:f_fflush
58 #    pop_eax
894500 #    mov_[ebp],eax
58 #    pop_eax
50               #  push_eax              # stream (local)
8D85 04000000 # lea_eax,[ebp+DWORD] %4
5B                # pop_ebx               # =:
8918 #  mov_[eax],ebx
58 #    pop_eax
 ## stdlib.c 555
50               #  push_eax              # 0
B8 00000000 #   mov_eax, %0
8B5D00          #   mov_ebx,[ebp]         # return
53 #    push_ebx
C3 #    ret
50               #  push_eax              # 0
B8 00000000 #   mov_eax, %0
8B5D00          #   mov_ebx,[ebp]         # return
53 #    push_ebx
C3 #    ret
 #
:f_fseek #:f_fseek
58 #    pop_eax
894500 #    mov_[ebp],eax
58 #    pop_eax
50               #  push_eax              # whence (local)
8D85 04000000 # lea_eax,[ebp+DWORD] %4
5B                # pop_ebx               # =:
8918 #  mov_[eax],ebx
58 #    pop_eax
50               #  push_eax              # offset (local)
8D85 08000000 # lea_eax,[ebp+DWORD] %8
5B                # pop_ebx               # =:
8918 #  mov_[eax],ebx
58 #    pop_eax
50               #  push_eax              # stream (local)
8D85 0C000000 # lea_eax,[ebp+DWORD] %12
5B                # pop_ebx               # =:
8918 #  mov_[eax],ebx
58 #    pop_eax
 ## stdlib.c 560
50               #  push_eax              # stream (local)
8D85 0C000000 # lea_eax,[ebp+DWORD] %12
8B00          # mov_eax,[eax]         # ->
81C0 00000000 # add_eax, %0
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # offset (local)
8D85 08000000 # lea_eax,[ebp+DWORD] %8
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # whence (local)
8D85 04000000 # lea_eax,[ebp+DWORD] %4
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # lseek (function)
B8 &f_lseek #   mov_eax, &f_lseek
81C5 10000000          #    add_ebp, %16         # ()
FFD0 #  call_eax
81ED 10000000 # sub_ebp, %16
8B5D00          #   mov_ebx,[ebp]         # return
53 #    push_ebx
C3 #    ret
50               #  push_eax              # 0
B8 00000000 #   mov_eax, %0
8B5D00          #   mov_ebx,[ebp]         # return
53 #    push_ebx
C3 #    ret
 #
:f_ftell #:f_ftell
58 #    pop_eax
894500 #    mov_[ebp],eax
58 #    pop_eax
50               #  push_eax              # stream (local)
8D85 04000000 # lea_eax,[ebp+DWORD] %4
5B                # pop_ebx               # =:
8918 #  mov_[eax],ebx
58 #    pop_eax
 ## stdlib.c 565
50               #  push_eax              # stream (local)
8D85 04000000 # lea_eax,[ebp+DWORD] %4
8B00          # mov_eax,[eax]         # ->
81C0 00000000 # add_eax, %0
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # 0
B8 00000000 #   mov_eax, %0
50               #  push_eax              # 1
B8 01000000 #   mov_eax, %1
50               #  push_eax              # lseek (function)
B8 &f_lseek #   mov_eax, &f_lseek
81C5 08000000          #    add_ebp, %8         # ()
FFD0 #  call_eax
81ED 08000000 # sub_ebp, %8
8B5D00          #   mov_ebx,[ebp]         # return
53 #    push_ebx
C3 #    ret
50               #  push_eax              # 0
B8 00000000 #   mov_eax, %0
8B5D00          #   mov_ebx,[ebp]         # return
53 #    push_ebx
C3 #    ret
 #
:f_fread #:f_fread
58 #    pop_eax
894500 #    mov_[ebp],eax
58 #    pop_eax
50               #  push_eax              # stream (local)
8D85 04000000 # lea_eax,[ebp+DWORD] %4
5B                # pop_ebx               # =:
8918 #  mov_[eax],ebx
58 #    pop_eax
50               #  push_eax              # nmemb (local)
8D85 08000000 # lea_eax,[ebp+DWORD] %8
5B                # pop_ebx               # =:
8918 #  mov_[eax],ebx
58 #    pop_eax
50               #  push_eax              # size (local)
8D85 0C000000 # lea_eax,[ebp+DWORD] %12
5B                # pop_ebx               # =:
8918 #  mov_[eax],ebx
58 #    pop_eax
50               #  push_eax              # ptr (local)
8D85 10000000 # lea_eax,[ebp+DWORD] %16
5B                # pop_ebx               # =:
8918 #  mov_[eax],ebx
58 #    pop_eax
50               #  push_eax              # s (local)
8D85 14000000 # lea_eax,[ebp+DWORD] %20
50               #  push_eax              # ptr (local)
8D85 10000000 # lea_eax,[ebp+DWORD] %16
8B00          # mov_eax,[eax]         # ?
5B                # pop_ebx               # =
8903 #  mov_[ebx],eax
58                # pop_eax               # ;
 ## stdlib.c 571
50               #  push_eax              # i (local)
8D85 18000000 # lea_eax,[ebp+DWORD] %24
50               #  push_eax              # 0
B8 00000000 #   mov_eax, %0
5B                # pop_ebx               # =
8903 #  mov_[ebx],eax
58                # pop_eax               # ;
:_fread_loop1 #:_fread_loop1
50               #  push_eax              # i (local)
8D85 18000000 # lea_eax,[ebp+DWORD] %24
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # nmemb (local)
8D85 08000000 # lea_eax,[ebp+DWORD] %8
8B00          # mov_eax,[eax]         # ?
5B                # pop_ebx               # <s
39C3 #  cmp_eax_ebx
0F9CC0 #    setl_al
0FB6C0 #    movzx_eax,al
85C0           #    test_eax,eax          # !
0F94C0 #    sete_al
0FB6C0 #    movzx_eax,al
85C0           #    test_eax,eax          # if
58 #    pop_eax
0F84 %_fread_else2 #    je %_fread_else2
E9 %_fread_loop_end1 #  jmp %_fread_loop_end1
 ## stdlib.c 572
:_fread_else2  #:_fread_else2 # no else
50               #  push_eax              # r (local)
8D85 1C000000 # lea_eax,[ebp+DWORD] %28
50               #  push_eax              # stream (local)
8D85 04000000 # lea_eax,[ebp+DWORD] %4
8B00          # mov_eax,[eax]         # ->
81C0 00000000 # add_eax, %0
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # s (local)
8D85 14000000 # lea_eax,[ebp+DWORD] %20
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # size (local)
8D85 0C000000 # lea_eax,[ebp+DWORD] %12
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # read (function)
B8 &f_read #    mov_eax, &f_read
81C5 20000000          #    add_ebp, %32         # ()
FFD0 #  call_eax
81ED 20000000 # sub_ebp, %32
5B                # pop_ebx               # =
8903 #  mov_[ebx],eax
58                # pop_eax               # ;
 ## stdlib.c 574
50               #  push_eax              # r (local)
8D85 1C000000 # lea_eax,[ebp+DWORD] %28
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # size (local)
8D85 0C000000 # lea_eax,[ebp+DWORD] %12
8B00          # mov_eax,[eax]         # ?
5B                # pop_ebx               # <
39C3 #  cmp_eax_ebx
0F92C0 #    setb_al
0FB6C0 #    movzx_eax,al
85C0           #    test_eax,eax          # if
58 #    pop_eax
0F84 %_fread_else3 #    je %_fread_else3
 ## stdlib.c 575
50               #  push_eax              # i (local)
8D85 18000000 # lea_eax,[ebp+DWORD] %24
8B00          # mov_eax,[eax]         # ?
8B5D00          #   mov_ebx,[ebp]         # return
53 #    push_ebx
C3 #    ret
 ## stdlib.c 576
:_fread_else3  #:_fread_else3 # no else
50               #  push_eax              # s (local)
8D85 14000000 # lea_eax,[ebp+DWORD] %20
50               #  push_eax              # $ (dup)
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # size (local)
8D85 0C000000 # lea_eax,[ebp+DWORD] %12
8B00          # mov_eax,[eax]         # ?
5B                # pop_ebx               # +
01D8 #  add_eax,ebx
5B                # pop_ebx               # =
8903 #  mov_[ebx],eax
58                # pop_eax               # ;
50               #  push_eax              # i (local)
8D85 18000000 # lea_eax,[ebp+DWORD] %24
50               #  push_eax              # $ (dup)
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # 1
B8 01000000 #   mov_eax, %1
5B                # pop_ebx               # +
01D8 #  add_eax,ebx
5B                # pop_ebx               # =
8903 #  mov_[ebx],eax
50               #  push_eax              # 1
B8 01000000 #   mov_eax, %1
5B                # pop_ebx               # -
29C3 #  sub_ebx,eax
89D8 #  mov_eax,ebx
58                # pop_eax               # ;
E9 %_fread_loop1 #  jmp %_fread_loop1
:_fread_loop_end1 #:_fread_loop_end1
 ## stdlib.c 578
50               #  push_eax              # nmemb (local)
8D85 08000000 # lea_eax,[ebp+DWORD] %8
8B00          # mov_eax,[eax]         # ?
8B5D00          #   mov_ebx,[ebp]         # return
53 #    push_ebx
C3 #    ret
50               #  push_eax              # 0
B8 00000000 #   mov_eax, %0
8B5D00          #   mov_ebx,[ebp]         # return
53 #    push_ebx
C3 #    ret
 #
:f_lseek #:f_lseek
58 #    pop_eax
894500 #    mov_[ebp],eax
58 #    pop_eax
50               #  push_eax              # whence (local)
8D85 04000000 # lea_eax,[ebp+DWORD] %4
5B                # pop_ebx               # =:
8918 #  mov_[eax],ebx
58 #    pop_eax
50               #  push_eax              # offset (local)
8D85 08000000 # lea_eax,[ebp+DWORD] %8
5B                # pop_ebx               # =:
8918 #  mov_[eax],ebx
58 #    pop_eax
50               #  push_eax              # fd (local)
8D85 0C000000 # lea_eax,[ebp+DWORD] %12
5B                # pop_ebx               # =:
8918 #  mov_[eax],ebx
58 #    pop_eax
 ## stdlib.c 587
50               #  push_eax              # 19
B8 13000000 #   mov_eax, %19
50               #  push_eax              # fd (local)
8D85 0C000000 # lea_eax,[ebp+DWORD] %12
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # offset (local)
8D85 08000000 # lea_eax,[ebp+DWORD] %8
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # whence (local)
8D85 04000000 # lea_eax,[ebp+DWORD] %4
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # sys_int80 (function)
B8 &f_sys_int80 #   mov_eax, &f_sys_int80
81C5 10000000          #    add_ebp, %16         # ()
FFD0 #  call_eax
81ED 10000000 # sub_ebp, %16
8B5D00          #   mov_ebx,[ebp]         # return
53 #    push_ebx
C3 #    ret
50               #  push_eax              # 0
B8 00000000 #   mov_eax, %0
8B5D00          #   mov_ebx,[ebp]         # return
53 #    push_ebx
C3 #    ret
 #
:f_feof #:f_feof
58 #    pop_eax
894500 #    mov_[ebp],eax
58 #    pop_eax
50               #  push_eax              # stream (local)
8D85 04000000 # lea_eax,[ebp+DWORD] %4
5B                # pop_ebx               # =:
8918 #  mov_[eax],ebx
58 #    pop_eax
 ## stdlib.c 592
50               #  push_eax              # stream (local)
8D85 04000000 # lea_eax,[ebp+DWORD] %4
8B00          # mov_eax,[eax]         # ->
81C0 04000000 # add_eax, %4
8B00          # mov_eax,[eax]         # ?
8B5D00          #   mov_ebx,[ebp]         # return
53 #    push_ebx
C3 #    ret
50               #  push_eax              # 0
B8 00000000 #   mov_eax, %0
8B5D00          #   mov_ebx,[ebp]         # return
53 #    push_ebx
C3 #    ret
 #
:f_fgetc #:f_fgetc
58 #    pop_eax
894500 #    mov_[ebp],eax
58 #    pop_eax
50               #  push_eax              # stream (local)
8D85 04000000 # lea_eax,[ebp+DWORD] %4
5B                # pop_ebx               # =:
8918 #  mov_[eax],ebx
58 #    pop_eax
 ## stdlib.c 597
50               #  push_eax              # stream (local)
8D85 04000000 # lea_eax,[ebp+DWORD] %4
8B00          # mov_eax,[eax]         # ->
81C0 04000000 # add_eax, %4
8B00          # mov_eax,[eax]         # ?
85C0           #    test_eax,eax          # if
58 #    pop_eax
0F84 %_fgetc_else1 #    je %_fgetc_else1
 ## stdlib.c 598
50               #  push_eax              # 4294967295
B8 FFFFFFFF #   mov_eax, %4294967295
8B5D00          #   mov_ebx,[ebp]         # return
53 #    push_ebx
C3 #    ret
:_fgetc_else1  #:_fgetc_else1 # no else
50               #  push_eax              # ret (local)
8D85 0C000000 # lea_eax,[ebp+DWORD] %12
50               #  push_eax              # 3
B8 03000000 #   mov_eax, %3
50               #  push_eax              # stream (local)
8D85 04000000 # lea_eax,[ebp+DWORD] %4
8B00          # mov_eax,[eax]         # ->
81C0 00000000 # add_eax, %0
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # ch (local)
8D85 08000000 # lea_eax,[ebp+DWORD] %8
50               #  push_eax              # 1
B8 01000000 #   mov_eax, %1
50               #  push_eax              # sys_int80 (function)
B8 &f_sys_int80 #   mov_eax, &f_sys_int80
81C5 10000000          #    add_ebp, %16         # ()
FFD0 #  call_eax
81ED 10000000 # sub_ebp, %16
5B                # pop_ebx               # =
8903 #  mov_[ebx],eax
58                # pop_eax               # ;
 ## stdlib.c 601
50               #  push_eax              # ret (local)
8D85 0C000000 # lea_eax,[ebp+DWORD] %12
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # 0
B8 00000000 #   mov_eax, %0
5B                # pop_ebx               # <=s
39C3 #  cmp_eax_ebx
0F9EC0 #    setle_al
0FB6C0 #    movzx_eax,al
85C0           #    test_eax,eax          # if
58 #    pop_eax
0F84 %_fgetc_else2 #    je %_fgetc_else2
 ## stdlib.c 602
 ## stdlib.c 603
50               #  push_eax              # stream (local)
8D85 04000000 # lea_eax,[ebp+DWORD] %4
8B00          # mov_eax,[eax]         # ->
81C0 04000000 # add_eax, %4
50               #  push_eax              # 1
B8 01000000 #   mov_eax, %1
5B                # pop_ebx               # =
8903 #  mov_[ebx],eax
58                # pop_eax               # ;
 ## stdlib.c 604
50               #  push_eax              # 4294967295
B8 FFFFFFFF #   mov_eax, %4294967295
8B5D00          #   mov_ebx,[ebp]         # return
53 #    push_ebx
C3 #    ret
 ## stdlib.c 606
:_fgetc_else2  #:_fgetc_else2 # no else
50               #  push_eax              # ch (local)
8D85 08000000 # lea_eax,[ebp+DWORD] %8
8A00           #    mov_al,[eax]          # ?1
0FB6C0 #    movzx_eax,al
8B5D00          #   mov_ebx,[ebp]         # return
53 #    push_ebx
C3 #    ret
50               #  push_eax              # 0
B8 00000000 #   mov_eax, %0
8B5D00          #   mov_ebx,[ebp]         # return
53 #    push_ebx
C3 #    ret
 #
:f_ldexp #:f_ldexp
58 #    pop_eax
894500 #    mov_[ebp],eax
58 #    pop_eax
50               #  push_eax              # exp (local)
8D85 04000000 # lea_eax,[ebp+DWORD] %4
5B                # pop_ebx               # =:
8918 #  mov_[eax],ebx
58 #    pop_eax
50               #  push_eax              # x (local)
8D85 08000000 # lea_eax,[ebp+DWORD] %8
5B                # pop_ebx               # =:
8918 #  mov_[eax],ebx
58 #    pop_eax
50               #  push_eax              # result (local)
8D85 0C000000 # lea_eax,[ebp+DWORD] %12
50               #  push_eax              # x (local)
8D85 08000000 # lea_eax,[ebp+DWORD] %8
8B00          # mov_eax,[eax]         # ?
5B                # pop_ebx               # =
8903 #  mov_[ebx],eax
58                # pop_eax               # ;
 ## stdlib.c 613
50               #  push_eax              # i (local)
8D85 10000000 # lea_eax,[ebp+DWORD] %16
50               #  push_eax              # 1
B8 01000000 #   mov_eax, %1
5B                # pop_ebx               # =
8903 #  mov_[ebx],eax
58                # pop_eax               # ;
:_ldexp_loop1 #:_ldexp_loop1
50               #  push_eax              # i (local)
8D85 10000000 # lea_eax,[ebp+DWORD] %16
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # exp (local)
8D85 04000000 # lea_eax,[ebp+DWORD] %4
8B00          # mov_eax,[eax]         # ?
5B                # pop_ebx               # <s
39C3 #  cmp_eax_ebx
0F9CC0 #    setl_al
0FB6C0 #    movzx_eax,al
85C0           #    test_eax,eax          # !
0F94C0 #    sete_al
0FB6C0 #    movzx_eax,al
85C0           #    test_eax,eax          # if
58 #    pop_eax
0F84 %_ldexp_else2 #    je %_ldexp_else2
E9 %_ldexp_loop_end1 #  jmp %_ldexp_loop_end1
 ## stdlib.c 614
:_ldexp_else2  #:_ldexp_else2 # no else
50               #  push_eax              # result (local)
8D85 0C000000 # lea_eax,[ebp+DWORD] %12
50               #  push_eax              # $ (dup)
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # x (local)
8D85 08000000 # lea_eax,[ebp+DWORD] %8
8B00          # mov_eax,[eax]         # ?
5B                # pop_ebx               # *
F7E3 #  mul_ebx
5B                # pop_ebx               # =
8903 #  mov_[ebx],eax
58                # pop_eax               # ;
50               #  push_eax              # i (local)
8D85 10000000 # lea_eax,[ebp+DWORD] %16
50               #  push_eax              # $ (dup)
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # 1
B8 01000000 #   mov_eax, %1
5B                # pop_ebx               # +
01D8 #  add_eax,ebx
5B                # pop_ebx               # =
8903 #  mov_[ebx],eax
50               #  push_eax              # 1
B8 01000000 #   mov_eax, %1
5B                # pop_ebx               # -
29C3 #  sub_ebx,eax
89D8 #  mov_eax,ebx
58                # pop_eax               # ;
E9 %_ldexp_loop1 #  jmp %_ldexp_loop1
:_ldexp_loop_end1 #:_ldexp_loop_end1
 ## stdlib.c 615
50               #  push_eax              # result (local)
8D85 0C000000 # lea_eax,[ebp+DWORD] %12
8B00          # mov_eax,[eax]         # ?
8B5D00          #   mov_ebx,[ebp]         # return
53 #    push_ebx
C3 #    ret
50               #  push_eax              # 0
B8 00000000 #   mov_eax, %0
8B5D00          #   mov_ebx,[ebp]         # return
53 #    push_ebx
C3 #    ret
 #
:f_time #:f_time
58 #    pop_eax
894500 #    mov_[ebp],eax
58 #    pop_eax
50               #  push_eax              # tloc (local)
8D85 04000000 # lea_eax,[ebp+DWORD] %4
5B                # pop_ebx               # =:
8918 #  mov_[eax],ebx
58 #    pop_eax
 ## stdlib.c 621
50               #  push_eax              # stderr (global)
B8 &g_stderr #  mov_eax, &g_stderr
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # 'TODO time\n'
B8 &string_5 #  mov_eax, &string_5
50               #  push_eax              # 0
B8 00000000 #   mov_eax, %0
50               #  push_eax              # fprintf (function)
B8 &f_fprintf # mov_eax, &f_fprintf
81C5 08000000          #    add_ebp, %8         # ()
FFD0 #  call_eax
81ED 08000000 # sub_ebp, %8
58                # pop_eax               # ;
 ## stdlib.c 621
50               #  push_eax              # 1
B8 01000000 #   mov_eax, %1
50               #  push_eax              # exit (function)
B8 &f_exit #    mov_eax, &f_exit
81C5 08000000          #    add_ebp, %8         # ()
FFD0 #  call_eax
81ED 08000000 # sub_ebp, %8
58                # pop_eax               # ;
50               #  push_eax              # 0
B8 00000000 #   mov_eax, %0
8B5D00          #   mov_ebx,[ebp]         # return
53 #    push_ebx
C3 #    ret
 #
:f_localtime #:f_localtime
58 #    pop_eax
894500 #    mov_[ebp],eax
58 #    pop_eax
50               #  push_eax              # timep (local)
8D85 04000000 # lea_eax,[ebp+DWORD] %4
5B                # pop_ebx               # =:
8918 #  mov_[eax],ebx
58 #    pop_eax
 ## stdlib.c 638
50               #  push_eax              # stderr (global)
B8 &g_stderr #  mov_eax, &g_stderr
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # 'TODO localtime\n'
B8 &string_6 #  mov_eax, &string_6
50               #  push_eax              # 0
B8 00000000 #   mov_eax, %0
50               #  push_eax              # fprintf (function)
B8 &f_fprintf # mov_eax, &f_fprintf
81C5 08000000          #    add_ebp, %8         # ()
FFD0 #  call_eax
81ED 08000000 # sub_ebp, %8
58                # pop_eax               # ;
 ## stdlib.c 638
50               #  push_eax              # 1
B8 01000000 #   mov_eax, %1
50               #  push_eax              # exit (function)
B8 &f_exit #    mov_eax, &f_exit
81C5 08000000          #    add_ebp, %8         # ()
FFD0 #  call_eax
81ED 08000000 # sub_ebp, %8
58                # pop_eax               # ;
50               #  push_eax              # 0
B8 00000000 #   mov_eax, %0
8B5D00          #   mov_ebx,[ebp]         # return
53 #    push_ebx
C3 #    ret
 #
:f_gettimeofday #:f_gettimeofday
58 #    pop_eax
894500 #    mov_[ebp],eax
58 #    pop_eax
50               #  push_eax              # tz (local)
8D85 04000000 # lea_eax,[ebp+DWORD] %4
5B                # pop_ebx               # =:
8918 #  mov_[eax],ebx
58 #    pop_eax
50               #  push_eax              # tv (local)
8D85 08000000 # lea_eax,[ebp+DWORD] %8
5B                # pop_ebx               # =:
8918 #  mov_[eax],ebx
58 #    pop_eax
 ## stdlib.c 651
50               #  push_eax              # 0
B8 00000000 #   mov_eax, %0
8B5D00          #   mov_ebx,[ebp]         # return
53 #    push_ebx
C3 #    ret
50               #  push_eax              # 0
B8 00000000 #   mov_eax, %0
8B5D00          #   mov_ebx,[ebp]         # return
53 #    push_ebx
C3 #    ret
 #
:f_write #:f_write
58 #    pop_eax
894500 #    mov_[ebp],eax
58 #    pop_eax
50               #  push_eax              # count (local)
8D85 04000000 # lea_eax,[ebp+DWORD] %4
5B                # pop_ebx               # =:
8918 #  mov_[eax],ebx
58 #    pop_eax
50               #  push_eax              # buf (local)
8D85 08000000 # lea_eax,[ebp+DWORD] %8
5B                # pop_ebx               # =:
8918 #  mov_[eax],ebx
58 #    pop_eax
50               #  push_eax              # fd (local)
8D85 0C000000 # lea_eax,[ebp+DWORD] %12
5B                # pop_ebx               # =:
8918 #  mov_[eax],ebx
58 #    pop_eax
 ## stdlib.c 667
50               #  push_eax              # 4
B8 04000000 #   mov_eax, %4
50               #  push_eax              # fd (local)
8D85 0C000000 # lea_eax,[ebp+DWORD] %12
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # buf (local)
8D85 08000000 # lea_eax,[ebp+DWORD] %8
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # count (local)
8D85 04000000 # lea_eax,[ebp+DWORD] %4
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # sys_int80 (function)
B8 &f_sys_int80 #   mov_eax, &f_sys_int80
81C5 10000000          #    add_ebp, %16         # ()
FFD0 #  call_eax
81ED 10000000 # sub_ebp, %16
8B5D00          #   mov_ebx,[ebp]         # return
53 #    push_ebx
C3 #    ret
50               #  push_eax              # 0
B8 00000000 #   mov_eax, %0
8B5D00          #   mov_ebx,[ebp]         # return
53 #    push_ebx
C3 #    ret
 #
:f_fileno #:f_fileno
58 #    pop_eax
894500 #    mov_[ebp],eax
58 #    pop_eax
50               #  push_eax              # stream (local)
8D85 04000000 # lea_eax,[ebp+DWORD] %4
5B                # pop_ebx               # =:
8918 #  mov_[eax],ebx
58 #    pop_eax
 ## stdlib.c 672
50               #  push_eax              # stream (local)
8D85 04000000 # lea_eax,[ebp+DWORD] %4
8B00          # mov_eax,[eax]         # ->
81C0 00000000 # add_eax, %0
8B00          # mov_eax,[eax]         # ?
8B5D00          #   mov_ebx,[ebp]         # return
53 #    push_ebx
C3 #    ret
50               #  push_eax              # 0
B8 00000000 #   mov_eax, %0
8B5D00          #   mov_ebx,[ebp]         # return
53 #    push_ebx
C3 #    ret
 #
:f_getcwd #:f_getcwd
58 #    pop_eax
894500 #    mov_[ebp],eax
58 #    pop_eax
50               #  push_eax              # size (local)
8D85 04000000 # lea_eax,[ebp+DWORD] %4
5B                # pop_ebx               # =:
8918 #  mov_[eax],ebx
58 #    pop_eax
50               #  push_eax              # buf (local)
8D85 08000000 # lea_eax,[ebp+DWORD] %8
5B                # pop_ebx               # =:
8918 #  mov_[eax],ebx
58 #    pop_eax
 ## stdlib.c 681
50               #  push_eax              # 183
B8 B7000000 #   mov_eax, %183
50               #  push_eax              # buf (local)
8D85 08000000 # lea_eax,[ebp+DWORD] %8
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # size (local)
8D85 04000000 # lea_eax,[ebp+DWORD] %4
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # 0
B8 00000000 #   mov_eax, %0
50               #  push_eax              # sys_int80 (function)
B8 &f_sys_int80 #   mov_eax, &f_sys_int80
81C5 0C000000          #    add_ebp, %12         # ()
FFD0 #  call_eax
81ED 0C000000 # sub_ebp, %12
58                # pop_eax               # ;
 ## stdlib.c 682
50               #  push_eax              # buf (local)
8D85 08000000 # lea_eax,[ebp+DWORD] %8
8B00          # mov_eax,[eax]         # ?
8B5D00          #   mov_ebx,[ebp]         # return
53 #    push_ebx
C3 #    ret
50               #  push_eax              # 0
B8 00000000 #   mov_eax, %0
8B5D00          #   mov_ebx,[ebp]         # return
53 #    push_ebx
C3 #    ret
 #
:f_getenv #:f_getenv
58 #    pop_eax
894500 #    mov_[ebp],eax
58 #    pop_eax
50               #  push_eax              # name (local)
8D85 04000000 # lea_eax,[ebp+DWORD] %4
5B                # pop_ebx               # =:
8918 #  mov_[eax],ebx
58 #    pop_eax
50               #  push_eax              # len (local)
8D85 08000000 # lea_eax,[ebp+DWORD] %8
50               #  push_eax              # name (local)
8D85 04000000 # lea_eax,[ebp+DWORD] %4
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # strlen (function)
B8 &f_strlen #  mov_eax, &f_strlen
81C5 0C000000          #    add_ebp, %12         # ()
FFD0 #  call_eax
81ED 0C000000 # sub_ebp, %12
5B                # pop_ebx               # =
8903 #  mov_[ebx],eax
58                # pop_eax               # ;
 ## stdlib.c 690
50               #  push_eax              # env (local)
8D85 0C000000 # lea_eax,[ebp+DWORD] %12
50               #  push_eax              # _sys_env (global)
B8 &g__sys_env #    mov_eax, &g__sys_env
8B00          # mov_eax,[eax]         # ?
5B                # pop_ebx               # =
8903 #  mov_[ebx],eax
58                # pop_eax               # ;
:_getenv_loop1 #:_getenv_loop1
50               #  push_eax              # env (local)
8D85 0C000000 # lea_eax,[ebp+DWORD] %12
8B00          # mov_eax,[eax]         # ?
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # 0
B8 00000000 #   mov_eax, %0
5B                # pop_ebx               # !=
39C3 #  cmp_eax_ebx
0F95C0 #    setne_al
0FB6C0 #    movzx_eax,al
85C0           #    test_eax,eax          # !
0F94C0 #    sete_al
0FB6C0 #    movzx_eax,al
85C0           #    test_eax,eax          # if
58 #    pop_eax
0F84 %_getenv_else2 #   je %_getenv_else2
E9 %_getenv_loop_end1 # jmp %_getenv_loop_end1
 ## stdlib.c 691
:_getenv_else2  #:_getenv_else2 # no else
50               #  push_eax              # env (local)
8D85 0C000000 # lea_eax,[ebp+DWORD] %12
8B00          # mov_eax,[eax]         # ?
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # name (local)
8D85 04000000 # lea_eax,[ebp+DWORD] %4
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # len (local)
8D85 08000000 # lea_eax,[ebp+DWORD] %8
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # strncmp (function)
B8 &f_strncmp # mov_eax, &f_strncmp
81C5 10000000          #    add_ebp, %16         # ()
FFD0 #  call_eax
81ED 10000000 # sub_ebp, %16
50               #  push_eax              # 0
B8 00000000 #   mov_eax, %0
5B                # pop_ebx               # ==
39C3 #  cmp_eax_ebx
0F94C0 #    sete_al
0FB6C0 #    movzx_eax,al
85C0           #    test_eax,eax          # &&
0F84 %_getenv_and_end3 #    je %_getenv_and_end3
58 #    pop_eax
50               #  push_eax              # env (local)
8D85 0C000000 # lea_eax,[ebp+DWORD] %12
8B00          # mov_eax,[eax]         # ?
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # len (local)
8D85 08000000 # lea_eax,[ebp+DWORD] %8
8B00          # mov_eax,[eax]         # ?
5B                # pop_ebx               # +
01D8 #  add_eax,ebx
8A00           #    mov_al,[eax]          # ?1
0FB6C0 #    movzx_eax,al
0FBEC0           #  movsx_eax,al          # char
50               #  push_eax              # 61
B8 3D000000 #   mov_eax, %61
5B                # pop_ebx               # ==
39C3 #  cmp_eax_ebx
0F94C0 #    sete_al
0FB6C0 #    movzx_eax,al
:_getenv_and_end3 #:_getenv_and_end3
85C0           #    test_eax,eax          # if
58 #    pop_eax
0F84 %_getenv_else4 #   je %_getenv_else4
 ## stdlib.c 692
50               #  push_eax              # env (local)
8D85 0C000000 # lea_eax,[ebp+DWORD] %12
8B00          # mov_eax,[eax]         # ?
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # len (local)
8D85 08000000 # lea_eax,[ebp+DWORD] %8
8B00          # mov_eax,[eax]         # ?
5B                # pop_ebx               # +
01D8 #  add_eax,ebx
50               #  push_eax              # 1
B8 01000000 #   mov_eax, %1
5B                # pop_ebx               # +
01D8 #  add_eax,ebx
8B5D00          #   mov_ebx,[ebp]         # return
53 #    push_ebx
C3 #    ret
:_getenv_else4  #:_getenv_else4 # no else
50               #  push_eax              # env (local)
8D85 0C000000 # lea_eax,[ebp+DWORD] %12
50               #  push_eax              # $ (dup)
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # 4
B8 04000000 #   mov_eax, %4
5B                # pop_ebx               # +
01D8 #  add_eax,ebx
5B                # pop_ebx               # =
8903 #  mov_[ebx],eax
50               #  push_eax              # 4
B8 04000000 #   mov_eax, %4
5B                # pop_ebx               # -
29C3 #  sub_ebx,eax
89D8 #  mov_eax,ebx
58                # pop_eax               # ;
E9 %_getenv_loop1 # jmp %_getenv_loop1
:_getenv_loop_end1 #:_getenv_loop_end1
50               #  push_eax              # 0
B8 00000000 #   mov_eax, %0
8B5D00          #   mov_ebx,[ebp]         # return
53 #    push_ebx
C3 #    ret
 #
:f_qsort #:f_qsort
58 #    pop_eax
894500 #    mov_[ebp],eax
58 #    pop_eax
50               #  push_eax              # compar (local)
8D85 04000000 # lea_eax,[ebp+DWORD] %4
5B                # pop_ebx               # =:
8918 #  mov_[eax],ebx
58 #    pop_eax
50               #  push_eax              # size (local)
8D85 08000000 # lea_eax,[ebp+DWORD] %8
5B                # pop_ebx               # =:
8918 #  mov_[eax],ebx
58 #    pop_eax
50               #  push_eax              # nmemb (local)
8D85 0C000000 # lea_eax,[ebp+DWORD] %12
5B                # pop_ebx               # =:
8918 #  mov_[eax],ebx
58 #    pop_eax
50               #  push_eax              # base (local)
8D85 10000000 # lea_eax,[ebp+DWORD] %16
5B                # pop_ebx               # =:
8918 #  mov_[eax],ebx
58 #    pop_eax
 ## stdlib.c 698
50               #  push_eax              # go (local)
8D85 14000000 # lea_eax,[ebp+DWORD] %20
50               #  push_eax              # 1
B8 01000000 #   mov_eax, %1
5B                # pop_ebx               # =
8903 #  mov_[ebx],eax
58                # pop_eax               # ;
:_qsort_loop1 #:_qsort_loop1
50               #  push_eax              # go (local)
8D85 14000000 # lea_eax,[ebp+DWORD] %20
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # 1
B8 01000000 #   mov_eax, %1
5B                # pop_ebx               # ==
39C3 #  cmp_eax_ebx
0F94C0 #    sete_al
0FB6C0 #    movzx_eax,al
85C0           #    test_eax,eax          # !
0F94C0 #    sete_al
0FB6C0 #    movzx_eax,al
85C0           #    test_eax,eax          # if
58 #    pop_eax
0F84 %_qsort_else2 #    je %_qsort_else2
E9 %_qsort_loop_end1 #  jmp %_qsort_loop_end1
 ## stdlib.c 699
 ## stdlib.c 700
:_qsort_else2  #:_qsort_else2 # no else
50               #  push_eax              # go (local)
8D85 14000000 # lea_eax,[ebp+DWORD] %20
50               #  push_eax              # 0
B8 00000000 #   mov_eax, %0
5B                # pop_ebx               # =
8903 #  mov_[ebx],eax
58                # pop_eax               # ;
 ## stdlib.c 701
50               #  push_eax              # i (local)
8D85 18000000 # lea_eax,[ebp+DWORD] %24
50               #  push_eax              # 0
B8 00000000 #   mov_eax, %0
5B                # pop_ebx               # =
8903 #  mov_[ebx],eax
58                # pop_eax               # ;
:_qsort_loop3 #:_qsort_loop3
50               #  push_eax              # i (local)
8D85 18000000 # lea_eax,[ebp+DWORD] %24
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # 1
B8 01000000 #   mov_eax, %1
5B                # pop_ebx               # +
01D8 #  add_eax,ebx
50               #  push_eax              # nmemb (local)
8D85 0C000000 # lea_eax,[ebp+DWORD] %12
8B00          # mov_eax,[eax]         # ?
5B                # pop_ebx               # <s
39C3 #  cmp_eax_ebx
0F9CC0 #    setl_al
0FB6C0 #    movzx_eax,al
85C0           #    test_eax,eax          # !
0F94C0 #    sete_al
0FB6C0 #    movzx_eax,al
85C0           #    test_eax,eax          # if
58 #    pop_eax
0F84 %_qsort_else4 #    je %_qsort_else4
E9 %_qsort_loop_end3 #  jmp %_qsort_loop_end3
 ## stdlib.c 702
:_qsort_else4  #:_qsort_else4 # no else
50               #  push_eax              # arg1 (local)
8D85 1C000000 # lea_eax,[ebp+DWORD] %28
50               #  push_eax              # base (local)
8D85 10000000 # lea_eax,[ebp+DWORD] %16
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # i (local)
8D85 18000000 # lea_eax,[ebp+DWORD] %24
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # size (local)
8D85 08000000 # lea_eax,[ebp+DWORD] %8
8B00          # mov_eax,[eax]         # ?
5B                # pop_ebx               # *
F7E3 #  mul_ebx
5B                # pop_ebx               # +
01D8 #  add_eax,ebx
5B                # pop_ebx               # =
8903 #  mov_[ebx],eax
58                # pop_eax               # ;
50               #  push_eax              # arg2 (local)
8D85 20000000 # lea_eax,[ebp+DWORD] %32
50               #  push_eax              # base (local)
8D85 10000000 # lea_eax,[ebp+DWORD] %16
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # 1
B8 01000000 #   mov_eax, %1
50               #  push_eax              # i (local)
8D85 18000000 # lea_eax,[ebp+DWORD] %24
8B00          # mov_eax,[eax]         # ?
5B                # pop_ebx               # +
01D8 #  add_eax,ebx
50               #  push_eax              # size (local)
8D85 08000000 # lea_eax,[ebp+DWORD] %8
8B00          # mov_eax,[eax]         # ?
5B                # pop_ebx               # *
F7E3 #  mul_ebx
5B                # pop_ebx               # +
01D8 #  add_eax,ebx
5B                # pop_ebx               # =
8903 #  mov_[ebx],eax
58                # pop_eax               # ;
50               #  push_eax              # sign (local)
8D85 24000000 # lea_eax,[ebp+DWORD] %36
50               #  push_eax              # arg1 (local)
8D85 1C000000 # lea_eax,[ebp+DWORD] %28
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # arg2 (local)
8D85 20000000 # lea_eax,[ebp+DWORD] %32
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # compar (local)
8D85 04000000 # lea_eax,[ebp+DWORD] %4
8B00          # mov_eax,[eax]         # ?
81C5 28000000          #    add_ebp, %40         # ()
FFD0 #  call_eax
81ED 28000000 # sub_ebp, %40
5B                # pop_ebx               # =
8903 #  mov_[ebx],eax
58                # pop_eax               # ;
 ## stdlib.c 706
50               #  push_eax              # sign (local)
8D85 24000000 # lea_eax,[ebp+DWORD] %36
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # 0
B8 00000000 #   mov_eax, %0
5B                # pop_ebx               # >s
39C3 #  cmp_eax_ebx
0F9FC0 #    setg_al
0FB6C0 #    movzx_eax,al
85C0           #    test_eax,eax          # if
58 #    pop_eax
0F84 %_qsort_else5 #    je %_qsort_else5
 ## stdlib.c 707
 ## stdlib.c 708
50               #  push_eax              # go (local)
8D85 14000000 # lea_eax,[ebp+DWORD] %20
50               #  push_eax              # 1
B8 01000000 #   mov_eax, %1
5B                # pop_ebx               # =
8903 #  mov_[ebx],eax
58                # pop_eax               # ;
 ## stdlib.c 709
50               #  push_eax              # j (local)
8D85 28000000 # lea_eax,[ebp+DWORD] %40
50               #  push_eax              # 0
B8 00000000 #   mov_eax, %0
5B                # pop_ebx               # =
8903 #  mov_[ebx],eax
58                # pop_eax               # ;
:_qsort_loop6 #:_qsort_loop6
50               #  push_eax              # j (local)
8D85 28000000 # lea_eax,[ebp+DWORD] %40
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # size (local)
8D85 08000000 # lea_eax,[ebp+DWORD] %8
8B00          # mov_eax,[eax]         # ?
5B                # pop_ebx               # <s
39C3 #  cmp_eax_ebx
0F9CC0 #    setl_al
0FB6C0 #    movzx_eax,al
85C0           #    test_eax,eax          # !
0F94C0 #    sete_al
0FB6C0 #    movzx_eax,al
85C0           #    test_eax,eax          # if
58 #    pop_eax
0F84 %_qsort_else7 #    je %_qsort_else7
E9 %_qsort_loop_end6 #  jmp %_qsort_loop_end6
 ## stdlib.c 710
:_qsort_else7  #:_qsort_else7 # no else
50               #  push_eax              # j (local)
8D85 28000000 # lea_eax,[ebp+DWORD] %40
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # 3
B8 03000000 #   mov_eax, %3
5B                # pop_ebx               # +
01D8 #  add_eax,ebx
50               #  push_eax              # size (local)
8D85 08000000 # lea_eax,[ebp+DWORD] %8
8B00          # mov_eax,[eax]         # ?
5B                # pop_ebx               # <s
39C3 #  cmp_eax_ebx
0F9CC0 #    setl_al
0FB6C0 #    movzx_eax,al
85C0           #    test_eax,eax          # if
58 #    pop_eax
0F84 %_qsort_else8 #    je %_qsort_else8
 ## stdlib.c 711
50               #  push_eax              # h (local)
8D85 2C000000 # lea_eax,[ebp+DWORD] %44
50               #  push_eax              # arg1 (local)
8D85 1C000000 # lea_eax,[ebp+DWORD] %28
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # j (local)
8D85 28000000 # lea_eax,[ebp+DWORD] %40
8B00          # mov_eax,[eax]         # ?
5B                # pop_ebx               # +
01D8 #  add_eax,ebx
8B00          # mov_eax,[eax]         # ?
5B                # pop_ebx               # =
8903 #  mov_[ebx],eax
58                # pop_eax               # ;
 ## stdlib.c 714
50               #  push_eax              # arg1 (local)
8D85 1C000000 # lea_eax,[ebp+DWORD] %28
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # j (local)
8D85 28000000 # lea_eax,[ebp+DWORD] %40
8B00          # mov_eax,[eax]         # ?
5B                # pop_ebx               # +
01D8 #  add_eax,ebx
50               #  push_eax              # arg2 (local)
8D85 20000000 # lea_eax,[ebp+DWORD] %32
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # j (local)
8D85 28000000 # lea_eax,[ebp+DWORD] %40
8B00          # mov_eax,[eax]         # ?
5B                # pop_ebx               # +
01D8 #  add_eax,ebx
8B00          # mov_eax,[eax]         # ?
5B                # pop_ebx               # =
8903 #  mov_[ebx],eax
58                # pop_eax               # ;
 ## stdlib.c 715
50               #  push_eax              # arg2 (local)
8D85 20000000 # lea_eax,[ebp+DWORD] %32
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # j (local)
8D85 28000000 # lea_eax,[ebp+DWORD] %40
8B00          # mov_eax,[eax]         # ?
5B                # pop_ebx               # +
01D8 #  add_eax,ebx
50               #  push_eax              # h (local)
8D85 2C000000 # lea_eax,[ebp+DWORD] %44
8B00          # mov_eax,[eax]         # ?
5B                # pop_ebx               # =
8903 #  mov_[ebx],eax
58                # pop_eax               # ;
 ## stdlib.c 716
50               #  push_eax              # j (local)
8D85 28000000 # lea_eax,[ebp+DWORD] %40
50               #  push_eax              # $ (dup)
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # 3
B8 03000000 #   mov_eax, %3
5B                # pop_ebx               # +
01D8 #  add_eax,ebx
5B                # pop_ebx               # =
8903 #  mov_[ebx],eax
58                # pop_eax               # ;
E9 %_qsort_else_end8 #  jmp %_qsort_else_end8
:_qsort_else8 #:_qsort_else8
 ## stdlib.c 719
50               #  push_eax              # h (local)
8D85 2C000000 # lea_eax,[ebp+DWORD] %44
50               #  push_eax              # arg1 (local)
8D85 1C000000 # lea_eax,[ebp+DWORD] %28
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # j (local)
8D85 28000000 # lea_eax,[ebp+DWORD] %40
8B00          # mov_eax,[eax]         # ?
5B                # pop_ebx               # +
01D8 #  add_eax,ebx
8A00           #    mov_al,[eax]          # ?1
0FB6C0 #    movzx_eax,al
0FBEC0           #  movsx_eax,al          # char
5B                # pop_ebx               # =1
8803 #  mov_[ebx],al
58                # pop_eax               # ;
 ## stdlib.c 722
50               #  push_eax              # arg1 (local)
8D85 1C000000 # lea_eax,[ebp+DWORD] %28
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # j (local)
8D85 28000000 # lea_eax,[ebp+DWORD] %40
8B00          # mov_eax,[eax]         # ?
5B                # pop_ebx               # +
01D8 #  add_eax,ebx
50               #  push_eax              # arg2 (local)
8D85 20000000 # lea_eax,[ebp+DWORD] %32
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # j (local)
8D85 28000000 # lea_eax,[ebp+DWORD] %40
8B00          # mov_eax,[eax]         # ?
5B                # pop_ebx               # +
01D8 #  add_eax,ebx
8A00           #    mov_al,[eax]          # ?1
0FB6C0 #    movzx_eax,al
0FBEC0           #  movsx_eax,al          # char
5B                # pop_ebx               # =1
8803 #  mov_[ebx],al
58                # pop_eax               # ;
 ## stdlib.c 723
50               #  push_eax              # arg2 (local)
8D85 20000000 # lea_eax,[ebp+DWORD] %32
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # j (local)
8D85 28000000 # lea_eax,[ebp+DWORD] %40
8B00          # mov_eax,[eax]         # ?
5B                # pop_ebx               # +
01D8 #  add_eax,ebx
50               #  push_eax              # h (local)
8D85 2C000000 # lea_eax,[ebp+DWORD] %44
8A00           #    mov_al,[eax]          # ?1
0FB6C0 #    movzx_eax,al
0FBEC0           #  movsx_eax,al          # char
5B                # pop_ebx               # =1
8803 #  mov_[ebx],al
58                # pop_eax               # ;
:_qsort_else_end8 #:_qsort_else_end8
50               #  push_eax              # j (local)
8D85 28000000 # lea_eax,[ebp+DWORD] %40
50               #  push_eax              # $ (dup)
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # 1
B8 01000000 #   mov_eax, %1
5B                # pop_ebx               # +
01D8 #  add_eax,ebx
5B                # pop_ebx               # =
8903 #  mov_[ebx],eax
50               #  push_eax              # 1
B8 01000000 #   mov_eax, %1
5B                # pop_ebx               # -
29C3 #  sub_ebx,eax
89D8 #  mov_eax,ebx
58                # pop_eax               # ;
E9 %_qsort_loop6 #  jmp %_qsort_loop6
:_qsort_loop_end6 #:_qsort_loop_end6
:_qsort_else5  #:_qsort_else5 # no else
50               #  push_eax              # i (local)
8D85 18000000 # lea_eax,[ebp+DWORD] %24
50               #  push_eax              # $ (dup)
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # 1
B8 01000000 #   mov_eax, %1
5B                # pop_ebx               # +
01D8 #  add_eax,ebx
5B                # pop_ebx               # =
8903 #  mov_[ebx],eax
50               #  push_eax              # 1
B8 01000000 #   mov_eax, %1
5B                # pop_ebx               # -
29C3 #  sub_ebx,eax
89D8 #  mov_eax,ebx
58                # pop_eax               # ;
E9 %_qsort_loop3 #  jmp %_qsort_loop3
:_qsort_loop_end3 #:_qsort_loop_end3
E9 %_qsort_loop1 #  jmp %_qsort_loop1
:_qsort_loop_end1 #:_qsort_loop_end1
50               #  push_eax              # 0
B8 00000000 #   mov_eax, %0
8B5D00          #   mov_ebx,[ebp]         # return
53 #    push_ebx
C3 #    ret
 #
:f_time #:f_time
58 #    pop_eax
894500 #    mov_[ebp],eax
58 #    pop_eax
50               #  push_eax              # tloc (local)
8D85 04000000 # lea_eax,[ebp+DWORD] %4
5B                # pop_ebx               # =:
8918 #  mov_[eax],ebx
58 #    pop_eax
 ## stdlib.c 733
50               #  push_eax              # stderr (global)
B8 &g_stderr #  mov_eax, &g_stderr
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # 'TODO time\n'
B8 &string_5 #  mov_eax, &string_5
50               #  push_eax              # 0
B8 00000000 #   mov_eax, %0
50               #  push_eax              # fprintf (function)
B8 &f_fprintf # mov_eax, &f_fprintf
81C5 08000000          #    add_ebp, %8         # ()
FFD0 #  call_eax
81ED 08000000 # sub_ebp, %8
58                # pop_eax               # ;
 ## stdlib.c 733
50               #  push_eax              # 1
B8 01000000 #   mov_eax, %1
50               #  push_eax              # exit (function)
B8 &f_exit #    mov_eax, &f_exit
81C5 08000000          #    add_ebp, %8         # ()
FFD0 #  call_eax
81ED 08000000 # sub_ebp, %8
58                # pop_eax               # ;
50               #  push_eax              # 0
B8 00000000 #   mov_eax, %0
8B5D00          #   mov_ebx,[ebp]         # return
53 #    push_ebx
C3 #    ret
 #
:f_setjmp #:f_setjmp
58 #    pop_eax
894500 #    mov_[ebp],eax
58 #    pop_eax
50               #  push_eax              # env (local)
8D85 04000000 # lea_eax,[ebp+DWORD] %4
5B                # pop_ebx               # =:
8918 #  mov_[eax],ebx
58 #    pop_eax
 ## stdlib.c 739
50               #  push_eax              # stderr (global)
B8 &g_stderr #  mov_eax, &g_stderr
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # 'TODO setjmp\n'
B8 &string_7 #  mov_eax, &string_7
50               #  push_eax              # 0
B8 00000000 #   mov_eax, %0
50               #  push_eax              # fprintf (function)
B8 &f_fprintf # mov_eax, &f_fprintf
81C5 08000000          #    add_ebp, %8         # ()
FFD0 #  call_eax
81ED 08000000 # sub_ebp, %8
58                # pop_eax               # ;
 ## stdlib.c 739
50               #  push_eax              # 1
B8 01000000 #   mov_eax, %1
50               #  push_eax              # exit (function)
B8 &f_exit #    mov_eax, &f_exit
81C5 08000000          #    add_ebp, %8         # ()
FFD0 #  call_eax
81ED 08000000 # sub_ebp, %8
58                # pop_eax               # ;
 ## stdlib.c 740
50               #  push_eax              # 0
B8 00000000 #   mov_eax, %0
8B5D00          #   mov_ebx,[ebp]         # return
53 #    push_ebx
C3 #    ret
50               #  push_eax              # 0
B8 00000000 #   mov_eax, %0
8B5D00          #   mov_ebx,[ebp]         # return
53 #    push_ebx
C3 #    ret
 #
:f_longjmp #:f_longjmp
58 #    pop_eax
894500 #    mov_[ebp],eax
58 #    pop_eax
50               #  push_eax              # val (local)
8D85 04000000 # lea_eax,[ebp+DWORD] %4
5B                # pop_ebx               # =:
8918 #  mov_[eax],ebx
58 #    pop_eax
50               #  push_eax              # env (local)
8D85 08000000 # lea_eax,[ebp+DWORD] %8
5B                # pop_ebx               # =:
8918 #  mov_[eax],ebx
58 #    pop_eax
 ## stdlib.c 746
50               #  push_eax              # stderr (global)
B8 &g_stderr #  mov_eax, &g_stderr
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # 'TODO longjmp\n'
B8 &string_8 #  mov_eax, &string_8
50               #  push_eax              # 0
B8 00000000 #   mov_eax, %0
50               #  push_eax              # fprintf (function)
B8 &f_fprintf # mov_eax, &f_fprintf
81C5 0C000000          #    add_ebp, %12         # ()
FFD0 #  call_eax
81ED 0C000000 # sub_ebp, %12
58                # pop_eax               # ;
 ## stdlib.c 746
50               #  push_eax              # 0
B8 00000000 #   mov_eax, %0
50               #  push_eax              # exit (function)
B8 &f_exit #    mov_eax, &f_exit
81C5 0C000000          #    add_ebp, %12         # ()
FFD0 #  call_eax
81ED 0C000000 # sub_ebp, %12
58                # pop_eax               # ;
 ## stdlib.c 747
50               #  push_eax              # 4294967295
B8 FFFFFFFF #   mov_eax, %4294967295
50               #  push_eax              # exit (function)
B8 &f_exit #    mov_eax, &f_exit
81C5 0C000000          #    add_ebp, %12         # ()
FFD0 #  call_eax
81ED 0C000000 # sub_ebp, %12
58                # pop_eax               # ;
50               #  push_eax              # 0
B8 00000000 #   mov_eax, %0
8B5D00          #   mov_ebx,[ebp]         # return
53 #    push_ebx
C3 #    ret
 #
:f_unlink #:f_unlink
58 #    pop_eax
894500 #    mov_[ebp],eax
58 #    pop_eax
50               #  push_eax              # pathname (local)
8D85 04000000 # lea_eax,[ebp+DWORD] %4
5B                # pop_ebx               # =:
8918 #  mov_[eax],ebx
58 #    pop_eax
 ## stdlib.c 752
50               #  push_eax              # 10
B8 0A000000 #   mov_eax, %10
50               #  push_eax              # pathname (local)
8D85 04000000 # lea_eax,[ebp+DWORD] %4
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # 0
B8 00000000 #   mov_eax, %0
50               #  push_eax              # 0
B8 00000000 #   mov_eax, %0
50               #  push_eax              # sys_int80 (function)
B8 &f_sys_int80 #   mov_eax, &f_sys_int80
81C5 08000000          #    add_ebp, %8         # ()
FFD0 #  call_eax
81ED 08000000 # sub_ebp, %8
8B5D00          #   mov_ebx,[ebp]         # return
53 #    push_ebx
C3 #    ret
50               #  push_eax              # 0
B8 00000000 #   mov_eax, %0
8B5D00          #   mov_ebx,[ebp]         # return
53 #    push_ebx
C3 #    ret
 #
:f_sscanf #:f_sscanf
58 #    pop_eax
894500 #    mov_[ebp],eax
58 #    pop_eax
50               #  push_eax              # __var_args (local)
8D85 04000000 # lea_eax,[ebp+DWORD] %4
5B                # pop_ebx               # =:
8918 #  mov_[eax],ebx
58 #    pop_eax
50               #  push_eax              # format (local)
8D85 08000000 # lea_eax,[ebp+DWORD] %8
5B                # pop_ebx               # =:
8918 #  mov_[eax],ebx
58 #    pop_eax
50               #  push_eax              # str (local)
8D85 0C000000 # lea_eax,[ebp+DWORD] %12
5B                # pop_ebx               # =:
8918 #  mov_[eax],ebx
58 #    pop_eax
 ## stdlib.c 758
50               #  push_eax              # ap (local)
8D85 10000000 # lea_eax,[ebp+DWORD] %16
50               #  push_eax              # __var_args (local)
8D85 04000000 # lea_eax,[ebp+DWORD] %4
8B00          # mov_eax,[eax]         # ?
5B                # pop_ebx               # =
8903 #  mov_[ebx],eax
58                # pop_eax               # ;
50               #  push_eax              # args_parsed (local)
8D85 14000000 # lea_eax,[ebp+DWORD] %20
50               #  push_eax              # 0
B8 00000000 #   mov_eax, %0
5B                # pop_ebx               # =
8903 #  mov_[ebx],eax
58                # pop_eax               # ;
 ## stdlib.c 762
:_sscanf_loop1 #:_sscanf_loop1
50               #  push_eax              # format (local)
8D85 08000000 # lea_eax,[ebp+DWORD] %8
8B00          # mov_eax,[eax]         # ?
8A00           #    mov_al,[eax]          # ?1
0FB6C0 #    movzx_eax,al
0FBEC0           #  movsx_eax,al          # char
50               #  push_eax              # 0
B8 00000000 #   mov_eax, %0
5B                # pop_ebx               # !=
39C3 #  cmp_eax_ebx
0F95C0 #    setne_al
0FB6C0 #    movzx_eax,al
85C0           #    test_eax,eax          # !
0F94C0 #    sete_al
0FB6C0 #    movzx_eax,al
85C0           #    test_eax,eax          # if
58 #    pop_eax
0F84 %_sscanf_else2 #   je %_sscanf_else2
E9 %_sscanf_loop_end1 # jmp %_sscanf_loop_end1
 ## stdlib.c 763
:_sscanf_else2  #:_sscanf_else2 # no else
50               #  push_eax              # str (local)
8D85 0C000000 # lea_eax,[ebp+DWORD] %12
8B00          # mov_eax,[eax]         # ?
8A00           #    mov_al,[eax]          # ?1
0FB6C0 #    movzx_eax,al
0FBEC0           #  movsx_eax,al          # char
50               #  push_eax              # 0
B8 00000000 #   mov_eax, %0
5B                # pop_ebx               # ==
39C3 #  cmp_eax_ebx
0F94C0 #    sete_al
0FB6C0 #    movzx_eax,al
85C0           #    test_eax,eax          # if
58 #    pop_eax
0F84 %_sscanf_else3 #   je %_sscanf_else3
 ## stdlib.c 764
E9 %_sscanf_loop_end1 # jmp %_sscanf_loop_end1
E9 %_sscanf_else_end3 # jmp %_sscanf_else_end3
:_sscanf_else3 #:_sscanf_else3
 ## stdlib.c 765
50               #  push_eax              # format (local)
8D85 08000000 # lea_eax,[ebp+DWORD] %8
8B00          # mov_eax,[eax]         # ?
8A00           #    mov_al,[eax]          # ?1
0FB6C0 #    movzx_eax,al
0FBEC0           #  movsx_eax,al          # char
50               #  push_eax              # 37
B8 25000000 #   mov_eax, %37
5B                # pop_ebx               # ==
39C3 #  cmp_eax_ebx
0F94C0 #    sete_al
0FB6C0 #    movzx_eax,al
85C0           #    test_eax,eax          # if
58 #    pop_eax
0F84 %_sscanf_else4 #   je %_sscanf_else4
 ## stdlib.c 766
 ## stdlib.c 767
50               #  push_eax              # format (local)
8D85 08000000 # lea_eax,[ebp+DWORD] %8
50               #  push_eax              # $ (dup)
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # 1
B8 01000000 #   mov_eax, %1
5B                # pop_ebx               # +
01D8 #  add_eax,ebx
5B                # pop_ebx               # =
8903 #  mov_[ebx],eax
50               #  push_eax              # 1
B8 01000000 #   mov_eax, %1
5B                # pop_ebx               # -
29C3 #  sub_ebx,eax
89D8 #  mov_eax,ebx
58                # pop_eax               # ;
 ## stdlib.c 768
50               #  push_eax              # format (local)
8D85 08000000 # lea_eax,[ebp+DWORD] %8
8B00          # mov_eax,[eax]         # ?
8A00           #    mov_al,[eax]          # ?1
0FB6C0 #    movzx_eax,al
0FBEC0           #  movsx_eax,al          # char
50               #  push_eax              # 100
B8 64000000 #   mov_eax, %100
5B                # pop_ebx               # ==
39C3 #  cmp_eax_ebx
0F94C0 #    sete_al
0FB6C0 #    movzx_eax,al
85C0           #    test_eax,eax          # if
58 #    pop_eax
0F84 %_sscanf_else5 #   je %_sscanf_else5
 ## stdlib.c 769
 ## stdlib.c 770
50               #  push_eax              # format (local)
8D85 08000000 # lea_eax,[ebp+DWORD] %8
50               #  push_eax              # $ (dup)
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # 1
B8 01000000 #   mov_eax, %1
5B                # pop_ebx               # +
01D8 #  add_eax,ebx
5B                # pop_ebx               # =
8903 #  mov_[ebx],eax
50               #  push_eax              # 1
B8 01000000 #   mov_eax, %1
5B                # pop_ebx               # -
29C3 #  sub_ebx,eax
89D8 #  mov_eax,ebx
58                # pop_eax               # ;
50               #  push_eax              # v (local)
8D85 18000000 # lea_eax,[ebp+DWORD] %24
50               #  push_eax              # 0
B8 00000000 #   mov_eax, %0
5B                # pop_ebx               # =
8903 #  mov_[ebx],eax
58                # pop_eax               # ;
 ## stdlib.c 772
:_sscanf_loop6 #:_sscanf_loop6
50               #  push_eax              # 48
B8 30000000 #   mov_eax, %48
50               #  push_eax              # str (local)
8D85 0C000000 # lea_eax,[ebp+DWORD] %12
8B00          # mov_eax,[eax]         # ?
8A00           #    mov_al,[eax]          # ?1
0FB6C0 #    movzx_eax,al
0FBEC0           #  movsx_eax,al          # char
5B                # pop_ebx               # <=s
39C3 #  cmp_eax_ebx
0F9EC0 #    setle_al
0FB6C0 #    movzx_eax,al
85C0           #    test_eax,eax          # &&
0F84 %_sscanf_and_end7 #    je %_sscanf_and_end7
58 #    pop_eax
50               #  push_eax              # str (local)
8D85 0C000000 # lea_eax,[ebp+DWORD] %12
8B00          # mov_eax,[eax]         # ?
8A00           #    mov_al,[eax]          # ?1
0FB6C0 #    movzx_eax,al
0FBEC0           #  movsx_eax,al          # char
50               #  push_eax              # 57
B8 39000000 #   mov_eax, %57
5B                # pop_ebx               # <=s
39C3 #  cmp_eax_ebx
0F9EC0 #    setle_al
0FB6C0 #    movzx_eax,al
:_sscanf_and_end7 #:_sscanf_and_end7
85C0           #    test_eax,eax          # !
0F94C0 #    sete_al
0FB6C0 #    movzx_eax,al
85C0           #    test_eax,eax          # if
58 #    pop_eax
0F84 %_sscanf_else8 #   je %_sscanf_else8
E9 %_sscanf_loop_end6 # jmp %_sscanf_loop_end6
 ## stdlib.c 773
 ## stdlib.c 774
:_sscanf_else8  #:_sscanf_else8 # no else
50               #  push_eax              # v (local)
8D85 18000000 # lea_eax,[ebp+DWORD] %24
50               #  push_eax              # 10
B8 0A000000 #   mov_eax, %10
50               #  push_eax              # v (local)
8D85 18000000 # lea_eax,[ebp+DWORD] %24
8B00          # mov_eax,[eax]         # ?
5B                # pop_ebx               # *
F7E3 #  mul_ebx
50               #  push_eax              # str (local)
8D85 0C000000 # lea_eax,[ebp+DWORD] %12
8B00          # mov_eax,[eax]         # ?
8A00           #    mov_al,[eax]          # ?1
0FB6C0 #    movzx_eax,al
0FBEC0           #  movsx_eax,al          # char
5B                # pop_ebx               # +
01D8 #  add_eax,ebx
50               #  push_eax              # 48
B8 30000000 #   mov_eax, %48
5B                # pop_ebx               # -
29C3 #  sub_ebx,eax
89D8 #  mov_eax,ebx
5B                # pop_ebx               # =
8903 #  mov_[ebx],eax
58                # pop_eax               # ;
 ## stdlib.c 775
50               #  push_eax              # str (local)
8D85 0C000000 # lea_eax,[ebp+DWORD] %12
50               #  push_eax              # $ (dup)
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # 1
B8 01000000 #   mov_eax, %1
5B                # pop_ebx               # +
01D8 #  add_eax,ebx
5B                # pop_ebx               # =
8903 #  mov_[ebx],eax
50               #  push_eax              # 1
B8 01000000 #   mov_eax, %1
5B                # pop_ebx               # -
29C3 #  sub_ebx,eax
89D8 #  mov_eax,ebx
58                # pop_eax               # ;
E9 %_sscanf_loop6 # jmp %_sscanf_loop6
:_sscanf_loop_end6 #:_sscanf_loop_end6
 ## stdlib.c 777
50               #  push_eax              # ap (local)
8D85 10000000 # lea_eax,[ebp+DWORD] %16
8B00          # mov_eax,[eax]         # ?
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # v (local)
8D85 18000000 # lea_eax,[ebp+DWORD] %24
8B00          # mov_eax,[eax]         # ?
5B                # pop_ebx               # =
8903 #  mov_[ebx],eax
58                # pop_eax               # ;
 ## stdlib.c 778
50               #  push_eax              # ap (local)
8D85 10000000 # lea_eax,[ebp+DWORD] %16
50               #  push_eax              # $ (dup)
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # 4
B8 04000000 #   mov_eax, %4
5B                # pop_ebx               # +
01D8 #  add_eax,ebx
5B                # pop_ebx               # =
8903 #  mov_[ebx],eax
50               #  push_eax              # 4
B8 04000000 #   mov_eax, %4
5B                # pop_ebx               # -
29C3 #  sub_ebx,eax
89D8 #  mov_eax,ebx
58                # pop_eax               # ;
 ## stdlib.c 779
50               #  push_eax              # args_parsed (local)
8D85 14000000 # lea_eax,[ebp+DWORD] %20
50               #  push_eax              # $ (dup)
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # 1
B8 01000000 #   mov_eax, %1
5B                # pop_ebx               # +
01D8 #  add_eax,ebx
5B                # pop_ebx               # =
8903 #  mov_[ebx],eax
50               #  push_eax              # 1
B8 01000000 #   mov_eax, %1
5B                # pop_ebx               # -
29C3 #  sub_ebx,eax
89D8 #  mov_eax,ebx
58                # pop_eax               # ;
E9 %_sscanf_else_end5 # jmp %_sscanf_else_end5
:_sscanf_else5 #:_sscanf_else5
 ## stdlib.c 782
 ## stdlib.c 783
50               #  push_eax              # stderr (global)
B8 &g_stderr #  mov_eax, &g_stderr
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # 'sscanf: format %%%c not supported\n'
B8 &string_9 #  mov_eax, &string_9
50               #  push_eax              # __var_args (local)
8D85 18000000 # lea_eax,[ebp+DWORD] %24
50               #  push_eax              # format (local)
8D85 08000000 # lea_eax,[ebp+DWORD] %8
8B00          # mov_eax,[eax]         # ?
8A00           #    mov_al,[eax]          # ?1
0FB6C0 #    movzx_eax,al
0FBEC0           #  movsx_eax,al          # char
5B                # pop_ebx               # =
8903 #  mov_[ebx],eax
58                # pop_eax               # ;
50               #  push_eax              # __var_args (local)
8D85 18000000 # lea_eax,[ebp+DWORD] %24
50               #  push_eax              # fprintf (function)
B8 &f_fprintf # mov_eax, &f_fprintf
81C5 1C000000          #    add_ebp, %28         # ()
FFD0 #  call_eax
81ED 1C000000 # sub_ebp, %28
58                # pop_eax               # ;
 ## stdlib.c 784
50               #  push_eax              # 1
B8 01000000 #   mov_eax, %1
50               #  push_eax              # exit (function)
B8 &f_exit #    mov_eax, &f_exit
81C5 18000000          #    add_ebp, %24         # ()
FFD0 #  call_eax
81ED 18000000 # sub_ebp, %24
58                # pop_eax               # ;
:_sscanf_else_end5 #:_sscanf_else_end5
E9 %_sscanf_else_end4 # jmp %_sscanf_else_end4
:_sscanf_else4 #:_sscanf_else4
 ## stdlib.c 788
 ## stdlib.c 789
50               #  push_eax              # format (local)
8D85 08000000 # lea_eax,[ebp+DWORD] %8
8B00          # mov_eax,[eax]         # ?
8A00           #    mov_al,[eax]          # ?1
0FB6C0 #    movzx_eax,al
0FBEC0           #  movsx_eax,al          # char
50               #  push_eax              # str (local)
8D85 0C000000 # lea_eax,[ebp+DWORD] %12
8B00          # mov_eax,[eax]         # ?
8A00           #    mov_al,[eax]          # ?1
0FB6C0 #    movzx_eax,al
0FBEC0           #  movsx_eax,al          # char
5B                # pop_ebx               # !=
39C3 #  cmp_eax_ebx
0F95C0 #    setne_al
0FB6C0 #    movzx_eax,al
85C0           #    test_eax,eax          # if
58 #    pop_eax
0F84 %_sscanf_else9 #   je %_sscanf_else9
 ## stdlib.c 790
E9 %_sscanf_loop_end1 # jmp %_sscanf_loop_end1
 ## stdlib.c 791
:_sscanf_else9  #:_sscanf_else9 # no else
50               #  push_eax              # format (local)
8D85 08000000 # lea_eax,[ebp+DWORD] %8
50               #  push_eax              # $ (dup)
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # 1
B8 01000000 #   mov_eax, %1
5B                # pop_ebx               # +
01D8 #  add_eax,ebx
5B                # pop_ebx               # =
8903 #  mov_[ebx],eax
50               #  push_eax              # 1
B8 01000000 #   mov_eax, %1
5B                # pop_ebx               # -
29C3 #  sub_ebx,eax
89D8 #  mov_eax,ebx
58                # pop_eax               # ;
 ## stdlib.c 792
50               #  push_eax              # str (local)
8D85 0C000000 # lea_eax,[ebp+DWORD] %12
50               #  push_eax              # $ (dup)
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # 1
B8 01000000 #   mov_eax, %1
5B                # pop_ebx               # +
01D8 #  add_eax,ebx
5B                # pop_ebx               # =
8903 #  mov_[ebx],eax
50               #  push_eax              # 1
B8 01000000 #   mov_eax, %1
5B                # pop_ebx               # -
29C3 #  sub_ebx,eax
89D8 #  mov_eax,ebx
58                # pop_eax               # ;
:_sscanf_else_end4 #:_sscanf_else_end4
:_sscanf_else_end3 #:_sscanf_else_end3
E9 %_sscanf_loop1 # jmp %_sscanf_loop1
:_sscanf_loop_end1 #:_sscanf_loop_end1
 ## stdlib.c 794
50               #  push_eax              # args_parsed (local)
8D85 14000000 # lea_eax,[ebp+DWORD] %20
8B00          # mov_eax,[eax]         # ?
8B5D00          #   mov_ebx,[ebp]         # return
53 #    push_ebx
C3 #    ret
50               #  push_eax              # 0
B8 00000000 #   mov_eax, %0
8B5D00          #   mov_ebx,[ebp]         # return
53 #    push_ebx
C3 #    ret
 #
:f_atoi #:f_atoi
58 #    pop_eax
894500 #    mov_[ebp],eax
58 #    pop_eax
50               #  push_eax              # nptr (local)
8D85 04000000 # lea_eax,[ebp+DWORD] %4
5B                # pop_ebx               # =:
8918 #  mov_[eax],ebx
58 #    pop_eax
 ## stdlib.c 800
50               #  push_eax              # stderr (global)
B8 &g_stderr #  mov_eax, &g_stderr
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # 'TODO atoi\n'
B8 &string_10 # mov_eax, &string_10
50               #  push_eax              # 0
B8 00000000 #   mov_eax, %0
50               #  push_eax              # fprintf (function)
B8 &f_fprintf # mov_eax, &f_fprintf
81C5 08000000          #    add_ebp, %8         # ()
FFD0 #  call_eax
81ED 08000000 # sub_ebp, %8
58                # pop_eax               # ;
 ## stdlib.c 800
50               #  push_eax              # 1
B8 01000000 #   mov_eax, %1
50               #  push_eax              # exit (function)
B8 &f_exit #    mov_eax, &f_exit
81C5 08000000          #    add_ebp, %8         # ()
FFD0 #  call_eax
81ED 08000000 # sub_ebp, %8
58                # pop_eax               # ;
50               #  push_eax              # 0
B8 00000000 #   mov_eax, %0
8B5D00          #   mov_ebx,[ebp]         # return
53 #    push_ebx
C3 #    ret
 #
:f_remove #:f_remove
58 #    pop_eax
894500 #    mov_[ebp],eax
58 #    pop_eax
50               #  push_eax              # pathname (local)
8D85 04000000 # lea_eax,[ebp+DWORD] %4
5B                # pop_ebx               # =:
8918 #  mov_[eax],ebx
58 #    pop_eax
 ## stdlib.c 805
50               #  push_eax              # 10
B8 0A000000 #   mov_eax, %10
50               #  push_eax              # pathname (local)
8D85 04000000 # lea_eax,[ebp+DWORD] %4
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # 0
B8 00000000 #   mov_eax, %0
50               #  push_eax              # 0
B8 00000000 #   mov_eax, %0
50               #  push_eax              # sys_int80 (function)
B8 &f_sys_int80 #   mov_eax, &f_sys_int80
81C5 08000000          #    add_ebp, %8         # ()
FFD0 #  call_eax
81ED 08000000 # sub_ebp, %8
8B5D00          #   mov_ebx,[ebp]         # return
53 #    push_ebx
C3 #    ret
50               #  push_eax              # 0
B8 00000000 #   mov_eax, %0
8B5D00          #   mov_ebx,[ebp]         # return
53 #    push_ebx
C3 #    ret
 #
:f_execvp #:f_execvp
58 #    pop_eax
894500 #    mov_[ebp],eax
58 #    pop_eax
50               #  push_eax              # argv (local)
8D85 04000000 # lea_eax,[ebp+DWORD] %4
5B                # pop_ebx               # =:
8918 #  mov_[eax],ebx
58 #    pop_eax
50               #  push_eax              # file (local)
8D85 08000000 # lea_eax,[ebp+DWORD] %8
5B                # pop_ebx               # =:
8918 #  mov_[eax],ebx
58 #    pop_eax
 ## stdlib.c 811
50               #  push_eax              # stderr (global)
B8 &g_stderr #  mov_eax, &g_stderr
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # 'TODO execvp\n'
B8 &string_11 # mov_eax, &string_11
50               #  push_eax              # 0
B8 00000000 #   mov_eax, %0
50               #  push_eax              # fprintf (function)
B8 &f_fprintf # mov_eax, &f_fprintf
81C5 0C000000          #    add_ebp, %12         # ()
FFD0 #  call_eax
81ED 0C000000 # sub_ebp, %12
58                # pop_eax               # ;
 ## stdlib.c 811
50               #  push_eax              # 1
B8 01000000 #   mov_eax, %1
50               #  push_eax              # exit (function)
B8 &f_exit #    mov_eax, &f_exit
81C5 0C000000          #    add_ebp, %12         # ()
FFD0 #  call_eax
81ED 0C000000 # sub_ebp, %12
58                # pop_eax               # ;
50               #  push_eax              # 0
B8 00000000 #   mov_eax, %0
8B5D00          #   mov_ebx,[ebp]         # return
53 #    push_ebx
C3 #    ret
 #
:f_mkdir #:f_mkdir
58 #    pop_eax
894500 #    mov_[ebp],eax
58 #    pop_eax
50               #  push_eax              # mode (local)
8D85 04000000 # lea_eax,[ebp+DWORD] %4
5B                # pop_ebx               # =:
8918 #  mov_[eax],ebx
58 #    pop_eax
50               #  push_eax              # pathname (local)
8D85 08000000 # lea_eax,[ebp+DWORD] %8
5B                # pop_ebx               # =:
8918 #  mov_[eax],ebx
58 #    pop_eax
 ## stdlib.c 816
50               #  push_eax              # 39
B8 27000000 #   mov_eax, %39
50               #  push_eax              # pathname (local)
8D85 08000000 # lea_eax,[ebp+DWORD] %8
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # mode (local)
8D85 04000000 # lea_eax,[ebp+DWORD] %4
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # 0
B8 00000000 #   mov_eax, %0
50               #  push_eax              # sys_int80 (function)
B8 &f_sys_int80 #   mov_eax, &f_sys_int80
81C5 0C000000          #    add_ebp, %12         # ()
FFD0 #  call_eax
81ED 0C000000 # sub_ebp, %12
8B5D00          #   mov_ebx,[ebp]         # return
53 #    push_ebx
C3 #    ret
50               #  push_eax              # 0
B8 00000000 #   mov_eax, %0
8B5D00          #   mov_ebx,[ebp]         # return
53 #    push_ebx
C3 #    ret
 #
:f_chdir #:f_chdir
58 #    pop_eax
894500 #    mov_[ebp],eax
58 #    pop_eax
50               #  push_eax              # path (local)
8D85 04000000 # lea_eax,[ebp+DWORD] %4
5B                # pop_ebx               # =:
8918 #  mov_[eax],ebx
58 #    pop_eax
 ## stdlib.c 821
50               #  push_eax              # 12
B8 0C000000 #   mov_eax, %12
50               #  push_eax              # path (local)
8D85 04000000 # lea_eax,[ebp+DWORD] %4
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # 0
B8 00000000 #   mov_eax, %0
50               #  push_eax              # 0
B8 00000000 #   mov_eax, %0
50               #  push_eax              # sys_int80 (function)
B8 &f_sys_int80 #   mov_eax, &f_sys_int80
81C5 08000000          #    add_ebp, %8         # ()
FFD0 #  call_eax
81ED 08000000 # sub_ebp, %8
58                # pop_eax               # ;
50               #  push_eax              # 0
B8 00000000 #   mov_eax, %0
8B5D00          #   mov_ebx,[ebp]         # return
53 #    push_ebx
C3 #    ret
 #
:f_access #:f_access
58 #    pop_eax
894500 #    mov_[ebp],eax
58 #    pop_eax
50               #  push_eax              # mode (local)
8D85 04000000 # lea_eax,[ebp+DWORD] %4
5B                # pop_ebx               # =:
8918 #  mov_[eax],ebx
58 #    pop_eax
50               #  push_eax              # filename (local)
8D85 08000000 # lea_eax,[ebp+DWORD] %8
5B                # pop_ebx               # =:
8918 #  mov_[eax],ebx
58 #    pop_eax
 ## stdlib.c 826
50               #  push_eax              # 33
B8 21000000 #   mov_eax, %33
50               #  push_eax              # filename (local)
8D85 08000000 # lea_eax,[ebp+DWORD] %8
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # mode (local)
8D85 04000000 # lea_eax,[ebp+DWORD] %4
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # 0
B8 00000000 #   mov_eax, %0
50               #  push_eax              # sys_int80 (function)
B8 &f_sys_int80 #   mov_eax, &f_sys_int80
81C5 0C000000          #    add_ebp, %12         # ()
FFD0 #  call_eax
81ED 0C000000 # sub_ebp, %12
8B5D00          #   mov_ebx,[ebp]         # return
53 #    push_ebx
C3 #    ret
50               #  push_eax              # 0
B8 00000000 #   mov_eax, %0
8B5D00          #   mov_ebx,[ebp]         # return
53 #    push_ebx
C3 #    ret
 #
:f_chmod #:f_chmod
58 #    pop_eax
894500 #    mov_[ebp],eax
58 #    pop_eax
50               #  push_eax              # mode (local)
8D85 04000000 # lea_eax,[ebp+DWORD] %4
5B                # pop_ebx               # =:
8918 #  mov_[eax],ebx
58 #    pop_eax
50               #  push_eax              # filename (local)
8D85 08000000 # lea_eax,[ebp+DWORD] %8
5B                # pop_ebx               # =:
8918 #  mov_[eax],ebx
58 #    pop_eax
 ## stdlib.c 831
50               #  push_eax              # 15
B8 0F000000 #   mov_eax, %15
50               #  push_eax              # filename (local)
8D85 08000000 # lea_eax,[ebp+DWORD] %8
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # mode (local)
8D85 04000000 # lea_eax,[ebp+DWORD] %4
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # 0
B8 00000000 #   mov_eax, %0
50               #  push_eax              # sys_int80 (function)
B8 &f_sys_int80 #   mov_eax, &f_sys_int80
81C5 0C000000          #    add_ebp, %12         # ()
FFD0 #  call_eax
81ED 0C000000 # sub_ebp, %12
8B5D00          #   mov_ebx,[ebp]         # return
53 #    push_ebx
C3 #    ret
50               #  push_eax              # 0
B8 00000000 #   mov_eax, %0
8B5D00          #   mov_ebx,[ebp]         # return
53 #    push_ebx
C3 #    ret
 #
:f_symlink #:f_symlink
58 #    pop_eax
894500 #    mov_[ebp],eax
58 #    pop_eax
50               #  push_eax              # linkpath (local)
8D85 04000000 # lea_eax,[ebp+DWORD] %4
5B                # pop_ebx               # =:
8918 #  mov_[eax],ebx
58 #    pop_eax
50               #  push_eax              # target (local)
8D85 08000000 # lea_eax,[ebp+DWORD] %8
5B                # pop_ebx               # =:
8918 #  mov_[eax],ebx
58 #    pop_eax
 ## stdlib.c 836
50               #  push_eax              # 83
B8 53000000 #   mov_eax, %83
50               #  push_eax              # target (local)
8D85 08000000 # lea_eax,[ebp+DWORD] %8
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # linkpath (local)
8D85 04000000 # lea_eax,[ebp+DWORD] %4
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # 0
B8 00000000 #   mov_eax, %0
50               #  push_eax              # sys_int80 (function)
B8 &f_sys_int80 #   mov_eax, &f_sys_int80
81C5 0C000000          #    add_ebp, %12         # ()
FFD0 #  call_eax
81ED 0C000000 # sub_ebp, %12
8B5D00          #   mov_ebx,[ebp]         # return
53 #    push_ebx
C3 #    ret
50               #  push_eax              # 0
B8 00000000 #   mov_eax, %0
8B5D00          #   mov_ebx,[ebp]         # return
53 #    push_ebx
C3 #    ret
 #
:f_uname #:f_uname
58 #    pop_eax
894500 #    mov_[ebp],eax
58 #    pop_eax
50               #  push_eax              # buf (local)
8D85 04000000 # lea_eax,[ebp+DWORD] %4
5B                # pop_ebx               # =:
8918 #  mov_[eax],ebx
58 #    pop_eax
 ## stdlib.c 854
50               #  push_eax              # 109
B8 6D000000 #   mov_eax, %109
50               #  push_eax              # buf (local)
8D85 04000000 # lea_eax,[ebp+DWORD] %4
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # 0
B8 00000000 #   mov_eax, %0
50               #  push_eax              # 0
B8 00000000 #   mov_eax, %0
50               #  push_eax              # sys_int80 (function)
B8 &f_sys_int80 #   mov_eax, &f_sys_int80
81C5 08000000          #    add_ebp, %8         # ()
FFD0 #  call_eax
81ED 08000000 # sub_ebp, %8
8B5D00          #   mov_ebx,[ebp]         # return
53 #    push_ebx
C3 #    ret
50               #  push_eax              # 0
B8 00000000 #   mov_eax, %0
8B5D00          #   mov_ebx,[ebp]         # return
53 #    push_ebx
C3 #    ret
 #
:f_execve #:f_execve
58 #    pop_eax
894500 #    mov_[ebp],eax
58 #    pop_eax
50               #  push_eax              # env (local)
8D85 04000000 # lea_eax,[ebp+DWORD] %4
5B                # pop_ebx               # =:
8918 #  mov_[eax],ebx
58 #    pop_eax
50               #  push_eax              # argv (local)
8D85 08000000 # lea_eax,[ebp+DWORD] %8
5B                # pop_ebx               # =:
8918 #  mov_[eax],ebx
58 #    pop_eax
50               #  push_eax              # program (local)
8D85 0C000000 # lea_eax,[ebp+DWORD] %12
5B                # pop_ebx               # =:
8918 #  mov_[eax],ebx
58 #    pop_eax
 ## stdlib.c 859
50               #  push_eax              # 11
B8 0B000000 #   mov_eax, %11
50               #  push_eax              # program (local)
8D85 0C000000 # lea_eax,[ebp+DWORD] %12
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # argv (local)
8D85 08000000 # lea_eax,[ebp+DWORD] %8
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # env (local)
8D85 04000000 # lea_eax,[ebp+DWORD] %4
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # sys_int80 (function)
B8 &f_sys_int80 #   mov_eax, &f_sys_int80
81C5 10000000          #    add_ebp, %16         # ()
FFD0 #  call_eax
81ED 10000000 # sub_ebp, %16
8B5D00          #   mov_ebx,[ebp]         # return
53 #    push_ebx
C3 #    ret
50               #  push_eax              # 0
B8 00000000 #   mov_eax, %0
8B5D00          #   mov_ebx,[ebp]         # return
53 #    push_ebx
C3 #    ret
 #
:f_fgets #:f_fgets
58 #    pop_eax
894500 #    mov_[ebp],eax
58 #    pop_eax
50               #  push_eax              # f (local)
8D85 04000000 # lea_eax,[ebp+DWORD] %4
5B                # pop_ebx               # =:
8918 #  mov_[eax],ebx
58 #    pop_eax
50               #  push_eax              # len (local)
8D85 08000000 # lea_eax,[ebp+DWORD] %8
5B                # pop_ebx               # =:
8918 #  mov_[eax],ebx
58 #    pop_eax
50               #  push_eax              # str (local)
8D85 0C000000 # lea_eax,[ebp+DWORD] %12
5B                # pop_ebx               # =:
8918 #  mov_[eax],ebx
58 #    pop_eax
 ## stdlib.c 864
50               #  push_eax              # f (local)
8D85 04000000 # lea_eax,[ebp+DWORD] %4
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # feof (function)
B8 &f_feof #    mov_eax, &f_feof
81C5 10000000          #    add_ebp, %16         # ()
FFD0 #  call_eax
81ED 10000000 # sub_ebp, %16
85C0           #    test_eax,eax          # if
58 #    pop_eax
0F84 %_fgets_else1 #    je %_fgets_else1
 ## stdlib.c 865
50               #  push_eax              # 0
B8 00000000 #   mov_eax, %0
8B5D00          #   mov_ebx,[ebp]         # return
53 #    push_ebx
C3 #    ret
 ## stdlib.c 867
:_fgets_else1  #:_fgets_else1 # no else
50               #  push_eax              # i (local)
8D85 10000000 # lea_eax,[ebp+DWORD] %16
50               #  push_eax              # 0
B8 00000000 #   mov_eax, %0
5B                # pop_ebx               # =
8903 #  mov_[ebx],eax
58                # pop_eax               # ;
:_fgets_loop2 #:_fgets_loop2
50               #  push_eax              # i (local)
8D85 10000000 # lea_eax,[ebp+DWORD] %16
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # len (local)
8D85 08000000 # lea_eax,[ebp+DWORD] %8
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # 1
B8 01000000 #   mov_eax, %1
5B                # pop_ebx               # -
29C3 #  sub_ebx,eax
89D8 #  mov_eax,ebx
5B                # pop_ebx               # <s
39C3 #  cmp_eax_ebx
0F9CC0 #    setl_al
0FB6C0 #    movzx_eax,al
85C0           #    test_eax,eax          # !
0F94C0 #    sete_al
0FB6C0 #    movzx_eax,al
85C0           #    test_eax,eax          # if
58 #    pop_eax
0F84 %_fgets_else3 #    je %_fgets_else3
E9 %_fgets_loop_end2 #  jmp %_fgets_loop_end2
 ## stdlib.c 868
:_fgets_else3  #:_fgets_else3 # no else
50               #  push_eax              # ch (local)
8D85 14000000 # lea_eax,[ebp+DWORD] %20
50               #  push_eax              # f (local)
8D85 04000000 # lea_eax,[ebp+DWORD] %4
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # fgetc (function)
B8 &f_fgetc #   mov_eax, &f_fgetc
81C5 18000000          #    add_ebp, %24         # ()
FFD0 #  call_eax
81ED 18000000 # sub_ebp, %24
5B                # pop_ebx               # =
8903 #  mov_[ebx],eax
58                # pop_eax               # ;
 ## stdlib.c 870
50               #  push_eax              # ch (local)
8D85 14000000 # lea_eax,[ebp+DWORD] %20
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # 0
B8 00000000 #   mov_eax, %0
5B                # pop_ebx               # <s
39C3 #  cmp_eax_ebx
0F9CC0 #    setl_al
0FB6C0 #    movzx_eax,al
85C0           #    test_eax,eax          # if
58 #    pop_eax
0F84 %_fgets_else4 #    je %_fgets_else4
 ## stdlib.c 871
 ## stdlib.c 872
50               #  push_eax              # str (local)
8D85 0C000000 # lea_eax,[ebp+DWORD] %12
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # i (local)
8D85 10000000 # lea_eax,[ebp+DWORD] %16
8B00          # mov_eax,[eax]         # ?
5B                # pop_ebx               # +
01D8 #  add_eax,ebx
50               #  push_eax              # 0
B8 00000000 #   mov_eax, %0
5B                # pop_ebx               # =1
8803 #  mov_[ebx],al
58                # pop_eax               # ;
 ## stdlib.c 873
E9 %_fgets_loop_end2 #  jmp %_fgets_loop_end2
 ## stdlib.c 875
:_fgets_else4  #:_fgets_else4 # no else
50               #  push_eax              # str (local)
8D85 0C000000 # lea_eax,[ebp+DWORD] %12
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # i (local)
8D85 10000000 # lea_eax,[ebp+DWORD] %16
8B00          # mov_eax,[eax]         # ?
5B                # pop_ebx               # +
01D8 #  add_eax,ebx
50               #  push_eax              # ch (local)
8D85 14000000 # lea_eax,[ebp+DWORD] %20
8B00          # mov_eax,[eax]         # ?
5B                # pop_ebx               # =1
8803 #  mov_[ebx],al
58                # pop_eax               # ;
 ## stdlib.c 876
50               #  push_eax              # ch (local)
8D85 14000000 # lea_eax,[ebp+DWORD] %20
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # 10
B8 0A000000 #   mov_eax, %10
5B                # pop_ebx               # ==
39C3 #  cmp_eax_ebx
0F94C0 #    sete_al
0FB6C0 #    movzx_eax,al
85C0           #    test_eax,eax          # if
58 #    pop_eax
0F84 %_fgets_else5 #    je %_fgets_else5
 ## stdlib.c 877
 ## stdlib.c 878
50               #  push_eax              # str (local)
8D85 0C000000 # lea_eax,[ebp+DWORD] %12
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # i (local)
8D85 10000000 # lea_eax,[ebp+DWORD] %16
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # 1
B8 01000000 #   mov_eax, %1
5B                # pop_ebx               # +
01D8 #  add_eax,ebx
5B                # pop_ebx               # +
01D8 #  add_eax,ebx
50               #  push_eax              # 0
B8 00000000 #   mov_eax, %0
5B                # pop_ebx               # =1
8803 #  mov_[ebx],al
58                # pop_eax               # ;
 ## stdlib.c 879
E9 %_fgets_loop_end2 #  jmp %_fgets_loop_end2
:_fgets_else5  #:_fgets_else5 # no else
50               #  push_eax              # i (local)
8D85 10000000 # lea_eax,[ebp+DWORD] %16
50               #  push_eax              # $ (dup)
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # 1
B8 01000000 #   mov_eax, %1
5B                # pop_ebx               # +
01D8 #  add_eax,ebx
5B                # pop_ebx               # =
8903 #  mov_[ebx],eax
50               #  push_eax              # 1
B8 01000000 #   mov_eax, %1
5B                # pop_ebx               # -
29C3 #  sub_ebx,eax
89D8 #  mov_eax,ebx
58                # pop_eax               # ;
E9 %_fgets_loop2 #  jmp %_fgets_loop2
:_fgets_loop_end2 #:_fgets_loop_end2
 ## stdlib.c 882
50               #  push_eax              # str (local)
8D85 0C000000 # lea_eax,[ebp+DWORD] %12
8B00          # mov_eax,[eax]         # ?
8B5D00          #   mov_ebx,[ebp]         # return
53 #    push_ebx
C3 #    ret
50               #  push_eax              # 0
B8 00000000 #   mov_eax, %0
8B5D00          #   mov_ebx,[ebp]         # return
53 #    push_ebx
C3 #    ret
 #
:f_require #:f_require
58 #    pop_eax
894500 #    mov_[ebp],eax
58 #    pop_eax
50               #  push_eax              # error (local)
8D85 04000000 # lea_eax,[ebp+DWORD] %4
5B                # pop_ebx               # =:
8918 #  mov_[eax],ebx
58 #    pop_eax
50               #  push_eax              # bool (local)
8D85 08000000 # lea_eax,[ebp+DWORD] %8
5B                # pop_ebx               # =:
8918 #  mov_[eax],ebx
58 #    pop_eax
 ## bootstrappable.c 27
50               #  push_eax              # bool (local)
8D85 08000000 # lea_eax,[ebp+DWORD] %8
8B00          # mov_eax,[eax]         # ?
85C0           #    test_eax,eax          # !
0F94C0 #    sete_al
0FB6C0 #    movzx_eax,al
85C0           #    test_eax,eax          # if
58 #    pop_eax
0F84 %_require_else1 #  je %_require_else1
 ## bootstrappable.c 28
 ## bootstrappable.c 29
50               #  push_eax              # error (local)
8D85 04000000 # lea_eax,[ebp+DWORD] %4
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # stderr (global)
B8 &g_stderr #  mov_eax, &g_stderr
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # fputs (function)
B8 &f_fputs #   mov_eax, &f_fputs
81C5 0C000000          #    add_ebp, %12         # ()
FFD0 #  call_eax
81ED 0C000000 # sub_ebp, %12
58                # pop_eax               # ;
 ## bootstrappable.c 30
50               #  push_eax              # 4294967295
B8 FFFFFFFF #   mov_eax, %4294967295
50               #  push_eax              # exit (function)
B8 &f_exit #    mov_eax, &f_exit
81C5 0C000000          #    add_ebp, %12         # ()
FFD0 #  call_eax
81ED 0C000000 # sub_ebp, %12
58                # pop_eax               # ;
:_require_else1  #:_require_else1 # no else
50               #  push_eax              # 0
B8 00000000 #   mov_eax, %0
8B5D00          #   mov_ebx,[ebp]         # return
53 #    push_ebx
C3 #    ret
 #
:f_match #:f_match
58 #    pop_eax
894500 #    mov_[ebp],eax
58 #    pop_eax
50               #  push_eax              # b (local)
8D85 04000000 # lea_eax,[ebp+DWORD] %4
5B                # pop_ebx               # =:
8918 #  mov_[eax],ebx
58 #    pop_eax
50               #  push_eax              # a (local)
8D85 08000000 # lea_eax,[ebp+DWORD] %8
5B                # pop_ebx               # =:
8918 #  mov_[eax],ebx
58 #    pop_eax
 ## bootstrappable.c 37
50               #  push_eax              # 0
B8 00000000 #   mov_eax, %0
50               #  push_eax              # a (local)
8D85 08000000 # lea_eax,[ebp+DWORD] %8
8B00          # mov_eax,[eax]         # ?
5B                # pop_ebx               # ==
39C3 #  cmp_eax_ebx
0F94C0 #    sete_al
0FB6C0 #    movzx_eax,al
85C0           #    test_eax,eax          # &&
0F84 %_match_and_end1 # je %_match_and_end1
58 #    pop_eax
50               #  push_eax              # 0
B8 00000000 #   mov_eax, %0
50               #  push_eax              # b (local)
8D85 04000000 # lea_eax,[ebp+DWORD] %4
8B00          # mov_eax,[eax]         # ?
5B                # pop_ebx               # ==
39C3 #  cmp_eax_ebx
0F94C0 #    sete_al
0FB6C0 #    movzx_eax,al
:_match_and_end1 #:_match_and_end1
85C0           #    test_eax,eax          # if
58 #    pop_eax
0F84 %_match_else2 #    je %_match_else2
 ## bootstrappable.c 37
50               #  push_eax              # 1
B8 01000000 #   mov_eax, %1
8B5D00          #   mov_ebx,[ebp]         # return
53 #    push_ebx
C3 #    ret
 ## bootstrappable.c 38
:_match_else2  #:_match_else2 # no else
50               #  push_eax              # 0
B8 00000000 #   mov_eax, %0
50               #  push_eax              # a (local)
8D85 08000000 # lea_eax,[ebp+DWORD] %8
8B00          # mov_eax,[eax]         # ?
5B                # pop_ebx               # ==
39C3 #  cmp_eax_ebx
0F94C0 #    sete_al
0FB6C0 #    movzx_eax,al
85C0           #    test_eax,eax          # if
58 #    pop_eax
0F84 %_match_else3 #    je %_match_else3
 ## bootstrappable.c 38
50               #  push_eax              # 0
B8 00000000 #   mov_eax, %0
8B5D00          #   mov_ebx,[ebp]         # return
53 #    push_ebx
C3 #    ret
 ## bootstrappable.c 39
:_match_else3  #:_match_else3 # no else
50               #  push_eax              # 0
B8 00000000 #   mov_eax, %0
50               #  push_eax              # b (local)
8D85 04000000 # lea_eax,[ebp+DWORD] %4
8B00          # mov_eax,[eax]         # ?
5B                # pop_ebx               # ==
39C3 #  cmp_eax_ebx
0F94C0 #    sete_al
0FB6C0 #    movzx_eax,al
85C0           #    test_eax,eax          # if
58 #    pop_eax
0F84 %_match_else4 #    je %_match_else4
 ## bootstrappable.c 39
50               #  push_eax              # 0
B8 00000000 #   mov_eax, %0
8B5D00          #   mov_ebx,[ebp]         # return
53 #    push_ebx
C3 #    ret
:_match_else4  #:_match_else4 # no else
50               #  push_eax              # i (local)
8D85 0C000000 # lea_eax,[ebp+DWORD] %12
50               #  push_eax              # 4294967295
B8 FFFFFFFF #   mov_eax, %4294967295
5B                # pop_ebx               # =
8903 #  mov_[ebx],eax
58                # pop_eax               # ;
 ## bootstrappable.c 42
:_match_loop5 #:_match_loop5
 ## bootstrappable.c 43
 ## bootstrappable.c 44
50               #  push_eax              # i (local)
8D85 0C000000 # lea_eax,[ebp+DWORD] %12
50               #  push_eax              # i (local)
8D85 0C000000 # lea_eax,[ebp+DWORD] %12
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # 1
B8 01000000 #   mov_eax, %1
5B                # pop_ebx               # +
01D8 #  add_eax,ebx
5B                # pop_ebx               # =
8903 #  mov_[ebx],eax
58                # pop_eax               # ;
 ## bootstrappable.c 45
50               #  push_eax              # a (local)
8D85 08000000 # lea_eax,[ebp+DWORD] %8
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # i (local)
8D85 0C000000 # lea_eax,[ebp+DWORD] %12
8B00          # mov_eax,[eax]         # ?
5B                # pop_ebx               # +
01D8 #  add_eax,ebx
8A00           #    mov_al,[eax]          # ?1
0FB6C0 #    movzx_eax,al
0FBEC0           #  movsx_eax,al          # char
50               #  push_eax              # b (local)
8D85 04000000 # lea_eax,[ebp+DWORD] %4
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # i (local)
8D85 0C000000 # lea_eax,[ebp+DWORD] %12
8B00          # mov_eax,[eax]         # ?
5B                # pop_ebx               # +
01D8 #  add_eax,ebx
8A00           #    mov_al,[eax]          # ?1
0FB6C0 #    movzx_eax,al
0FBEC0           #  movsx_eax,al          # char
5B                # pop_ebx               # !=
39C3 #  cmp_eax_ebx
0F95C0 #    setne_al
0FB6C0 #    movzx_eax,al
85C0           #    test_eax,eax          # if
58 #    pop_eax
0F84 %_match_else6 #    je %_match_else6
 ## bootstrappable.c 46
 ## bootstrappable.c 47
50               #  push_eax              # 0
B8 00000000 #   mov_eax, %0
8B5D00          #   mov_ebx,[ebp]         # return
53 #    push_ebx
C3 #    ret
:_match_else6  #:_match_else6 # no else
50               #  push_eax              # 0
B8 00000000 #   mov_eax, %0
50               #  push_eax              # a (local)
8D85 08000000 # lea_eax,[ebp+DWORD] %8
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # i (local)
8D85 0C000000 # lea_eax,[ebp+DWORD] %12
8B00          # mov_eax,[eax]         # ?
5B                # pop_ebx               # +
01D8 #  add_eax,ebx
8A00           #    mov_al,[eax]          # ?1
0FB6C0 #    movzx_eax,al
0FBEC0           #  movsx_eax,al          # char
5B                # pop_ebx               # !=
39C3 #  cmp_eax_ebx
0F95C0 #    setne_al
0FB6C0 #    movzx_eax,al
85C0           #    test_eax,eax          # &&
0F84 %_match_and_end7 # je %_match_and_end7
58 #    pop_eax
50               #  push_eax              # 0
B8 00000000 #   mov_eax, %0
50               #  push_eax              # b (local)
8D85 04000000 # lea_eax,[ebp+DWORD] %4
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # i (local)
8D85 0C000000 # lea_eax,[ebp+DWORD] %12
8B00          # mov_eax,[eax]         # ?
5B                # pop_ebx               # +
01D8 #  add_eax,ebx
8A00           #    mov_al,[eax]          # ?1
0FB6C0 #    movzx_eax,al
0FBEC0           #  movsx_eax,al          # char
5B                # pop_ebx               # !=
39C3 #  cmp_eax_ebx
0F95C0 #    setne_al
0FB6C0 #    movzx_eax,al
:_match_and_end7 #:_match_and_end7
85C0           #    test_eax,eax          # !
0F94C0 #    sete_al
0FB6C0 #    movzx_eax,al
85C0           #    test_eax,eax          # if
58 #    pop_eax
0F84 %_match_else8 #    je %_match_else8
E9 %_match_loop_end5 #  jmp %_match_loop_end5
:_match_else8  #:_match_else8 # no else
E9 %_match_loop5 #  jmp %_match_loop5
:_match_loop_end5 #:_match_loop_end5
 ## bootstrappable.c 50
50               #  push_eax              # 1
B8 01000000 #   mov_eax, %1
8B5D00          #   mov_ebx,[ebp]         # return
53 #    push_ebx
C3 #    ret
50               #  push_eax              # 0
B8 00000000 #   mov_eax, %0
8B5D00          #   mov_ebx,[ebp]         # return
53 #    push_ebx
C3 #    ret
 #
:f_in_set #:f_in_set
58 #    pop_eax
894500 #    mov_[ebp],eax
58 #    pop_eax
50               #  push_eax              # s (local)
8D85 04000000 # lea_eax,[ebp+DWORD] %4
5B                # pop_ebx               # =:
8918 #  mov_[eax],ebx
58 #    pop_eax
50               #  push_eax              # c (local)
8D85 08000000 # lea_eax,[ebp+DWORD] %8
5B                # pop_ebx               # =:
8918 #  mov_[eax],ebx
58 #    pop_eax
 ## bootstrappable.c 57
50               #  push_eax              # 0
B8 00000000 #   mov_eax, %0
50               #  push_eax              # s (local)
8D85 04000000 # lea_eax,[ebp+DWORD] %4
8B00          # mov_eax,[eax]         # ?
5B                # pop_ebx               # ==
39C3 #  cmp_eax_ebx
0F94C0 #    sete_al
0FB6C0 #    movzx_eax,al
85C0           #    test_eax,eax          # if
58 #    pop_eax
0F84 %_in_set_else1 #   je %_in_set_else1
 ## bootstrappable.c 57
50               #  push_eax              # 0
B8 00000000 #   mov_eax, %0
8B5D00          #   mov_ebx,[ebp]         # return
53 #    push_ebx
C3 #    ret
 ## bootstrappable.c 59
:_in_set_else1  #:_in_set_else1 # no else
:_in_set_loop2 #:_in_set_loop2
50               #  push_eax              # 0
B8 00000000 #   mov_eax, %0
50               #  push_eax              # s (local)
8D85 04000000 # lea_eax,[ebp+DWORD] %4
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # 0
B8 00000000 #   mov_eax, %0
5B                # pop_ebx               # +
01D8 #  add_eax,ebx
8A00           #    mov_al,[eax]          # ?1
0FB6C0 #    movzx_eax,al
0FBEC0           #  movsx_eax,al          # char
5B                # pop_ebx               # !=
39C3 #  cmp_eax_ebx
0F95C0 #    setne_al
0FB6C0 #    movzx_eax,al
85C0           #    test_eax,eax          # !
0F94C0 #    sete_al
0FB6C0 #    movzx_eax,al
85C0           #    test_eax,eax          # if
58 #    pop_eax
0F84 %_in_set_else3 #   je %_in_set_else3
E9 %_in_set_loop_end2 # jmp %_in_set_loop_end2
 ## bootstrappable.c 60
 ## bootstrappable.c 61
:_in_set_else3  #:_in_set_else3 # no else
50               #  push_eax              # c (local)
8D85 08000000 # lea_eax,[ebp+DWORD] %8
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # s (local)
8D85 04000000 # lea_eax,[ebp+DWORD] %4
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # 0
B8 00000000 #   mov_eax, %0
5B                # pop_ebx               # +
01D8 #  add_eax,ebx
8A00           #    mov_al,[eax]          # ?1
0FB6C0 #    movzx_eax,al
0FBEC0           #  movsx_eax,al          # char
5B                # pop_ebx               # ==
39C3 #  cmp_eax_ebx
0F94C0 #    sete_al
0FB6C0 #    movzx_eax,al
85C0           #    test_eax,eax          # if
58 #    pop_eax
0F84 %_in_set_else4 #   je %_in_set_else4
 ## bootstrappable.c 61
50               #  push_eax              # 1
B8 01000000 #   mov_eax, %1
8B5D00          #   mov_ebx,[ebp]         # return
53 #    push_ebx
C3 #    ret
 ## bootstrappable.c 62
:_in_set_else4  #:_in_set_else4 # no else
50               #  push_eax              # s (local)
8D85 04000000 # lea_eax,[ebp+DWORD] %4
50               #  push_eax              # s (local)
8D85 04000000 # lea_eax,[ebp+DWORD] %4
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # 1
B8 01000000 #   mov_eax, %1
5B                # pop_ebx               # +
01D8 #  add_eax,ebx
5B                # pop_ebx               # =
8903 #  mov_[ebx],eax
58                # pop_eax               # ;
E9 %_in_set_loop2 # jmp %_in_set_loop2
:_in_set_loop_end2 #:_in_set_loop_end2
 ## bootstrappable.c 64
50               #  push_eax              # 0
B8 00000000 #   mov_eax, %0
8B5D00          #   mov_ebx,[ebp]         # return
53 #    push_ebx
C3 #    ret
50               #  push_eax              # 0
B8 00000000 #   mov_eax, %0
8B5D00          #   mov_ebx,[ebp]         # return
53 #    push_ebx
C3 #    ret
 #
:f___index_number #:f___index_number
58 #    pop_eax
894500 #    mov_[ebp],eax
58 #    pop_eax
50               #  push_eax              # c (local)
8D85 04000000 # lea_eax,[ebp+DWORD] %4
5B                # pop_ebx               # =:
8918 #  mov_[eax],ebx
58 #    pop_eax
50               #  push_eax              # s (local)
8D85 08000000 # lea_eax,[ebp+DWORD] %8
5B                # pop_ebx               # =:
8918 #  mov_[eax],ebx
58 #    pop_eax
50               #  push_eax              # i (local)
8D85 0C000000 # lea_eax,[ebp+DWORD] %12
50               #  push_eax              # 0
B8 00000000 #   mov_eax, %0
5B                # pop_ebx               # =
8903 #  mov_[ebx],eax
58                # pop_eax               # ;
 ## bootstrappable.c 71
:___index_number_loop1 #:___index_number_loop1
50               #  push_eax              # s (local)
8D85 08000000 # lea_eax,[ebp+DWORD] %8
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # i (local)
8D85 0C000000 # lea_eax,[ebp+DWORD] %12
8B00          # mov_eax,[eax]         # ?
5B                # pop_ebx               # +
01D8 #  add_eax,ebx
8A00           #    mov_al,[eax]          # ?1
0FB6C0 #    movzx_eax,al
0FBEC0           #  movsx_eax,al          # char
50               #  push_eax              # c (local)
8D85 04000000 # lea_eax,[ebp+DWORD] %4
8A00           #    mov_al,[eax]          # ?1
0FB6C0 #    movzx_eax,al
0FBEC0           #  movsx_eax,al          # char
5B                # pop_ebx               # !=
39C3 #  cmp_eax_ebx
0F95C0 #    setne_al
0FB6C0 #    movzx_eax,al
85C0           #    test_eax,eax          # !
0F94C0 #    sete_al
0FB6C0 #    movzx_eax,al
85C0           #    test_eax,eax          # if
58 #    pop_eax
0F84 %___index_number_else2 #   je %___index_number_else2
E9 %___index_number_loop_end1 # jmp %___index_number_loop_end1
 ## bootstrappable.c 72
 ## bootstrappable.c 73
:___index_number_else2  #:___index_number_else2 # no else
50               #  push_eax              # i (local)
8D85 0C000000 # lea_eax,[ebp+DWORD] %12
50               #  push_eax              # i (local)
8D85 0C000000 # lea_eax,[ebp+DWORD] %12
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # 1
B8 01000000 #   mov_eax, %1
5B                # pop_ebx               # +
01D8 #  add_eax,ebx
5B                # pop_ebx               # =
8903 #  mov_[ebx],eax
58                # pop_eax               # ;
 ## bootstrappable.c 74
50               #  push_eax              # 0
B8 00000000 #   mov_eax, %0
50               #  push_eax              # s (local)
8D85 08000000 # lea_eax,[ebp+DWORD] %8
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # i (local)
8D85 0C000000 # lea_eax,[ebp+DWORD] %12
8B00          # mov_eax,[eax]         # ?
5B                # pop_ebx               # +
01D8 #  add_eax,ebx
8A00           #    mov_al,[eax]          # ?1
0FB6C0 #    movzx_eax,al
0FBEC0           #  movsx_eax,al          # char
5B                # pop_ebx               # ==
39C3 #  cmp_eax_ebx
0F94C0 #    sete_al
0FB6C0 #    movzx_eax,al
85C0           #    test_eax,eax          # if
58 #    pop_eax
0F84 %___index_number_else3 #   je %___index_number_else3
 ## bootstrappable.c 74
50               #  push_eax              # 4294967295
B8 FFFFFFFF #   mov_eax, %4294967295
8B5D00          #   mov_ebx,[ebp]         # return
53 #    push_ebx
C3 #    ret
:___index_number_else3  #:___index_number_else3 # no else
E9 %___index_number_loop1 # jmp %___index_number_loop1
:___index_number_loop_end1 #:___index_number_loop_end1
 ## bootstrappable.c 76
50               #  push_eax              # i (local)
8D85 0C000000 # lea_eax,[ebp+DWORD] %12
8B00          # mov_eax,[eax]         # ?
8B5D00          #   mov_ebx,[ebp]         # return
53 #    push_ebx
C3 #    ret
50               #  push_eax              # 0
B8 00000000 #   mov_eax, %0
8B5D00          #   mov_ebx,[ebp]         # return
53 #    push_ebx
C3 #    ret
 #
:f___toupper #:f___toupper
58 #    pop_eax
894500 #    mov_[ebp],eax
58 #    pop_eax
50               #  push_eax              # c (local)
8D85 04000000 # lea_eax,[ebp+DWORD] %4
5B                # pop_ebx               # =:
8918 #  mov_[eax],ebx
58 #    pop_eax
 ## bootstrappable.c 82
50               #  push_eax              # c (local)
8D85 04000000 # lea_eax,[ebp+DWORD] %4
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # 'abcdefghijklmnopqrstuvwxyz'
B8 &string_12 # mov_eax, &string_12
50               #  push_eax              # in_set (function)
B8 &f_in_set #  mov_eax, &f_in_set
81C5 08000000          #    add_ebp, %8         # ()
FFD0 #  call_eax
81ED 08000000 # sub_ebp, %8
85C0           #    test_eax,eax          # if
58 #    pop_eax
0F84 %___toupper_else1 #    je %___toupper_else1
 ## bootstrappable.c 82
50               #  push_eax              # c (local)
8D85 04000000 # lea_eax,[ebp+DWORD] %4
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # 223
B8 DF000000 #   mov_eax, %223
5B                # pop_ebx               # &
21D8 #  and_eax,ebx
8B5D00          #   mov_ebx,[ebp]         # return
53 #    push_ebx
C3 #    ret
 ## bootstrappable.c 83
:___toupper_else1  #:___toupper_else1 # no else
50               #  push_eax              # c (local)
8D85 04000000 # lea_eax,[ebp+DWORD] %4
8B00          # mov_eax,[eax]         # ?
8B5D00          #   mov_ebx,[ebp]         # return
53 #    push_ebx
C3 #    ret
50               #  push_eax              # 0
B8 00000000 #   mov_eax, %0
8B5D00          #   mov_ebx,[ebp]         # return
53 #    push_ebx
C3 #    ret
 #
:f___set_reader #:f___set_reader
58 #    pop_eax
894500 #    mov_[ebp],eax
58 #    pop_eax
50               #  push_eax              # input (local)
8D85 04000000 # lea_eax,[ebp+DWORD] %4
5B                # pop_ebx               # =:
8918 #  mov_[eax],ebx
58 #    pop_eax
50               #  push_eax              # mult (local)
8D85 08000000 # lea_eax,[ebp+DWORD] %8
5B                # pop_ebx               # =:
8918 #  mov_[eax],ebx
58 #    pop_eax
50               #  push_eax              # set (local)
8D85 0C000000 # lea_eax,[ebp+DWORD] %12
5B                # pop_ebx               # =:
8918 #  mov_[eax],ebx
58 #    pop_eax
50               #  push_eax              # n (local)
8D85 10000000 # lea_eax,[ebp+DWORD] %16
50               #  push_eax              # 0
B8 00000000 #   mov_eax, %0
5B                # pop_ebx               # =
8903 #  mov_[ebx],eax
58                # pop_eax               # ;
50               #  push_eax              # i (local)
8D85 14000000 # lea_eax,[ebp+DWORD] %20
50               #  push_eax              # 0
B8 00000000 #   mov_eax, %0
5B                # pop_ebx               # =
8903 #  mov_[ebx],eax
58                # pop_eax               # ;
50               #  push_eax              # negative_p (local)
8D85 1C000000 # lea_eax,[ebp+DWORD] %28
50               #  push_eax              # 0
B8 00000000 #   mov_eax, %0
5B                # pop_ebx               # =
8903 #  mov_[ebx],eax
58                # pop_eax               # ;
 ## bootstrappable.c 94
50               #  push_eax              # input (local)
8D85 04000000 # lea_eax,[ebp+DWORD] %4
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # 0
B8 00000000 #   mov_eax, %0
5B                # pop_ebx               # +
01D8 #  add_eax,ebx
8A00           #    mov_al,[eax]          # ?1
0FB6C0 #    movzx_eax,al
0FBEC0           #  movsx_eax,al          # char
50               #  push_eax              # 45
B8 2D000000 #   mov_eax, %45
5B                # pop_ebx               # ==
39C3 #  cmp_eax_ebx
0F94C0 #    sete_al
0FB6C0 #    movzx_eax,al
85C0           #    test_eax,eax          # if
58 #    pop_eax
0F84 %___set_reader_else1 # je %___set_reader_else1
 ## bootstrappable.c 95
 ## bootstrappable.c 96
50               #  push_eax              # negative_p (local)
8D85 1C000000 # lea_eax,[ebp+DWORD] %28
50               #  push_eax              # 1
B8 01000000 #   mov_eax, %1
5B                # pop_ebx               # =
8903 #  mov_[ebx],eax
58                # pop_eax               # ;
 ## bootstrappable.c 97
50               #  push_eax              # i (local)
8D85 14000000 # lea_eax,[ebp+DWORD] %20
50               #  push_eax              # i (local)
8D85 14000000 # lea_eax,[ebp+DWORD] %20
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # 1
B8 01000000 #   mov_eax, %1
5B                # pop_ebx               # +
01D8 #  add_eax,ebx
5B                # pop_ebx               # =
8903 #  mov_[ebx],eax
58                # pop_eax               # ;
 ## bootstrappable.c 100
:___set_reader_else1  #:___set_reader_else1 # no else
:___set_reader_loop2 #:___set_reader_loop2
50               #  push_eax              # input (local)
8D85 04000000 # lea_eax,[ebp+DWORD] %4
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # i (local)
8D85 14000000 # lea_eax,[ebp+DWORD] %20
8B00          # mov_eax,[eax]         # ?
5B                # pop_ebx               # +
01D8 #  add_eax,ebx
8A00           #    mov_al,[eax]          # ?1
0FB6C0 #    movzx_eax,al
0FBEC0           #  movsx_eax,al          # char
50               #  push_eax              # set (local)
8D85 0C000000 # lea_eax,[ebp+DWORD] %12
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # in_set (function)
B8 &f_in_set #  mov_eax, &f_in_set
81C5 20000000          #    add_ebp, %32         # ()
FFD0 #  call_eax
81ED 20000000 # sub_ebp, %32
85C0           #    test_eax,eax          # !
0F94C0 #    sete_al
0FB6C0 #    movzx_eax,al
85C0           #    test_eax,eax          # if
58 #    pop_eax
0F84 %___set_reader_else3 # je %___set_reader_else3
E9 %___set_reader_loop_end2 #   jmp %___set_reader_loop_end2
 ## bootstrappable.c 101
 ## bootstrappable.c 102
:___set_reader_else3  #:___set_reader_else3 # no else
50               #  push_eax              # 95
B8 5F000000 #   mov_eax, %95
50               #  push_eax              # input (local)
8D85 04000000 # lea_eax,[ebp+DWORD] %4
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # i (local)
8D85 14000000 # lea_eax,[ebp+DWORD] %20
8B00          # mov_eax,[eax]         # ?
5B                # pop_ebx               # +
01D8 #  add_eax,ebx
8A00           #    mov_al,[eax]          # ?1
0FB6C0 #    movzx_eax,al
0FBEC0           #  movsx_eax,al          # char
5B                # pop_ebx               # ==
39C3 #  cmp_eax_ebx
0F94C0 #    sete_al
0FB6C0 #    movzx_eax,al
85C0           #    test_eax,eax          # if
58 #    pop_eax
0F84 %___set_reader_else4 # je %___set_reader_else4
 ## bootstrappable.c 103
 ## bootstrappable.c 104
50               #  push_eax              # i (local)
8D85 14000000 # lea_eax,[ebp+DWORD] %20
50               #  push_eax              # i (local)
8D85 14000000 # lea_eax,[ebp+DWORD] %20
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # 1
B8 01000000 #   mov_eax, %1
5B                # pop_ebx               # +
01D8 #  add_eax,ebx
5B                # pop_ebx               # =
8903 #  mov_[ebx],eax
58                # pop_eax               # ;
 ## bootstrappable.c 105
E9 %___set_reader_loop2 #   jmp %___set_reader_loop2
 ## bootstrappable.c 108
:___set_reader_else4  #:___set_reader_else4 # no else
50               #  push_eax              # n (local)
8D85 10000000 # lea_eax,[ebp+DWORD] %16
50               #  push_eax              # n (local)
8D85 10000000 # lea_eax,[ebp+DWORD] %16
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # mult (local)
8D85 08000000 # lea_eax,[ebp+DWORD] %8
8B00          # mov_eax,[eax]         # ?
5B                # pop_ebx               # *
F7E3 #  mul_ebx
5B                # pop_ebx               # =
8903 #  mov_[ebx],eax
58                # pop_eax               # ;
 ## bootstrappable.c 109
50               #  push_eax              # hold (local)
8D85 18000000 # lea_eax,[ebp+DWORD] %24
50               #  push_eax              # set (local)
8D85 0C000000 # lea_eax,[ebp+DWORD] %12
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # input (local)
8D85 04000000 # lea_eax,[ebp+DWORD] %4
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # i (local)
8D85 14000000 # lea_eax,[ebp+DWORD] %20
8B00          # mov_eax,[eax]         # ?
5B                # pop_ebx               # +
01D8 #  add_eax,ebx
8A00           #    mov_al,[eax]          # ?1
0FB6C0 #    movzx_eax,al
0FBEC0           #  movsx_eax,al          # char
50               #  push_eax              # __toupper (function)
B8 &f___toupper #   mov_eax, &f___toupper
81C5 20000000          #    add_ebp, %32         # ()
FFD0 #  call_eax
81ED 20000000 # sub_ebp, %32
50               #  push_eax              # __index_number (function)
B8 &f___index_number #  mov_eax, &f___index_number
81C5 20000000          #    add_ebp, %32         # ()
FFD0 #  call_eax
81ED 20000000 # sub_ebp, %32
5B                # pop_ebx               # =
8903 #  mov_[ebx],eax
58                # pop_eax               # ;
 ## bootstrappable.c 112
50               #  push_eax              # 4294967295
B8 FFFFFFFF #   mov_eax, %4294967295
50               #  push_eax              # hold (local)
8D85 18000000 # lea_eax,[ebp+DWORD] %24
8B00          # mov_eax,[eax]         # ?
5B                # pop_ebx               # ==
39C3 #  cmp_eax_ebx
0F94C0 #    sete_al
0FB6C0 #    movzx_eax,al
85C0           #    test_eax,eax          # if
58 #    pop_eax
0F84 %___set_reader_else5 # je %___set_reader_else5
 ## bootstrappable.c 112
50               #  push_eax              # 0
B8 00000000 #   mov_eax, %0
8B5D00          #   mov_ebx,[ebp]         # return
53 #    push_ebx
C3 #    ret
 ## bootstrappable.c 113
:___set_reader_else5  #:___set_reader_else5 # no else
50               #  push_eax              # n (local)
8D85 10000000 # lea_eax,[ebp+DWORD] %16
50               #  push_eax              # n (local)
8D85 10000000 # lea_eax,[ebp+DWORD] %16
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # hold (local)
8D85 18000000 # lea_eax,[ebp+DWORD] %24
8B00          # mov_eax,[eax]         # ?
5B                # pop_ebx               # +
01D8 #  add_eax,ebx
5B                # pop_ebx               # =
8903 #  mov_[ebx],eax
58                # pop_eax               # ;
 ## bootstrappable.c 114
50               #  push_eax              # i (local)
8D85 14000000 # lea_eax,[ebp+DWORD] %20
50               #  push_eax              # i (local)
8D85 14000000 # lea_eax,[ebp+DWORD] %20
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # 1
B8 01000000 #   mov_eax, %1
5B                # pop_ebx               # +
01D8 #  add_eax,ebx
5B                # pop_ebx               # =
8903 #  mov_[ebx],eax
58                # pop_eax               # ;
E9 %___set_reader_loop2 #   jmp %___set_reader_loop2
:___set_reader_loop_end2 #:___set_reader_loop_end2
 ## bootstrappable.c 118
50               #  push_eax              # 0
B8 00000000 #   mov_eax, %0
50               #  push_eax              # input (local)
8D85 04000000 # lea_eax,[ebp+DWORD] %4
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # i (local)
8D85 14000000 # lea_eax,[ebp+DWORD] %20
8B00          # mov_eax,[eax]         # ?
5B                # pop_ebx               # +
01D8 #  add_eax,ebx
8A00           #    mov_al,[eax]          # ?1
0FB6C0 #    movzx_eax,al
0FBEC0           #  movsx_eax,al          # char
5B                # pop_ebx               # !=
39C3 #  cmp_eax_ebx
0F95C0 #    setne_al
0FB6C0 #    movzx_eax,al
85C0           #    test_eax,eax          # if
58 #    pop_eax
0F84 %___set_reader_else6 # je %___set_reader_else6
 ## bootstrappable.c 118
50               #  push_eax              # 0
B8 00000000 #   mov_eax, %0
8B5D00          #   mov_ebx,[ebp]         # return
53 #    push_ebx
C3 #    ret
 ## bootstrappable.c 120
:___set_reader_else6  #:___set_reader_else6 # no else
50               #  push_eax              # negative_p (local)
8D85 1C000000 # lea_eax,[ebp+DWORD] %28
8B00          # mov_eax,[eax]         # ?
85C0           #    test_eax,eax          # if
58 #    pop_eax
0F84 %___set_reader_else7 # je %___set_reader_else7
 ## bootstrappable.c 121
 ## bootstrappable.c 122
50               #  push_eax              # n (local)
8D85 10000000 # lea_eax,[ebp+DWORD] %16
50               #  push_eax              # 0
B8 00000000 #   mov_eax, %0
50               #  push_eax              # n (local)
8D85 10000000 # lea_eax,[ebp+DWORD] %16
8B00          # mov_eax,[eax]         # ?
5B                # pop_ebx               # -
29C3 #  sub_ebx,eax
89D8 #  mov_eax,ebx
5B                # pop_ebx               # =
8903 #  mov_[ebx],eax
58                # pop_eax               # ;
 ## bootstrappable.c 125
:___set_reader_else7  #:___set_reader_else7 # no else
50               #  push_eax              # n (local)
8D85 10000000 # lea_eax,[ebp+DWORD] %16
8B00          # mov_eax,[eax]         # ?
8B5D00          #   mov_ebx,[ebp]         # return
53 #    push_ebx
C3 #    ret
50               #  push_eax              # 0
B8 00000000 #   mov_eax, %0
8B5D00          #   mov_ebx,[ebp]         # return
53 #    push_ebx
C3 #    ret
 #
:f_strtoint #:f_strtoint
58 #    pop_eax
894500 #    mov_[ebp],eax
58 #    pop_eax
50               #  push_eax              # a (local)
8D85 04000000 # lea_eax,[ebp+DWORD] %4
5B                # pop_ebx               # =:
8918 #  mov_[eax],ebx
58 #    pop_eax
50               #  push_eax              # result (local)
8D85 08000000 # lea_eax,[ebp+DWORD] %8
50               #  push_eax              # 0
B8 00000000 #   mov_eax, %0
5B                # pop_ebx               # =
8903 #  mov_[ebx],eax
58                # pop_eax               # ;
 ## bootstrappable.c 132
50               #  push_eax              # 0
B8 00000000 #   mov_eax, %0
50               #  push_eax              # a (local)
8D85 04000000 # lea_eax,[ebp+DWORD] %4
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # 0
B8 00000000 #   mov_eax, %0
5B                # pop_ebx               # +
01D8 #  add_eax,ebx
8A00           #    mov_al,[eax]          # ?1
0FB6C0 #    movzx_eax,al
0FBEC0           #  movsx_eax,al          # char
5B                # pop_ebx               # ==
39C3 #  cmp_eax_ebx
0F94C0 #    sete_al
0FB6C0 #    movzx_eax,al
85C0           #    test_eax,eax          # if
58 #    pop_eax
0F84 %_strtoint_else1 # je %_strtoint_else1
 ## bootstrappable.c 133
 ## bootstrappable.c 134
50               #  push_eax              # result (local)
8D85 08000000 # lea_eax,[ebp+DWORD] %8
50               #  push_eax              # 0
B8 00000000 #   mov_eax, %0
5B                # pop_ebx               # =
8903 #  mov_[ebx],eax
58                # pop_eax               # ;
E9 %_strtoint_else_end1 #   jmp %_strtoint_else_end1
:_strtoint_else1 #:_strtoint_else1
 ## bootstrappable.c 137
50               #  push_eax              # 48
B8 30000000 #   mov_eax, %48
50               #  push_eax              # a (local)
8D85 04000000 # lea_eax,[ebp+DWORD] %4
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # 0
B8 00000000 #   mov_eax, %0
5B                # pop_ebx               # +
01D8 #  add_eax,ebx
8A00           #    mov_al,[eax]          # ?1
0FB6C0 #    movzx_eax,al
0FBEC0           #  movsx_eax,al          # char
5B                # pop_ebx               # ==
39C3 #  cmp_eax_ebx
0F94C0 #    sete_al
0FB6C0 #    movzx_eax,al
85C0           #    test_eax,eax          # &&
0F84 %_strtoint_and_end2 #  je %_strtoint_and_end2
58 #    pop_eax
50               #  push_eax              # 98
B8 62000000 #   mov_eax, %98
50               #  push_eax              # a (local)
8D85 04000000 # lea_eax,[ebp+DWORD] %4
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # 1
B8 01000000 #   mov_eax, %1
5B                # pop_ebx               # +
01D8 #  add_eax,ebx
8A00           #    mov_al,[eax]          # ?1
0FB6C0 #    movzx_eax,al
0FBEC0           #  movsx_eax,al          # char
5B                # pop_ebx               # ==
39C3 #  cmp_eax_ebx
0F94C0 #    sete_al
0FB6C0 #    movzx_eax,al
:_strtoint_and_end2 #:_strtoint_and_end2
85C0           #    test_eax,eax          # if
58 #    pop_eax
0F84 %_strtoint_else3 # je %_strtoint_else3
 ## bootstrappable.c 138
 ## bootstrappable.c 139
50               #  push_eax              # result (local)
8D85 08000000 # lea_eax,[ebp+DWORD] %8
50               #  push_eax              # '01_'
B8 &string_13 # mov_eax, &string_13
50               #  push_eax              # 2
B8 02000000 #   mov_eax, %2
50               #  push_eax              # a (local)
8D85 04000000 # lea_eax,[ebp+DWORD] %4
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # 2
B8 02000000 #   mov_eax, %2
5B                # pop_ebx               # +
01D8 #  add_eax,ebx
50               #  push_eax              # __set_reader (function)
B8 &f___set_reader #    mov_eax, &f___set_reader
81C5 0C000000          #    add_ebp, %12         # ()
FFD0 #  call_eax
81ED 0C000000 # sub_ebp, %12
5B                # pop_ebx               # =
8903 #  mov_[ebx],eax
58                # pop_eax               # ;
E9 %_strtoint_else_end3 #   jmp %_strtoint_else_end3
:_strtoint_else3 #:_strtoint_else3
 ## bootstrappable.c 142
50               #  push_eax              # 48
B8 30000000 #   mov_eax, %48
50               #  push_eax              # a (local)
8D85 04000000 # lea_eax,[ebp+DWORD] %4
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # 0
B8 00000000 #   mov_eax, %0
5B                # pop_ebx               # +
01D8 #  add_eax,ebx
8A00           #    mov_al,[eax]          # ?1
0FB6C0 #    movzx_eax,al
0FBEC0           #  movsx_eax,al          # char
5B                # pop_ebx               # ==
39C3 #  cmp_eax_ebx
0F94C0 #    sete_al
0FB6C0 #    movzx_eax,al
85C0           #    test_eax,eax          # &&
0F84 %_strtoint_and_end4 #  je %_strtoint_and_end4
58 #    pop_eax
50               #  push_eax              # 120
B8 78000000 #   mov_eax, %120
50               #  push_eax              # a (local)
8D85 04000000 # lea_eax,[ebp+DWORD] %4
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # 1
B8 01000000 #   mov_eax, %1
5B                # pop_ebx               # +
01D8 #  add_eax,ebx
8A00           #    mov_al,[eax]          # ?1
0FB6C0 #    movzx_eax,al
0FBEC0           #  movsx_eax,al          # char
5B                # pop_ebx               # ==
39C3 #  cmp_eax_ebx
0F94C0 #    sete_al
0FB6C0 #    movzx_eax,al
:_strtoint_and_end4 #:_strtoint_and_end4
85C0           #    test_eax,eax          # if
58 #    pop_eax
0F84 %_strtoint_else5 # je %_strtoint_else5
 ## bootstrappable.c 143
 ## bootstrappable.c 144
50               #  push_eax              # result (local)
8D85 08000000 # lea_eax,[ebp+DWORD] %8
50               #  push_eax              # '0123456789ABCDEFabcdef_'
B8 &string_14 # mov_eax, &string_14
50               #  push_eax              # 16
B8 10000000 #   mov_eax, %16
50               #  push_eax              # a (local)
8D85 04000000 # lea_eax,[ebp+DWORD] %4
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # 2
B8 02000000 #   mov_eax, %2
5B                # pop_ebx               # +
01D8 #  add_eax,ebx
50               #  push_eax              # __set_reader (function)
B8 &f___set_reader #    mov_eax, &f___set_reader
81C5 0C000000          #    add_ebp, %12         # ()
FFD0 #  call_eax
81ED 0C000000 # sub_ebp, %12
5B                # pop_ebx               # =
8903 #  mov_[ebx],eax
58                # pop_eax               # ;
E9 %_strtoint_else_end5 #   jmp %_strtoint_else_end5
:_strtoint_else5 #:_strtoint_else5
 ## bootstrappable.c 147
50               #  push_eax              # 48
B8 30000000 #   mov_eax, %48
50               #  push_eax              # a (local)
8D85 04000000 # lea_eax,[ebp+DWORD] %4
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # 0
B8 00000000 #   mov_eax, %0
5B                # pop_ebx               # +
01D8 #  add_eax,ebx
8A00           #    mov_al,[eax]          # ?1
0FB6C0 #    movzx_eax,al
0FBEC0           #  movsx_eax,al          # char
5B                # pop_ebx               # ==
39C3 #  cmp_eax_ebx
0F94C0 #    sete_al
0FB6C0 #    movzx_eax,al
85C0           #    test_eax,eax          # if
58 #    pop_eax
0F84 %_strtoint_else6 # je %_strtoint_else6
 ## bootstrappable.c 148
 ## bootstrappable.c 149
50               #  push_eax              # result (local)
8D85 08000000 # lea_eax,[ebp+DWORD] %8
50               #  push_eax              # '01234567_'
B8 &string_15 # mov_eax, &string_15
50               #  push_eax              # 8
B8 08000000 #   mov_eax, %8
50               #  push_eax              # a (local)
8D85 04000000 # lea_eax,[ebp+DWORD] %4
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # 1
B8 01000000 #   mov_eax, %1
5B                # pop_ebx               # +
01D8 #  add_eax,ebx
50               #  push_eax              # __set_reader (function)
B8 &f___set_reader #    mov_eax, &f___set_reader
81C5 0C000000          #    add_ebp, %12         # ()
FFD0 #  call_eax
81ED 0C000000 # sub_ebp, %12
5B                # pop_ebx               # =
8903 #  mov_[ebx],eax
58                # pop_eax               # ;
E9 %_strtoint_else_end6 #   jmp %_strtoint_else_end6
:_strtoint_else6 #:_strtoint_else6
 ## bootstrappable.c 153
 ## bootstrappable.c 154
50               #  push_eax              # result (local)
8D85 08000000 # lea_eax,[ebp+DWORD] %8
50               #  push_eax              # '0123456789_'
B8 &string_16 # mov_eax, &string_16
50               #  push_eax              # 10
B8 0A000000 #   mov_eax, %10
50               #  push_eax              # a (local)
8D85 04000000 # lea_eax,[ebp+DWORD] %4
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # __set_reader (function)
B8 &f___set_reader #    mov_eax, &f___set_reader
81C5 0C000000          #    add_ebp, %12         # ()
FFD0 #  call_eax
81ED 0C000000 # sub_ebp, %12
5B                # pop_ebx               # =
8903 #  mov_[ebx],eax
58                # pop_eax               # ;
:_strtoint_else_end6 #:_strtoint_else_end6
:_strtoint_else_end5 #:_strtoint_else_end5
:_strtoint_else_end3 #:_strtoint_else_end3
:_strtoint_else_end1 #:_strtoint_else_end1
 ## bootstrappable.c 158
50               #  push_eax              # 0
B8 00000000 #   mov_eax, %0
50               #  push_eax              # 2147483648
B8 00000080 #   mov_eax, %2147483648
50               #  push_eax              # result (local)
8D85 08000000 # lea_eax,[ebp+DWORD] %8
8B00          # mov_eax,[eax]         # ?
5B                # pop_ebx               # &
21D8 #  and_eax,ebx
5B                # pop_ebx               # !=
39C3 #  cmp_eax_ebx
0F95C0 #    setne_al
0FB6C0 #    movzx_eax,al
85C0           #    test_eax,eax          # if
58 #    pop_eax
0F84 %_strtoint_else7 # je %_strtoint_else7
 ## bootstrappable.c 158
50               #  push_eax              # result (local)
8D85 08000000 # lea_eax,[ebp+DWORD] %8
50               #  push_eax              # 4294967295
B8 FFFFFFFF #   mov_eax, %4294967295
50               #  push_eax              # 31
B8 1F000000 #   mov_eax, %31
89C1            #   mov_ecx,eax           # <<
58 #    pop_eax
D3E0 #  shl_eax,cl
50               #  push_eax              # result (local)
8D85 08000000 # lea_eax,[ebp+DWORD] %8
8B00          # mov_eax,[eax]         # ?
5B                # pop_ebx               # |
09D8 #  or_eax,ebx
5B                # pop_ebx               # =
8903 #  mov_[ebx],eax
58                # pop_eax               # ;
 ## bootstrappable.c 159
:_strtoint_else7  #:_strtoint_else7 # no else
50               #  push_eax              # result (local)
8D85 08000000 # lea_eax,[ebp+DWORD] %8
8B00          # mov_eax,[eax]         # ?
8B5D00          #   mov_ebx,[ebp]         # return
53 #    push_ebx
C3 #    ret
50               #  push_eax              # 0
B8 00000000 #   mov_eax, %0
8B5D00          #   mov_ebx,[ebp]         # return
53 #    push_ebx
C3 #    ret
 #
:f_int2str #:f_int2str
58 #    pop_eax
894500 #    mov_[ebp],eax
58 #    pop_eax
50               #  push_eax              # signed_p (local)
8D85 04000000 # lea_eax,[ebp+DWORD] %4
5B                # pop_ebx               # =:
8918 #  mov_[eax],ebx
58 #    pop_eax
50               #  push_eax              # base (local)
8D85 08000000 # lea_eax,[ebp+DWORD] %8
5B                # pop_ebx               # =:
8918 #  mov_[eax],ebx
58 #    pop_eax
50               #  push_eax              # x (local)
8D85 0C000000 # lea_eax,[ebp+DWORD] %12
5B                # pop_ebx               # =:
8918 #  mov_[eax],ebx
58 #    pop_eax
 ## bootstrappable.c 164
50               #  push_eax              # 1
B8 01000000 #   mov_eax, %1
50               #  push_eax              # base (local)
8D85 08000000 # lea_eax,[ebp+DWORD] %8
8B00          # mov_eax,[eax]         # ?
5B                # pop_ebx               # <s
39C3 #  cmp_eax_ebx
0F9CC0 #    setl_al
0FB6C0 #    movzx_eax,al
50               #  push_eax              # 'int2str doesn't support a base less than 2\n'
B8 &string_17 # mov_eax, &string_17
50               #  push_eax              # require (function)
B8 &f_require # mov_eax, &f_require
81C5 10000000          #    add_ebp, %16         # ()
FFD0 #  call_eax
81ED 10000000 # sub_ebp, %16
58                # pop_eax               # ;
 ## bootstrappable.c 165
50               #  push_eax              # 37
B8 25000000 #   mov_eax, %37
50               #  push_eax              # base (local)
8D85 08000000 # lea_eax,[ebp+DWORD] %8
8B00          # mov_eax,[eax]         # ?
5B                # pop_ebx               # >s
39C3 #  cmp_eax_ebx
0F9FC0 #    setg_al
0FB6C0 #    movzx_eax,al
50               #  push_eax              # 'int2str doesn't support a base more than 36\n'
B8 &string_18 # mov_eax, &string_18
50               #  push_eax              # require (function)
B8 &f_require # mov_eax, &f_require
81C5 10000000          #    add_ebp, %16         # ()
FFD0 #  call_eax
81ED 10000000 # sub_ebp, %16
58                # pop_eax               # ;
50               #  push_eax              # p (local)
8D85 10000000 # lea_eax,[ebp+DWORD] %16
50               #  push_eax              # 34
B8 22000000 #   mov_eax, %34
50               #  push_eax              # 1
B8 01000000 #   mov_eax, %1
50               #  push_eax              # calloc (function)
B8 &f_calloc #  mov_eax, &f_calloc
81C5 14000000          #    add_ebp, %20         # ()
FFD0 #  call_eax
81ED 14000000 # sub_ebp, %20
5B                # pop_ebx               # =
8903 #  mov_[ebx],eax
58                # pop_eax               # ;
 ## bootstrappable.c 169
50               #  push_eax              # 0
B8 00000000 #   mov_eax, %0
50               #  push_eax              # p (local)
8D85 10000000 # lea_eax,[ebp+DWORD] %16
8B00          # mov_eax,[eax]         # ?
5B                # pop_ebx               # ==
39C3 #  cmp_eax_ebx
0F94C0 #    sete_al
0FB6C0 #    movzx_eax,al
85C0           #    test_eax,eax          # if
58 #    pop_eax
0F84 %_int2str_else1 #  je %_int2str_else1
 ## bootstrappable.c 169
50               #  push_eax              # p (local)
8D85 10000000 # lea_eax,[ebp+DWORD] %16
8B00          # mov_eax,[eax]         # ?
8B5D00          #   mov_ebx,[ebp]         # return
53 #    push_ebx
C3 #    ret
 ## bootstrappable.c 171
:_int2str_else1  #:_int2str_else1 # no else
50               #  push_eax              # p (local)
8D85 10000000 # lea_eax,[ebp+DWORD] %16
50               #  push_eax              # p (local)
8D85 10000000 # lea_eax,[ebp+DWORD] %16
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # 32
B8 20000000 #   mov_eax, %32
5B                # pop_ebx               # +
01D8 #  add_eax,ebx
5B                # pop_ebx               # =
8903 #  mov_[ebx],eax
58                # pop_eax               # ;
50               #  push_eax              # sign_p (local)
8D85 18000000 # lea_eax,[ebp+DWORD] %24
50               #  push_eax              # 0
B8 00000000 #   mov_eax, %0
5B                # pop_ebx               # =
8903 #  mov_[ebx],eax
58                # pop_eax               # ;
50               #  push_eax              # table (local)
8D85 1C000000 # lea_eax,[ebp+DWORD] %28
50               #  push_eax              # '0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ'
B8 &string_19 # mov_eax, &string_19
5B                # pop_ebx               # =
8903 #  mov_[ebx],eax
58                # pop_eax               # ;
 ## bootstrappable.c 176
50               #  push_eax              # signed_p (local)
8D85 04000000 # lea_eax,[ebp+DWORD] %4
8B00          # mov_eax,[eax]         # ?
85C0           #    test_eax,eax          # &&
0F84 %_int2str_and_end2 #   je %_int2str_and_end2
58 #    pop_eax
50               #  push_eax              # 10
B8 0A000000 #   mov_eax, %10
50               #  push_eax              # base (local)
8D85 08000000 # lea_eax,[ebp+DWORD] %8
8B00          # mov_eax,[eax]         # ?
5B                # pop_ebx               # ==
39C3 #  cmp_eax_ebx
0F94C0 #    sete_al
0FB6C0 #    movzx_eax,al
:_int2str_and_end2 #:_int2str_and_end2
85C0           #    test_eax,eax          # &&
0F84 %_int2str_and_end3 #   je %_int2str_and_end3
58 #    pop_eax
50               #  push_eax              # 0
B8 00000000 #   mov_eax, %0
50               #  push_eax              # x (local)
8D85 0C000000 # lea_eax,[ebp+DWORD] %12
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # 2147483648
B8 00000080 #   mov_eax, %2147483648
5B                # pop_ebx               # &
21D8 #  and_eax,ebx
5B                # pop_ebx               # !=
39C3 #  cmp_eax_ebx
0F95C0 #    setne_al
0FB6C0 #    movzx_eax,al
:_int2str_and_end3 #:_int2str_and_end3
85C0           #    test_eax,eax          # if
58 #    pop_eax
0F84 %_int2str_else4 #  je %_int2str_else4
 ## bootstrappable.c 177
 ## bootstrappable.c 179
50               #  push_eax              # i (local)
8D85 14000000 # lea_eax,[ebp+DWORD] %20
50               #  push_eax              # 0
B8 00000000 #   mov_eax, %0
50               #  push_eax              # x (local)
8D85 0C000000 # lea_eax,[ebp+DWORD] %12
8B00          # mov_eax,[eax]         # ?
5B                # pop_ebx               # -
29C3 #  sub_ebx,eax
89D8 #  mov_eax,ebx
50               #  push_eax              # 2147483647
B8 FFFFFF7F #   mov_eax, %2147483647
5B                # pop_ebx               # &
21D8 #  and_eax,ebx
5B                # pop_ebx               # =
8903 #  mov_[ebx],eax
58                # pop_eax               # ;
 ## bootstrappable.c 180
50               #  push_eax              # 0
B8 00000000 #   mov_eax, %0
50               #  push_eax              # i (local)
8D85 14000000 # lea_eax,[ebp+DWORD] %20
8B00          # mov_eax,[eax]         # ?
5B                # pop_ebx               # ==
39C3 #  cmp_eax_ebx
0F94C0 #    sete_al
0FB6C0 #    movzx_eax,al
85C0           #    test_eax,eax          # if
58 #    pop_eax
0F84 %_int2str_else5 #  je %_int2str_else5
 ## bootstrappable.c 180
50               #  push_eax              # '-2147483648'
B8 &string_20 # mov_eax, &string_20
8B5D00          #   mov_ebx,[ebp]         # return
53 #    push_ebx
C3 #    ret
 ## bootstrappable.c 181
:_int2str_else5  #:_int2str_else5 # no else
50               #  push_eax              # sign_p (local)
8D85 18000000 # lea_eax,[ebp+DWORD] %24
50               #  push_eax              # 1
B8 01000000 #   mov_eax, %1
5B                # pop_ebx               # =
8903 #  mov_[ebx],eax
58                # pop_eax               # ;
E9 %_int2str_else_end4 #    jmp %_int2str_else_end4
:_int2str_else4 #:_int2str_else4
 ## bootstrappable.c 183
50               #  push_eax              # i (local)
8D85 14000000 # lea_eax,[ebp+DWORD] %20
50               #  push_eax              # x (local)
8D85 0C000000 # lea_eax,[ebp+DWORD] %12
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # 2147483647
B8 FFFFFF7F #   mov_eax, %2147483647
50               #  push_eax              # 2147483648
B8 00000080 #   mov_eax, %2147483648
5B                # pop_ebx               # +
01D8 #  add_eax,ebx
5B                # pop_ebx               # &
21D8 #  and_eax,ebx
5B                # pop_ebx               # =
8903 #  mov_[ebx],eax
58                # pop_eax               # ;
:_int2str_else_end4 #:_int2str_else_end4
 ## bootstrappable.c 185
:_int2str_loop6 #:_int2str_loop6
 ## bootstrappable.c 186
 ## bootstrappable.c 187
50               #  push_eax              # p (local)
8D85 10000000 # lea_eax,[ebp+DWORD] %16
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # 0
B8 00000000 #   mov_eax, %0
5B                # pop_ebx               # +
01D8 #  add_eax,ebx
50               #  push_eax              # table (local)
8D85 1C000000 # lea_eax,[ebp+DWORD] %28
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # i (local)
8D85 14000000 # lea_eax,[ebp+DWORD] %20
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # base (local)
8D85 08000000 # lea_eax,[ebp+DWORD] %8
8B00          # mov_eax,[eax]         # ?
89C3            #   mov_ebx,eax           # %s
58 #    pop_eax
99 #    cdq
F7FB #  idiv_ebx
89D0 5B                #    mov_eax,edx pop_ebx               # +
01D8 #  add_eax,ebx
8A00           #    mov_al,[eax]          # ?1
0FB6C0 #    movzx_eax,al
0FBEC0           #  movsx_eax,al          # char
5B                # pop_ebx               # =1
8803 #  mov_[ebx],al
58                # pop_eax               # ;
 ## bootstrappable.c 188
50               #  push_eax              # p (local)
8D85 10000000 # lea_eax,[ebp+DWORD] %16
50               #  push_eax              # p (local)
8D85 10000000 # lea_eax,[ebp+DWORD] %16
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # 1
B8 01000000 #   mov_eax, %1
5B                # pop_ebx               # -
29C3 #  sub_ebx,eax
89D8 #  mov_eax,ebx
5B                # pop_ebx               # =
8903 #  mov_[ebx],eax
58                # pop_eax               # ;
 ## bootstrappable.c 189
50               #  push_eax              # i (local)
8D85 14000000 # lea_eax,[ebp+DWORD] %20
50               #  push_eax              # i (local)
8D85 14000000 # lea_eax,[ebp+DWORD] %20
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # base (local)
8D85 08000000 # lea_eax,[ebp+DWORD] %8
8B00          # mov_eax,[eax]         # ?
89C3            #   mov_ebx,eax           # /s
58 #    pop_eax
99 #    cdq
F7FB #  idiv_ebx
5B                # pop_ebx               # =
8903 #  mov_[ebx],eax
58                # pop_eax               # ;
50               #  push_eax              # 0
B8 00000000 #   mov_eax, %0
50               #  push_eax              # i (local)
8D85 14000000 # lea_eax,[ebp+DWORD] %20
8B00          # mov_eax,[eax]         # ?
5B                # pop_ebx               # <
39C3 #  cmp_eax_ebx
0F92C0 #    setb_al
0FB6C0 #    movzx_eax,al
85C0           #    test_eax,eax          # !
0F94C0 #    sete_al
0FB6C0 #    movzx_eax,al
85C0           #    test_eax,eax          # if
58 #    pop_eax
0F84 %_int2str_else7 #  je %_int2str_else7
E9 %_int2str_loop_end6 #    jmp %_int2str_loop_end6
:_int2str_else7  #:_int2str_else7 # no else
E9 %_int2str_loop6 #    jmp %_int2str_loop6
:_int2str_loop_end6 #:_int2str_loop_end6
 ## bootstrappable.c 192
50               #  push_eax              # sign_p (local)
8D85 18000000 # lea_eax,[ebp+DWORD] %24
8B00          # mov_eax,[eax]         # ?
85C0           #    test_eax,eax          # if
58 #    pop_eax
0F84 %_int2str_else8 #  je %_int2str_else8
 ## bootstrappable.c 193
 ## bootstrappable.c 194
50               #  push_eax              # p (local)
8D85 10000000 # lea_eax,[ebp+DWORD] %16
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # 0
B8 00000000 #   mov_eax, %0
5B                # pop_ebx               # +
01D8 #  add_eax,ebx
50               #  push_eax              # 45
B8 2D000000 #   mov_eax, %45
5B                # pop_ebx               # =1
8803 #  mov_[ebx],al
58                # pop_eax               # ;
 ## bootstrappable.c 195
50               #  push_eax              # p (local)
8D85 10000000 # lea_eax,[ebp+DWORD] %16
50               #  push_eax              # p (local)
8D85 10000000 # lea_eax,[ebp+DWORD] %16
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # 1
B8 01000000 #   mov_eax, %1
5B                # pop_ebx               # -
29C3 #  sub_ebx,eax
89D8 #  mov_eax,ebx
5B                # pop_ebx               # =
8903 #  mov_[ebx],eax
58                # pop_eax               # ;
 ## bootstrappable.c 198
:_int2str_else8  #:_int2str_else8 # no else
50               #  push_eax              # p (local)
8D85 10000000 # lea_eax,[ebp+DWORD] %16
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # 1
B8 01000000 #   mov_eax, %1
5B                # pop_ebx               # +
01D8 #  add_eax,ebx
8B5D00          #   mov_ebx,[ebp]         # return
53 #    push_ebx
C3 #    ret
50               #  push_eax              # 0
B8 00000000 #   mov_eax, %0
8B5D00          #   mov_ebx,[ebp]         # return
53 #    push_ebx
C3 #    ret
 #
:f_consume_token #:f_consume_token
58 #    pop_eax
894500 #    mov_[ebp],eax
58 #    pop_eax
50               #  push_eax              # s (local)
8D85 04000000 # lea_eax,[ebp+DWORD] %4
5B                # pop_ebx               # =:
8918 #  mov_[eax],ebx
58 #    pop_eax
50               #  push_eax              # source_file (local)
8D85 08000000 # lea_eax,[ebp+DWORD] %8
5B                # pop_ebx               # =:
8918 #  mov_[eax],ebx
58 #    pop_eax
50               #  push_eax              # i (local)
8D85 0C000000 # lea_eax,[ebp+DWORD] %12
50               #  push_eax              # 0
B8 00000000 #   mov_eax, %0
5B                # pop_ebx               # =
8903 #  mov_[ebx],eax
58                # pop_eax               # ;
50               #  push_eax              # c (local)
8D85 10000000 # lea_eax,[ebp+DWORD] %16
50               #  push_eax              # source_file (local)
8D85 08000000 # lea_eax,[ebp+DWORD] %8
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # fgetc (function)
B8 &f_fgetc #   mov_eax, &f_fgetc
81C5 14000000          #    add_ebp, %20         # ()
FFD0 #  call_eax
81ED 14000000 # sub_ebp, %20
5B                # pop_ebx               # =
8903 #  mov_[ebx],eax
58                # pop_eax               # ;
 ## blood-elf.c 75
50               #  push_eax              # 4294967295
B8 FFFFFFFF #   mov_eax, %4294967295
50               #  push_eax              # c (local)
8D85 10000000 # lea_eax,[ebp+DWORD] %16
8B00          # mov_eax,[eax]         # ?
5B                # pop_ebx               # !=
39C3 #  cmp_eax_ebx
0F95C0 #    setne_al
0FB6C0 #    movzx_eax,al
50               #  push_eax              # 'Can not have an EOF token\n'
B8 &string_21 # mov_eax, &string_21
50               #  push_eax              # require (function)
B8 &f_require # mov_eax, &f_require
81C5 14000000          #    add_ebp, %20         # ()
FFD0 #  call_eax
81ED 14000000 # sub_ebp, %20
58                # pop_eax               # ;
 ## blood-elf.c 76
:_consume_token_loop1 #:_consume_token_loop1
 ## blood-elf.c 77
 ## blood-elf.c 78
50               #  push_eax              # s (local)
8D85 04000000 # lea_eax,[ebp+DWORD] %4
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # i (local)
8D85 0C000000 # lea_eax,[ebp+DWORD] %12
8B00          # mov_eax,[eax]         # ?
5B                # pop_ebx               # +
01D8 #  add_eax,ebx
50               #  push_eax              # c (local)
8D85 10000000 # lea_eax,[ebp+DWORD] %16
8B00          # mov_eax,[eax]         # ?
5B                # pop_ebx               # =1
8803 #  mov_[ebx],al
58                # pop_eax               # ;
 ## blood-elf.c 79
50               #  push_eax              # i (local)
8D85 0C000000 # lea_eax,[ebp+DWORD] %12
50               #  push_eax              # i (local)
8D85 0C000000 # lea_eax,[ebp+DWORD] %12
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # 1
B8 01000000 #   mov_eax, %1
5B                # pop_ebx               # +
01D8 #  add_eax,ebx
5B                # pop_ebx               # =
8903 #  mov_[ebx],eax
58                # pop_eax               # ;
 ## blood-elf.c 80
50               #  push_eax              # max_string (global)
B8 &g_max_string #  mov_eax, &g_max_string
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # i (local)
8D85 0C000000 # lea_eax,[ebp+DWORD] %12
8B00          # mov_eax,[eax]         # ?
5B                # pop_ebx               # >s
39C3 #  cmp_eax_ebx
0F9FC0 #    setg_al
0FB6C0 #    movzx_eax,al
50               #  push_eax              # 'Token exceeds token length restriction\n'
B8 &string_22 # mov_eax, &string_22
50               #  push_eax              # require (function)
B8 &f_require # mov_eax, &f_require
81C5 14000000          #    add_ebp, %20         # ()
FFD0 #  call_eax
81ED 14000000 # sub_ebp, %20
58                # pop_eax               # ;
 ## blood-elf.c 81
50               #  push_eax              # c (local)
8D85 10000000 # lea_eax,[ebp+DWORD] %16
50               #  push_eax              # source_file (local)
8D85 08000000 # lea_eax,[ebp+DWORD] %8
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # fgetc (function)
B8 &f_fgetc #   mov_eax, &f_fgetc
81C5 14000000          #    add_ebp, %20         # ()
FFD0 #  call_eax
81ED 14000000 # sub_ebp, %20
5B                # pop_ebx               # =
8903 #  mov_[ebx],eax
58                # pop_eax               # ;
 ## blood-elf.c 82
50               #  push_eax              # 4294967295
B8 FFFFFFFF #   mov_eax, %4294967295
50               #  push_eax              # c (local)
8D85 10000000 # lea_eax,[ebp+DWORD] %16
8B00          # mov_eax,[eax]         # ?
5B                # pop_ebx               # ==
39C3 #  cmp_eax_ebx
0F94C0 #    sete_al
0FB6C0 #    movzx_eax,al
85C0           #    test_eax,eax          # if
58 #    pop_eax
0F84 %_consume_token_else2 #    je %_consume_token_else2
 ## blood-elf.c 82
E9 %_consume_token_loop_end1 #  jmp %_consume_token_loop_end1
:_consume_token_else2  #:_consume_token_else2 # no else
50               #  push_eax              # c (local)
8D85 10000000 # lea_eax,[ebp+DWORD] %16
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # ' \t\n>'
B8 &string_23 # mov_eax, &string_23
50               #  push_eax              # in_set (function)
B8 &f_in_set #  mov_eax, &f_in_set
81C5 14000000          #    add_ebp, %20         # ()
FFD0 #  call_eax
81ED 14000000 # sub_ebp, %20
85C0           #    test_eax,eax          # !
0F94C0 #    sete_al
0FB6C0 #    movzx_eax,al
85C0           #    test_eax,eax          # !
0F94C0 #    sete_al
0FB6C0 #    movzx_eax,al
85C0           #    test_eax,eax          # if
58 #    pop_eax
0F84 %_consume_token_else3 #    je %_consume_token_else3
E9 %_consume_token_loop_end1 #  jmp %_consume_token_loop_end1
:_consume_token_else3  #:_consume_token_else3 # no else
E9 %_consume_token_loop1 #  jmp %_consume_token_loop1
:_consume_token_loop_end1 #:_consume_token_loop_end1
50               #  push_eax              # 0
B8 00000000 #   mov_eax, %0
8B5D00          #   mov_ebx,[ebp]         # return
53 #    push_ebx
C3 #    ret
 #
:f_storeLabel #:f_storeLabel
58 #    pop_eax
894500 #    mov_[ebp],eax
58 #    pop_eax
50               #  push_eax              # source_file (local)
8D85 04000000 # lea_eax,[ebp+DWORD] %4
5B                # pop_ebx               # =:
8918 #  mov_[eax],ebx
58 #    pop_eax
50               #  push_eax              # entry (local)
8D85 08000000 # lea_eax,[ebp+DWORD] %8
50               #  push_eax              # 1
B8 01000000 #   mov_eax, %1
50               #  push_eax              # 8
B8 08000000 #   mov_eax, %8
50               #  push_eax              # calloc (function)
B8 &f_calloc #  mov_eax, &f_calloc
81C5 0C000000          #    add_ebp, %12         # ()
FFD0 #  call_eax
81ED 0C000000 # sub_ebp, %12
5B                # pop_ebx               # =
8903 #  mov_[ebx],eax
58                # pop_eax               # ;
 ## blood-elf.c 91
50               #  push_eax              # entry (local)
8D85 08000000 # lea_eax,[ebp+DWORD] %8
8B00          # mov_eax,[eax]         # ->
81C0 00000000 # add_eax, %0
50               #  push_eax              # jump_table (global)
B8 &g_jump_table #  mov_eax, &g_jump_table
8B00          # mov_eax,[eax]         # ?
5B                # pop_ebx               # =
8903 #  mov_[ebx],eax
58                # pop_eax               # ;
 ## blood-elf.c 92
50               #  push_eax              # jump_table (global)
B8 &g_jump_table #  mov_eax, &g_jump_table
50               #  push_eax              # entry (local)
8D85 08000000 # lea_eax,[ebp+DWORD] %8
8B00          # mov_eax,[eax]         # ?
5B                # pop_ebx               # =
8903 #  mov_[ebx],eax
58                # pop_eax               # ;
 ## blood-elf.c 95
50               #  push_eax              # entry (local)
8D85 08000000 # lea_eax,[ebp+DWORD] %8
8B00          # mov_eax,[eax]         # ->
81C0 04000000 # add_eax, %4
50               #  push_eax              # max_string (global)
B8 &g_max_string #  mov_eax, &g_max_string
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # 1
B8 01000000 #   mov_eax, %1
5B                # pop_ebx               # +
01D8 #  add_eax,ebx
50               #  push_eax              # 1
B8 01000000 #   mov_eax, %1
50               #  push_eax              # calloc (function)
B8 &f_calloc #  mov_eax, &f_calloc
81C5 0C000000          #    add_ebp, %12         # ()
FFD0 #  call_eax
81ED 0C000000 # sub_ebp, %12
5B                # pop_ebx               # =
8903 #  mov_[ebx],eax
58                # pop_eax               # ;
 ## blood-elf.c 96
50               #  push_eax              # source_file (local)
8D85 04000000 # lea_eax,[ebp+DWORD] %4
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # entry (local)
8D85 08000000 # lea_eax,[ebp+DWORD] %8
8B00          # mov_eax,[eax]         # ->
81C0 04000000 # add_eax, %4
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # consume_token (function)
B8 &f_consume_token #   mov_eax, &f_consume_token
81C5 0C000000          #    add_ebp, %12         # ()
FFD0 #  call_eax
81ED 0C000000 # sub_ebp, %12
58                # pop_eax               # ;
 ## blood-elf.c 98
50               #  push_eax              # count (global)
B8 &g_count #   mov_eax, &g_count
50               #  push_eax              # count (global)
B8 &g_count #   mov_eax, &g_count
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # 1
B8 01000000 #   mov_eax, %1
5B                # pop_ebx               # +
01D8 #  add_eax,ebx
5B                # pop_ebx               # =
8903 #  mov_[ebx],eax
58                # pop_eax               # ;
50               #  push_eax              # 0
B8 00000000 #   mov_eax, %0
8B5D00          #   mov_ebx,[ebp]         # return
53 #    push_ebx
C3 #    ret
 #
:f_line_Comment #:f_line_Comment
58 #    pop_eax
894500 #    mov_[ebp],eax
58 #    pop_eax
50               #  push_eax              # source_file (local)
8D85 04000000 # lea_eax,[ebp+DWORD] %4
5B                # pop_ebx               # =:
8918 #  mov_[eax],ebx
58 #    pop_eax
50               #  push_eax              # c (local)
8D85 08000000 # lea_eax,[ebp+DWORD] %8
50               #  push_eax              # source_file (local)
8D85 04000000 # lea_eax,[ebp+DWORD] %4
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # fgetc (function)
B8 &f_fgetc #   mov_eax, &f_fgetc
81C5 0C000000          #    add_ebp, %12         # ()
FFD0 #  call_eax
81ED 0C000000 # sub_ebp, %12
5B                # pop_ebx               # =
8903 #  mov_[ebx],eax
58                # pop_eax               # ;
 ## blood-elf.c 104
:_line_Comment_loop1 #:_line_Comment_loop1
50               #  push_eax              # c (local)
8D85 08000000 # lea_eax,[ebp+DWORD] %8
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # '\n?'
B8 &string_24 # mov_eax, &string_24
50               #  push_eax              # in_set (function)
B8 &f_in_set #  mov_eax, &f_in_set
81C5 0C000000          #    add_ebp, %12         # ()
FFD0 #  call_eax
81ED 0C000000 # sub_ebp, %12
85C0           #    test_eax,eax          # !
0F94C0 #    sete_al
0FB6C0 #    movzx_eax,al
85C0           #    test_eax,eax          # !
0F94C0 #    sete_al
0FB6C0 #    movzx_eax,al
85C0           #    test_eax,eax          # if
58 #    pop_eax
0F84 %_line_Comment_else2 # je %_line_Comment_else2
E9 %_line_Comment_loop_end1 #   jmp %_line_Comment_loop_end1
 ## blood-elf.c 105
 ## blood-elf.c 106
:_line_Comment_else2  #:_line_Comment_else2 # no else
50               #  push_eax              # 4294967295
B8 FFFFFFFF #   mov_eax, %4294967295
50               #  push_eax              # c (local)
8D85 08000000 # lea_eax,[ebp+DWORD] %8
8B00          # mov_eax,[eax]         # ?
5B                # pop_ebx               # ==
39C3 #  cmp_eax_ebx
0F94C0 #    sete_al
0FB6C0 #    movzx_eax,al
85C0           #    test_eax,eax          # if
58 #    pop_eax
0F84 %_line_Comment_else3 # je %_line_Comment_else3
 ## blood-elf.c 106
E9 %_line_Comment_loop_end1 #   jmp %_line_Comment_loop_end1
 ## blood-elf.c 107
:_line_Comment_else3  #:_line_Comment_else3 # no else
50               #  push_eax              # c (local)
8D85 08000000 # lea_eax,[ebp+DWORD] %8
50               #  push_eax              # source_file (local)
8D85 04000000 # lea_eax,[ebp+DWORD] %4
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # fgetc (function)
B8 &f_fgetc #   mov_eax, &f_fgetc
81C5 0C000000          #    add_ebp, %12         # ()
FFD0 #  call_eax
81ED 0C000000 # sub_ebp, %12
5B                # pop_ebx               # =
8903 #  mov_[ebx],eax
58                # pop_eax               # ;
E9 %_line_Comment_loop1 #   jmp %_line_Comment_loop1
:_line_Comment_loop_end1 #:_line_Comment_loop_end1
50               #  push_eax              # 0
B8 00000000 #   mov_eax, %0
8B5D00          #   mov_ebx,[ebp]         # return
53 #    push_ebx
C3 #    ret
 #
:f_purge_string #:f_purge_string
58 #    pop_eax
894500 #    mov_[ebp],eax
58 #    pop_eax
50               #  push_eax              # source_file (local)
8D85 04000000 # lea_eax,[ebp+DWORD] %4
5B                # pop_ebx               # =:
8918 #  mov_[eax],ebx
58 #    pop_eax
50               #  push_eax              # c (local)
8D85 08000000 # lea_eax,[ebp+DWORD] %8
50               #  push_eax              # source_file (local)
8D85 04000000 # lea_eax,[ebp+DWORD] %4
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # fgetc (function)
B8 &f_fgetc #   mov_eax, &f_fgetc
81C5 0C000000          #    add_ebp, %12         # ()
FFD0 #  call_eax
81ED 0C000000 # sub_ebp, %12
5B                # pop_ebx               # =
8903 #  mov_[ebx],eax
58                # pop_eax               # ;
 ## blood-elf.c 114
:_purge_string_loop1 #:_purge_string_loop1
50               #  push_eax              # 4294967295
B8 FFFFFFFF #   mov_eax, %4294967295
50               #  push_eax              # c (local)
8D85 08000000 # lea_eax,[ebp+DWORD] %8
8B00          # mov_eax,[eax]         # ?
5B                # pop_ebx               # !=
39C3 #  cmp_eax_ebx
0F95C0 #    setne_al
0FB6C0 #    movzx_eax,al
85C0           #    test_eax,eax          # &&
0F84 %_purge_string_and_end2 #  je %_purge_string_and_end2
58 #    pop_eax
50               #  push_eax              # 34
B8 22000000 #   mov_eax, %34
50               #  push_eax              # c (local)
8D85 08000000 # lea_eax,[ebp+DWORD] %8
8B00          # mov_eax,[eax]         # ?
5B                # pop_ebx               # !=
39C3 #  cmp_eax_ebx
0F95C0 #    setne_al
0FB6C0 #    movzx_eax,al
:_purge_string_and_end2 #:_purge_string_and_end2
85C0           #    test_eax,eax          # !
0F94C0 #    sete_al
0FB6C0 #    movzx_eax,al
85C0           #    test_eax,eax          # if
58 #    pop_eax
0F84 %_purge_string_else3 # je %_purge_string_else3
E9 %_purge_string_loop_end1 #   jmp %_purge_string_loop_end1
 ## blood-elf.c 115
 ## blood-elf.c 116
:_purge_string_else3  #:_purge_string_else3 # no else
50               #  push_eax              # c (local)
8D85 08000000 # lea_eax,[ebp+DWORD] %8
50               #  push_eax              # source_file (local)
8D85 04000000 # lea_eax,[ebp+DWORD] %4
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # fgetc (function)
B8 &f_fgetc #   mov_eax, &f_fgetc
81C5 0C000000          #    add_ebp, %12         # ()
FFD0 #  call_eax
81ED 0C000000 # sub_ebp, %12
5B                # pop_ebx               # =
8903 #  mov_[ebx],eax
58                # pop_eax               # ;
E9 %_purge_string_loop1 #   jmp %_purge_string_loop1
:_purge_string_loop_end1 #:_purge_string_loop_end1
50               #  push_eax              # 0
B8 00000000 #   mov_eax, %0
8B5D00          #   mov_ebx,[ebp]         # return
53 #    push_ebx
C3 #    ret
 #
:f_first_pass #:f_first_pass
58 #    pop_eax
894500 #    mov_[ebp],eax
58 #    pop_eax
50               #  push_eax              # input (local)
8D85 04000000 # lea_eax,[ebp+DWORD] %4
5B                # pop_ebx               # =:
8918 #  mov_[eax],ebx
58 #    pop_eax
 ## blood-elf.c 122
50               #  push_eax              # 0
B8 00000000 #   mov_eax, %0
50               #  push_eax              # input (local)
8D85 04000000 # lea_eax,[ebp+DWORD] %4
8B00          # mov_eax,[eax]         # ?
5B                # pop_ebx               # ==
39C3 #  cmp_eax_ebx
0F94C0 #    sete_al
0FB6C0 #    movzx_eax,al
85C0           #    test_eax,eax          # if
58 #    pop_eax
0F84 %_first_pass_else1 #   je %_first_pass_else1
 ## blood-elf.c 122
50               #  push_eax              # 0
B8 00000000 #   mov_eax, %0
8B5D00          #   mov_ebx,[ebp]         # return
53 #    push_ebx
C3 #    ret
 ## blood-elf.c 123
:_first_pass_else1  #:_first_pass_else1 # no else
50               #  push_eax              # input (local)
8D85 04000000 # lea_eax,[ebp+DWORD] %4
8B00          # mov_eax,[eax]         # ->
81C0 00000000 # add_eax, %0
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # first_pass (function)
B8 &f_first_pass #  mov_eax, &f_first_pass
81C5 08000000          #    add_ebp, %8         # ()
FFD0 #  call_eax
81ED 08000000 # sub_ebp, %8
58                # pop_eax               # ;
50               #  push_eax              # source_file (local)
8D85 08000000 # lea_eax,[ebp+DWORD] %8
50               #  push_eax              # input (local)
8D85 04000000 # lea_eax,[ebp+DWORD] %4
8B00          # mov_eax,[eax]         # ->
81C0 04000000 # add_eax, %4
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # 'r'
B8 &string_25 # mov_eax, &string_25
50               #  push_eax              # fopen (function)
B8 &f_fopen #   mov_eax, &f_fopen
81C5 0C000000          #    add_ebp, %12         # ()
FFD0 #  call_eax
81ED 0C000000 # sub_ebp, %12
5B                # pop_ebx               # =
8903 #  mov_[ebx],eax
58                # pop_eax               # ;
 ## blood-elf.c 127
50               #  push_eax              # 0
B8 00000000 #   mov_eax, %0
50               #  push_eax              # source_file (local)
8D85 08000000 # lea_eax,[ebp+DWORD] %8
8B00          # mov_eax,[eax]         # ?
5B                # pop_ebx               # ==
39C3 #  cmp_eax_ebx
0F94C0 #    sete_al
0FB6C0 #    movzx_eax,al
85C0           #    test_eax,eax          # if
58 #    pop_eax
0F84 %_first_pass_else2 #   je %_first_pass_else2
 ## blood-elf.c 128
 ## blood-elf.c 129
50               #  push_eax              # 'The file: '
B8 &string_26 # mov_eax, &string_26
50               #  push_eax              # stderr (global)
B8 &g_stderr #  mov_eax, &g_stderr
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # fputs (function)
B8 &f_fputs #   mov_eax, &f_fputs
81C5 0C000000          #    add_ebp, %12         # ()
FFD0 #  call_eax
81ED 0C000000 # sub_ebp, %12
58                # pop_eax               # ;
 ## blood-elf.c 130
50               #  push_eax              # input (local)
8D85 04000000 # lea_eax,[ebp+DWORD] %4
8B00          # mov_eax,[eax]         # ->
81C0 04000000 # add_eax, %4
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # stderr (global)
B8 &g_stderr #  mov_eax, &g_stderr
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # fputs (function)
B8 &f_fputs #   mov_eax, &f_fputs
81C5 0C000000          #    add_ebp, %12         # ()
FFD0 #  call_eax
81ED 0C000000 # sub_ebp, %12
58                # pop_eax               # ;
 ## blood-elf.c 131
50               #  push_eax              # ' can not be opened!\n'
B8 &string_27 # mov_eax, &string_27
50               #  push_eax              # stderr (global)
B8 &g_stderr #  mov_eax, &g_stderr
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # fputs (function)
B8 &f_fputs #   mov_eax, &f_fputs
81C5 0C000000          #    add_ebp, %12         # ()
FFD0 #  call_eax
81ED 0C000000 # sub_ebp, %12
58                # pop_eax               # ;
 ## blood-elf.c 132
50               #  push_eax              # 4294967295
B8 FFFFFFFF #   mov_eax, %4294967295
50               #  push_eax              # exit (function)
B8 &f_exit #    mov_eax, &f_exit
81C5 0C000000          #    add_ebp, %12         # ()
FFD0 #  call_eax
81ED 0C000000 # sub_ebp, %12
58                # pop_eax               # ;
:_first_pass_else2  #:_first_pass_else2 # no else
 ## blood-elf.c 136
50               #  push_eax              # c (local)
8D85 0C000000 # lea_eax,[ebp+DWORD] %12
50               #  push_eax              # source_file (local)
8D85 08000000 # lea_eax,[ebp+DWORD] %8
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # fgetc (function)
B8 &f_fgetc #   mov_eax, &f_fgetc
81C5 10000000          #    add_ebp, %16         # ()
FFD0 #  call_eax
81ED 10000000 # sub_ebp, %16
5B                # pop_ebx               # =
8903 #  mov_[ebx],eax
58                # pop_eax               # ;
:_first_pass_loop3 #:_first_pass_loop3
50               #  push_eax              # 4294967295
B8 FFFFFFFF #   mov_eax, %4294967295
50               #  push_eax              # c (local)
8D85 0C000000 # lea_eax,[ebp+DWORD] %12
8B00          # mov_eax,[eax]         # ?
5B                # pop_ebx               # !=
39C3 #  cmp_eax_ebx
0F95C0 #    setne_al
0FB6C0 #    movzx_eax,al
85C0           #    test_eax,eax          # !
0F94C0 #    sete_al
0FB6C0 #    movzx_eax,al
85C0           #    test_eax,eax          # if
58 #    pop_eax
0F84 %_first_pass_else4 #   je %_first_pass_else4
E9 %_first_pass_loop_end3 # jmp %_first_pass_loop_end3
 ## blood-elf.c 137
 ## blood-elf.c 139
:_first_pass_else4  #:_first_pass_else4 # no else
50               #  push_eax              # 58
B8 3A000000 #   mov_eax, %58
50               #  push_eax              # c (local)
8D85 0C000000 # lea_eax,[ebp+DWORD] %12
8B00          # mov_eax,[eax]         # ?
5B                # pop_ebx               # ==
39C3 #  cmp_eax_ebx
0F94C0 #    sete_al
0FB6C0 #    movzx_eax,al
85C0           #    test_eax,eax          # if
58 #    pop_eax
0F84 %_first_pass_else5 #   je %_first_pass_else5
 ## blood-elf.c 140
 ## blood-elf.c 141
50               #  push_eax              # source_file (local)
8D85 08000000 # lea_eax,[ebp+DWORD] %8
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # storeLabel (function)
B8 &f_storeLabel #  mov_eax, &f_storeLabel
81C5 10000000          #    add_ebp, %16         # ()
FFD0 #  call_eax
81ED 10000000 # sub_ebp, %16
58                # pop_eax               # ;
E9 %_first_pass_else_end5 # jmp %_first_pass_else_end5
:_first_pass_else5 #:_first_pass_else5
 ## blood-elf.c 144
50               #  push_eax              # c (local)
8D85 0C000000 # lea_eax,[ebp+DWORD] %12
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # 35
B8 23000000 #   mov_eax, %35
5B                # pop_ebx               # ==
39C3 #  cmp_eax_ebx
0F94C0 #    sete_al
0FB6C0 #    movzx_eax,al
85C0           #    test_eax,eax          # ||
0F85 %_first_pass_or_end6 # jne %_first_pass_or_end6
58 #    pop_eax
50               #  push_eax              # c (local)
8D85 0C000000 # lea_eax,[ebp+DWORD] %12
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # 59
B8 3B000000 #   mov_eax, %59
5B                # pop_ebx               # ==
39C3 #  cmp_eax_ebx
0F94C0 #    sete_al
0FB6C0 #    movzx_eax,al
:_first_pass_or_end6 #:_first_pass_or_end6
85C0           #    test_eax,eax          # if
58 #    pop_eax
0F84 %_first_pass_else7 #   je %_first_pass_else7
 ## blood-elf.c 145
 ## blood-elf.c 146
50               #  push_eax              # source_file (local)
8D85 08000000 # lea_eax,[ebp+DWORD] %8
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # line_Comment (function)
B8 &f_line_Comment #    mov_eax, &f_line_Comment
81C5 10000000          #    add_ebp, %16         # ()
FFD0 #  call_eax
81ED 10000000 # sub_ebp, %16
58                # pop_eax               # ;
E9 %_first_pass_else_end7 # jmp %_first_pass_else_end7
:_first_pass_else7 #:_first_pass_else7
 ## blood-elf.c 148
50               #  push_eax              # 34
B8 22000000 #   mov_eax, %34
50               #  push_eax              # c (local)
8D85 0C000000 # lea_eax,[ebp+DWORD] %12
8B00          # mov_eax,[eax]         # ?
5B                # pop_ebx               # ==
39C3 #  cmp_eax_ebx
0F94C0 #    sete_al
0FB6C0 #    movzx_eax,al
85C0           #    test_eax,eax          # if
58 #    pop_eax
0F84 %_first_pass_else8 #   je %_first_pass_else8
 ## blood-elf.c 149
 ## blood-elf.c 150
50               #  push_eax              # source_file (local)
8D85 08000000 # lea_eax,[ebp+DWORD] %8
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # purge_string (function)
B8 &f_purge_string #    mov_eax, &f_purge_string
81C5 10000000          #    add_ebp, %16         # ()
FFD0 #  call_eax
81ED 10000000 # sub_ebp, %16
58                # pop_eax               # ;
:_first_pass_else8  #:_first_pass_else8 # no else
:_first_pass_else_end7 #:_first_pass_else_end7
:_first_pass_else_end5 #:_first_pass_else_end5
50               #  push_eax              # c (local)
8D85 0C000000 # lea_eax,[ebp+DWORD] %12
50               #  push_eax              # source_file (local)
8D85 08000000 # lea_eax,[ebp+DWORD] %8
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # fgetc (function)
B8 &f_fgetc #   mov_eax, &f_fgetc
81C5 10000000          #    add_ebp, %16         # ()
FFD0 #  call_eax
81ED 10000000 # sub_ebp, %16
5B                # pop_ebx               # =
8903 #  mov_[ebx],eax
58                # pop_eax               # ;
E9 %_first_pass_loop3 # jmp %_first_pass_loop3
:_first_pass_loop_end3 #:_first_pass_loop_end3
 ## blood-elf.c 153
50               #  push_eax              # source_file (local)
8D85 08000000 # lea_eax,[ebp+DWORD] %8
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # fclose (function)
B8 &f_fclose #  mov_eax, &f_fclose
81C5 10000000          #    add_ebp, %16         # ()
FFD0 #  call_eax
81ED 10000000 # sub_ebp, %16
58                # pop_eax               # ;
50               #  push_eax              # 0
B8 00000000 #   mov_eax, %0
8B5D00          #   mov_ebx,[ebp]         # return
53 #    push_ebx
C3 #    ret
 #
:f_output_string_table #:f_output_string_table
58 #    pop_eax
894500 #    mov_[ebp],eax
58 #    pop_eax
50               #  push_eax              # node (local)
8D85 04000000 # lea_eax,[ebp+DWORD] %4
5B                # pop_ebx               # =:
8918 #  mov_[eax],ebx
58 #    pop_eax
 ## blood-elf.c 158
50               #  push_eax              # '\n# Generated string table\n:ELF_str\n'
B8 &string_28 # mov_eax, &string_28
50               #  push_eax              # output (global)
B8 &g_output #  mov_eax, &g_output
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # fputs (function)
B8 &f_fputs #   mov_eax, &f_fputs
81C5 08000000          #    add_ebp, %8         # ()
FFD0 #  call_eax
81ED 08000000 # sub_ebp, %8
58                # pop_eax               # ;
 ## blood-elf.c 159
50               #  push_eax              # zero_8 (global)
B8 &g_zero_8 #  mov_eax, &g_zero_8
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # output (global)
B8 &g_output #  mov_eax, &g_output
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # fputs (function)
B8 &f_fputs #   mov_eax, &f_fputs
81C5 08000000          #    add_ebp, %8         # ()
FFD0 #  call_eax
81ED 08000000 # sub_ebp, %8
58                # pop_eax               # ;
 ## blood-elf.c 160
50               #  push_eax              # '\t# NULL string\n'
B8 &string_29 # mov_eax, &string_29
50               #  push_eax              # output (global)
B8 &g_output #  mov_eax, &g_output
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # fputs (function)
B8 &f_fputs #   mov_eax, &f_fputs
81C5 08000000          #    add_ebp, %8         # ()
FFD0 #  call_eax
81ED 08000000 # sub_ebp, %8
58                # pop_eax               # ;
 ## blood-elf.c 162
50               #  push_eax              # i (local)
8D85 08000000 # lea_eax,[ebp+DWORD] %8
50               #  push_eax              # node (local)
8D85 04000000 # lea_eax,[ebp+DWORD] %4
8B00          # mov_eax,[eax]         # ?
5B                # pop_ebx               # =
8903 #  mov_[ebx],eax
58                # pop_eax               # ;
:_output_string_table_loop1 #:_output_string_table_loop1
50               #  push_eax              # 0
B8 00000000 #   mov_eax, %0
50               #  push_eax              # i (local)
8D85 08000000 # lea_eax,[ebp+DWORD] %8
8B00          # mov_eax,[eax]         # ?
5B                # pop_ebx               # !=
39C3 #  cmp_eax_ebx
0F95C0 #    setne_al
0FB6C0 #    movzx_eax,al
85C0           #    test_eax,eax          # !
0F94C0 #    sete_al
0FB6C0 #    movzx_eax,al
85C0           #    test_eax,eax          # if
58 #    pop_eax
0F84 %_output_string_table_else2 #  je %_output_string_table_else2
E9 %_output_string_table_loop_end1 #    jmp %_output_string_table_loop_end1
 ## blood-elf.c 163
 ## blood-elf.c 164
:_output_string_table_else2  #:_output_string_table_else2 # no else
50               #  push_eax              # ':ELF_str_'
B8 &string_30 # mov_eax, &string_30
50               #  push_eax              # output (global)
B8 &g_output #  mov_eax, &g_output
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # fputs (function)
B8 &f_fputs #   mov_eax, &f_fputs
81C5 0C000000          #    add_ebp, %12         # ()
FFD0 #  call_eax
81ED 0C000000 # sub_ebp, %12
58                # pop_eax               # ;
 ## blood-elf.c 165
50               #  push_eax              # i (local)
8D85 08000000 # lea_eax,[ebp+DWORD] %8
8B00          # mov_eax,[eax]         # ->
81C0 04000000 # add_eax, %4
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # output (global)
B8 &g_output #  mov_eax, &g_output
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # fputs (function)
B8 &f_fputs #   mov_eax, &f_fputs
81C5 0C000000          #    add_ebp, %12         # ()
FFD0 #  call_eax
81ED 0C000000 # sub_ebp, %12
58                # pop_eax               # ;
 ## blood-elf.c 166
50               #  push_eax              # '\t\"'
B8 &string_31 # mov_eax, &string_31
50               #  push_eax              # output (global)
B8 &g_output #  mov_eax, &g_output
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # fputs (function)
B8 &f_fputs #   mov_eax, &f_fputs
81C5 0C000000          #    add_ebp, %12         # ()
FFD0 #  call_eax
81ED 0C000000 # sub_ebp, %12
58                # pop_eax               # ;
 ## blood-elf.c 167
50               #  push_eax              # i (local)
8D85 08000000 # lea_eax,[ebp+DWORD] %8
8B00          # mov_eax,[eax]         # ->
81C0 04000000 # add_eax, %4
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # output (global)
B8 &g_output #  mov_eax, &g_output
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # fputs (function)
B8 &f_fputs #   mov_eax, &f_fputs
81C5 0C000000          #    add_ebp, %12         # ()
FFD0 #  call_eax
81ED 0C000000 # sub_ebp, %12
58                # pop_eax               # ;
 ## blood-elf.c 168
50               #  push_eax              # '\" # \"'
B8 &string_32 # mov_eax, &string_32
50               #  push_eax              # output (global)
B8 &g_output #  mov_eax, &g_output
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # fputs (function)
B8 &f_fputs #   mov_eax, &f_fputs
81C5 0C000000          #    add_ebp, %12         # ()
FFD0 #  call_eax
81ED 0C000000 # sub_ebp, %12
58                # pop_eax               # ;
 ## blood-elf.c 169
50               #  push_eax              # s (local)
8D85 0C000000 # lea_eax,[ebp+DWORD] %12
50               #  push_eax              # i (local)
8D85 08000000 # lea_eax,[ebp+DWORD] %8
8B00          # mov_eax,[eax]         # ->
81C0 04000000 # add_eax, %4
8B00          # mov_eax,[eax]         # ?
5B                # pop_ebx               # =
8903 #  mov_[ebx],eax
58                # pop_eax               # ;
:_output_string_table_loop3 #:_output_string_table_loop3
50               #  push_eax              # s (local)
8D85 0C000000 # lea_eax,[ebp+DWORD] %12
8B00          # mov_eax,[eax]         # ?
8A00           #    mov_al,[eax]          # ?1
0FB6C0 #    movzx_eax,al
0FBEC0           #  movsx_eax,al          # char
50               #  push_eax              # 0
B8 00000000 #   mov_eax, %0
5B                # pop_ebx               # !=
39C3 #  cmp_eax_ebx
0F95C0 #    setne_al
0FB6C0 #    movzx_eax,al
85C0           #    test_eax,eax          # !
0F94C0 #    sete_al
0FB6C0 #    movzx_eax,al
85C0           #    test_eax,eax          # if
58 #    pop_eax
0F84 %_output_string_table_else4 #  je %_output_string_table_else4
E9 %_output_string_table_loop_end3 #    jmp %_output_string_table_loop_end3
 ## blood-elf.c 170
:_output_string_table_else4  #:_output_string_table_else4 # no else
50               #  push_eax              # s (local)
8D85 0C000000 # lea_eax,[ebp+DWORD] %12
8B00          # mov_eax,[eax]         # ?
8A00           #    mov_al,[eax]          # ?1
0FB6C0 #    movzx_eax,al
0FBEC0           #  movsx_eax,al          # char
50               #  push_eax              # 10
B8 0A000000 #   mov_eax, %10
5B                # pop_ebx               # ==
39C3 #  cmp_eax_ebx
0F94C0 #    sete_al
0FB6C0 #    movzx_eax,al
85C0           #    test_eax,eax          # if
58 #    pop_eax
0F84 %_output_string_table_else5 #  je %_output_string_table_else5
 ## blood-elf.c 171
50               #  push_eax              # '\\n'
B8 &string_33 # mov_eax, &string_33
50               #  push_eax              # output (global)
B8 &g_output #  mov_eax, &g_output
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # fputs (function)
B8 &f_fputs #   mov_eax, &f_fputs
81C5 10000000          #    add_ebp, %16         # ()
FFD0 #  call_eax
81ED 10000000 # sub_ebp, %16
58                # pop_eax               # ;
E9 %_output_string_table_else_end5 #    jmp %_output_string_table_else_end5
:_output_string_table_else5 #:_output_string_table_else5
 ## blood-elf.c 172
50               #  push_eax              # s (local)
8D85 0C000000 # lea_eax,[ebp+DWORD] %12
8B00          # mov_eax,[eax]         # ?
8A00           #    mov_al,[eax]          # ?1
0FB6C0 #    movzx_eax,al
0FBEC0           #  movsx_eax,al          # char
50               #  push_eax              # 9
B8 09000000 #   mov_eax, %9
5B                # pop_ebx               # ==
39C3 #  cmp_eax_ebx
0F94C0 #    sete_al
0FB6C0 #    movzx_eax,al
85C0           #    test_eax,eax          # if
58 #    pop_eax
0F84 %_output_string_table_else6 #  je %_output_string_table_else6
 ## blood-elf.c 173
50               #  push_eax              # '\\t'
B8 &string_34 # mov_eax, &string_34
50               #  push_eax              # output (global)
B8 &g_output #  mov_eax, &g_output
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # fputs (function)
B8 &f_fputs #   mov_eax, &f_fputs
81C5 10000000          #    add_ebp, %16         # ()
FFD0 #  call_eax
81ED 10000000 # sub_ebp, %16
58                # pop_eax               # ;
E9 %_output_string_table_else_end6 #    jmp %_output_string_table_else_end6
:_output_string_table_else6 #:_output_string_table_else6
 ## blood-elf.c 174
50               #  push_eax              # s (local)
8D85 0C000000 # lea_eax,[ebp+DWORD] %12
8B00          # mov_eax,[eax]         # ?
8A00           #    mov_al,[eax]          # ?1
0FB6C0 #    movzx_eax,al
0FBEC0           #  movsx_eax,al          # char
50               #  push_eax              # 32
B8 20000000 #   mov_eax, %32
5B                # pop_ebx               # >=sfv
39C3 #  cmp_eax_ebx
0F9DC0 #    setge_al
0FB6C0 #    movzx_eax,al
85C0           #    test_eax,eax          # if
58 #    pop_eax
0F84 %_output_string_table_else7 #  je %_output_string_table_else7
 ## blood-elf.c 175
50               #  push_eax              # s (local)
8D85 0C000000 # lea_eax,[ebp+DWORD] %12
8B00          # mov_eax,[eax]         # ?
8A00           #    mov_al,[eax]          # ?1
0FB6C0 #    movzx_eax,al
0FBEC0           #  movsx_eax,al          # char
50               #  push_eax              # output (global)
B8 &g_output #  mov_eax, &g_output
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # fputc (function)
B8 &f_fputc #   mov_eax, &f_fputc
81C5 10000000          #    add_ebp, %16         # ()
FFD0 #  call_eax
81ED 10000000 # sub_ebp, %16
58                # pop_eax               # ;
:_output_string_table_else7  #:_output_string_table_else7 # no else
:_output_string_table_else_end6 #:_output_string_table_else_end6
:_output_string_table_else_end5 #:_output_string_table_else_end5
50               #  push_eax              # s (local)
8D85 0C000000 # lea_eax,[ebp+DWORD] %12
50               #  push_eax              # $ (dup)
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # 1
B8 01000000 #   mov_eax, %1
5B                # pop_ebx               # +
01D8 #  add_eax,ebx
5B                # pop_ebx               # =
8903 #  mov_[ebx],eax
50               #  push_eax              # 1
B8 01000000 #   mov_eax, %1
5B                # pop_ebx               # -
29C3 #  sub_ebx,eax
89D8 #  mov_eax,ebx
58                # pop_eax               # ;
E9 %_output_string_table_loop3 #    jmp %_output_string_table_loop3
:_output_string_table_loop_end3 #:_output_string_table_loop_end3
 ## blood-elf.c 176
50               #  push_eax              # '\"\n'
B8 &string_35 # mov_eax, &string_35
50               #  push_eax              # output (global)
B8 &g_output #  mov_eax, &g_output
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # fputs (function)
B8 &f_fputs #   mov_eax, &f_fputs
81C5 0C000000          #    add_ebp, %12         # ()
FFD0 #  call_eax
81ED 0C000000 # sub_ebp, %12
58                # pop_eax               # ;
50               #  push_eax              # i (local)
8D85 08000000 # lea_eax,[ebp+DWORD] %8
50               #  push_eax              # i (local)
8D85 08000000 # lea_eax,[ebp+DWORD] %8
8B00          # mov_eax,[eax]         # ->
81C0 00000000 # add_eax, %0
8B00          # mov_eax,[eax]         # ?
5B                # pop_ebx               # =
8903 #  mov_[ebx],eax
58                # pop_eax               # ;
E9 %_output_string_table_loop1 #    jmp %_output_string_table_loop1
:_output_string_table_loop_end1 #:_output_string_table_loop_end1
 ## blood-elf.c 178
50               #  push_eax              # '# END Generated string table\n\n'
B8 &string_36 # mov_eax, &string_36
50               #  push_eax              # output (global)
B8 &g_output #  mov_eax, &g_output
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # fputs (function)
B8 &f_fputs #   mov_eax, &f_fputs
81C5 0C000000          #    add_ebp, %12         # ()
FFD0 #  call_eax
81ED 0C000000 # sub_ebp, %12
58                # pop_eax               # ;
50               #  push_eax              # 0
B8 00000000 #   mov_eax, %0
8B5D00          #   mov_ebx,[ebp]         # return
53 #    push_ebx
C3 #    ret
 #
:f_output_symbol_table #:f_output_symbol_table
58 #    pop_eax
894500 #    mov_[ebp],eax
58 #    pop_eax
50               #  push_eax              # node (local)
8D85 04000000 # lea_eax,[ebp+DWORD] %4
5B                # pop_ebx               # =:
8918 #  mov_[eax],ebx
58 #    pop_eax
 ## blood-elf.c 183
50               #  push_eax              # '\n# Generated symbol table\n:ELF_sym\n# Required NULL symbol entry\n'
B8 &string_37 # mov_eax, &string_37
50               #  push_eax              # output (global)
B8 &g_output #  mov_eax, &g_output
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # fputs (function)
B8 &f_fputs #   mov_eax, &f_fputs
81C5 08000000          #    add_ebp, %8         # ()
FFD0 #  call_eax
81ED 08000000 # sub_ebp, %8
58                # pop_eax               # ;
 ## blood-elf.c 184
50               #  push_eax              # 64
B8 40000000 #   mov_eax, %64
50               #  push_eax              # BITSIZE (global)
B8 &g_BITSIZE # mov_eax, &g_BITSIZE
8B00          # mov_eax,[eax]         # ?
5B                # pop_ebx               # ==
39C3 #  cmp_eax_ebx
0F94C0 #    sete_al
0FB6C0 #    movzx_eax,al
85C0           #    test_eax,eax          # if
58 #    pop_eax
0F84 %_output_symbol_table_else1 #  je %_output_symbol_table_else1
 ## blood-elf.c 185
 ## blood-elf.c 186
50               #  push_eax              # zero_32 (global)
B8 &g_zero_32 # mov_eax, &g_zero_32
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # output (global)
B8 &g_output #  mov_eax, &g_output
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # fputs (function)
B8 &f_fputs #   mov_eax, &f_fputs
81C5 08000000          #    add_ebp, %8         # ()
FFD0 #  call_eax
81ED 08000000 # sub_ebp, %8
58                # pop_eax               # ;
 ## blood-elf.c 187
50               #  push_eax              # '\t# st_name\n'
B8 &string_38 # mov_eax, &string_38
50               #  push_eax              # output (global)
B8 &g_output #  mov_eax, &g_output
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # fputs (function)
B8 &f_fputs #   mov_eax, &f_fputs
81C5 08000000          #    add_ebp, %8         # ()
FFD0 #  call_eax
81ED 08000000 # sub_ebp, %8
58                # pop_eax               # ;
 ## blood-elf.c 189
50               #  push_eax              # zero_8 (global)
B8 &g_zero_8 #  mov_eax, &g_zero_8
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # output (global)
B8 &g_output #  mov_eax, &g_output
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # fputs (function)
B8 &f_fputs #   mov_eax, &f_fputs
81C5 08000000          #    add_ebp, %8         # ()
FFD0 #  call_eax
81ED 08000000 # sub_ebp, %8
58                # pop_eax               # ;
 ## blood-elf.c 190
50               #  push_eax              # '\t# st_info\n'
B8 &string_39 # mov_eax, &string_39
50               #  push_eax              # output (global)
B8 &g_output #  mov_eax, &g_output
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # fputs (function)
B8 &f_fputs #   mov_eax, &f_fputs
81C5 08000000          #    add_ebp, %8         # ()
FFD0 #  call_eax
81ED 08000000 # sub_ebp, %8
58                # pop_eax               # ;
 ## blood-elf.c 192
50               #  push_eax              # zero_8 (global)
B8 &g_zero_8 #  mov_eax, &g_zero_8
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # output (global)
B8 &g_output #  mov_eax, &g_output
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # fputs (function)
B8 &f_fputs #   mov_eax, &f_fputs
81C5 08000000          #    add_ebp, %8         # ()
FFD0 #  call_eax
81ED 08000000 # sub_ebp, %8
58                # pop_eax               # ;
 ## blood-elf.c 193
50               #  push_eax              # '\t# st_other\n'
B8 &string_40 # mov_eax, &string_40
50               #  push_eax              # output (global)
B8 &g_output #  mov_eax, &g_output
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # fputs (function)
B8 &f_fputs #   mov_eax, &f_fputs
81C5 08000000          #    add_ebp, %8         # ()
FFD0 #  call_eax
81ED 08000000 # sub_ebp, %8
58                # pop_eax               # ;
 ## blood-elf.c 195
50               #  push_eax              # one_16 (global)
B8 &g_one_16 #  mov_eax, &g_one_16
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # output (global)
B8 &g_output #  mov_eax, &g_output
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # fputs (function)
B8 &f_fputs #   mov_eax, &f_fputs
81C5 08000000          #    add_ebp, %8         # ()
FFD0 #  call_eax
81ED 08000000 # sub_ebp, %8
58                # pop_eax               # ;
 ## blood-elf.c 196
50               #  push_eax              # '\t# st_shndx\n'
B8 &string_41 # mov_eax, &string_41
50               #  push_eax              # output (global)
B8 &g_output #  mov_eax, &g_output
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # fputs (function)
B8 &f_fputs #   mov_eax, &f_fputs
81C5 08000000          #    add_ebp, %8         # ()
FFD0 #  call_eax
81ED 08000000 # sub_ebp, %8
58                # pop_eax               # ;
 ## blood-elf.c 198
50               #  push_eax              # zero_32 (global)
B8 &g_zero_32 # mov_eax, &g_zero_32
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # output (global)
B8 &g_output #  mov_eax, &g_output
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # fputs (function)
B8 &f_fputs #   mov_eax, &f_fputs
81C5 08000000          #    add_ebp, %8         # ()
FFD0 #  call_eax
81ED 08000000 # sub_ebp, %8
58                # pop_eax               # ;
 ## blood-elf.c 199
50               #  push_eax              # 32
B8 20000000 #   mov_eax, %32
50               #  push_eax              # output (global)
B8 &g_output #  mov_eax, &g_output
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # fputc (function)
B8 &f_fputc #   mov_eax, &f_fputc
81C5 08000000          #    add_ebp, %8         # ()
FFD0 #  call_eax
81ED 08000000 # sub_ebp, %8
58                # pop_eax               # ;
 ## blood-elf.c 200
50               #  push_eax              # zero_32 (global)
B8 &g_zero_32 # mov_eax, &g_zero_32
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # output (global)
B8 &g_output #  mov_eax, &g_output
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # fputs (function)
B8 &f_fputs #   mov_eax, &f_fputs
81C5 08000000          #    add_ebp, %8         # ()
FFD0 #  call_eax
81ED 08000000 # sub_ebp, %8
58                # pop_eax               # ;
 ## blood-elf.c 201
50               #  push_eax              # '\t# st_value\n'
B8 &string_42 # mov_eax, &string_42
50               #  push_eax              # output (global)
B8 &g_output #  mov_eax, &g_output
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # fputs (function)
B8 &f_fputs #   mov_eax, &f_fputs
81C5 08000000          #    add_ebp, %8         # ()
FFD0 #  call_eax
81ED 08000000 # sub_ebp, %8
58                # pop_eax               # ;
 ## blood-elf.c 203
50               #  push_eax              # zero_32 (global)
B8 &g_zero_32 # mov_eax, &g_zero_32
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # output (global)
B8 &g_output #  mov_eax, &g_output
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # fputs (function)
B8 &f_fputs #   mov_eax, &f_fputs
81C5 08000000          #    add_ebp, %8         # ()
FFD0 #  call_eax
81ED 08000000 # sub_ebp, %8
58                # pop_eax               # ;
 ## blood-elf.c 204
50               #  push_eax              # 32
B8 20000000 #   mov_eax, %32
50               #  push_eax              # output (global)
B8 &g_output #  mov_eax, &g_output
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # fputc (function)
B8 &f_fputc #   mov_eax, &f_fputc
81C5 08000000          #    add_ebp, %8         # ()
FFD0 #  call_eax
81ED 08000000 # sub_ebp, %8
58                # pop_eax               # ;
 ## blood-elf.c 205
50               #  push_eax              # zero_32 (global)
B8 &g_zero_32 # mov_eax, &g_zero_32
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # output (global)
B8 &g_output #  mov_eax, &g_output
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # fputs (function)
B8 &f_fputs #   mov_eax, &f_fputs
81C5 08000000          #    add_ebp, %8         # ()
FFD0 #  call_eax
81ED 08000000 # sub_ebp, %8
58                # pop_eax               # ;
 ## blood-elf.c 206
50               #  push_eax              # '\t# st_size\n\n'
B8 &string_43 # mov_eax, &string_43
50               #  push_eax              # output (global)
B8 &g_output #  mov_eax, &g_output
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # fputs (function)
B8 &f_fputs #   mov_eax, &f_fputs
81C5 08000000          #    add_ebp, %8         # ()
FFD0 #  call_eax
81ED 08000000 # sub_ebp, %8
58                # pop_eax               # ;
E9 %_output_symbol_table_else_end1 #    jmp %_output_symbol_table_else_end1
:_output_symbol_table_else1 #:_output_symbol_table_else1
 ## blood-elf.c 209
 ## blood-elf.c 210
50               #  push_eax              # zero_32 (global)
B8 &g_zero_32 # mov_eax, &g_zero_32
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # output (global)
B8 &g_output #  mov_eax, &g_output
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # fputs (function)
B8 &f_fputs #   mov_eax, &f_fputs
81C5 08000000          #    add_ebp, %8         # ()
FFD0 #  call_eax
81ED 08000000 # sub_ebp, %8
58                # pop_eax               # ;
 ## blood-elf.c 211
50               #  push_eax              # '\t# st_name\n'
B8 &string_38 # mov_eax, &string_38
50               #  push_eax              # output (global)
B8 &g_output #  mov_eax, &g_output
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # fputs (function)
B8 &f_fputs #   mov_eax, &f_fputs
81C5 08000000          #    add_ebp, %8         # ()
FFD0 #  call_eax
81ED 08000000 # sub_ebp, %8
58                # pop_eax               # ;
 ## blood-elf.c 213
50               #  push_eax              # zero_32 (global)
B8 &g_zero_32 # mov_eax, &g_zero_32
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # output (global)
B8 &g_output #  mov_eax, &g_output
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # fputs (function)
B8 &f_fputs #   mov_eax, &f_fputs
81C5 08000000          #    add_ebp, %8         # ()
FFD0 #  call_eax
81ED 08000000 # sub_ebp, %8
58                # pop_eax               # ;
 ## blood-elf.c 214
50               #  push_eax              # '\t# st_value\n'
B8 &string_42 # mov_eax, &string_42
50               #  push_eax              # output (global)
B8 &g_output #  mov_eax, &g_output
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # fputs (function)
B8 &f_fputs #   mov_eax, &f_fputs
81C5 08000000          #    add_ebp, %8         # ()
FFD0 #  call_eax
81ED 08000000 # sub_ebp, %8
58                # pop_eax               # ;
 ## blood-elf.c 216
50               #  push_eax              # zero_32 (global)
B8 &g_zero_32 # mov_eax, &g_zero_32
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # output (global)
B8 &g_output #  mov_eax, &g_output
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # fputs (function)
B8 &f_fputs #   mov_eax, &f_fputs
81C5 08000000          #    add_ebp, %8         # ()
FFD0 #  call_eax
81ED 08000000 # sub_ebp, %8
58                # pop_eax               # ;
 ## blood-elf.c 217
50               #  push_eax              # '\t# st_size\n'
B8 &string_44 # mov_eax, &string_44
50               #  push_eax              # output (global)
B8 &g_output #  mov_eax, &g_output
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # fputs (function)
B8 &f_fputs #   mov_eax, &f_fputs
81C5 08000000          #    add_ebp, %8         # ()
FFD0 #  call_eax
81ED 08000000 # sub_ebp, %8
58                # pop_eax               # ;
 ## blood-elf.c 219
50               #  push_eax              # zero_8 (global)
B8 &g_zero_8 #  mov_eax, &g_zero_8
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # output (global)
B8 &g_output #  mov_eax, &g_output
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # fputs (function)
B8 &f_fputs #   mov_eax, &f_fputs
81C5 08000000          #    add_ebp, %8         # ()
FFD0 #  call_eax
81ED 08000000 # sub_ebp, %8
58                # pop_eax               # ;
 ## blood-elf.c 220
50               #  push_eax              # '\t# st_info\n'
B8 &string_39 # mov_eax, &string_39
50               #  push_eax              # output (global)
B8 &g_output #  mov_eax, &g_output
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # fputs (function)
B8 &f_fputs #   mov_eax, &f_fputs
81C5 08000000          #    add_ebp, %8         # ()
FFD0 #  call_eax
81ED 08000000 # sub_ebp, %8
58                # pop_eax               # ;
 ## blood-elf.c 222
50               #  push_eax              # zero_8 (global)
B8 &g_zero_8 #  mov_eax, &g_zero_8
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # output (global)
B8 &g_output #  mov_eax, &g_output
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # fputs (function)
B8 &f_fputs #   mov_eax, &f_fputs
81C5 08000000          #    add_ebp, %8         # ()
FFD0 #  call_eax
81ED 08000000 # sub_ebp, %8
58                # pop_eax               # ;
 ## blood-elf.c 223
50               #  push_eax              # '\t# st_other\n'
B8 &string_40 # mov_eax, &string_40
50               #  push_eax              # output (global)
B8 &g_output #  mov_eax, &g_output
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # fputs (function)
B8 &f_fputs #   mov_eax, &f_fputs
81C5 08000000          #    add_ebp, %8         # ()
FFD0 #  call_eax
81ED 08000000 # sub_ebp, %8
58                # pop_eax               # ;
 ## blood-elf.c 225
50               #  push_eax              # one_16 (global)
B8 &g_one_16 #  mov_eax, &g_one_16
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # output (global)
B8 &g_output #  mov_eax, &g_output
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # fputs (function)
B8 &f_fputs #   mov_eax, &f_fputs
81C5 08000000          #    add_ebp, %8         # ()
FFD0 #  call_eax
81ED 08000000 # sub_ebp, %8
58                # pop_eax               # ;
 ## blood-elf.c 226
50               #  push_eax              # '\t# st_shndx\n\n'
B8 &string_45 # mov_eax, &string_45
50               #  push_eax              # output (global)
B8 &g_output #  mov_eax, &g_output
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # fputs (function)
B8 &f_fputs #   mov_eax, &f_fputs
81C5 08000000          #    add_ebp, %8         # ()
FFD0 #  call_eax
81ED 08000000 # sub_ebp, %8
58                # pop_eax               # ;
:_output_symbol_table_else_end1 #:_output_symbol_table_else_end1
 ## blood-elf.c 230
50               #  push_eax              # i (local)
8D85 08000000 # lea_eax,[ebp+DWORD] %8
50               #  push_eax              # node (local)
8D85 04000000 # lea_eax,[ebp+DWORD] %4
8B00          # mov_eax,[eax]         # ?
5B                # pop_ebx               # =
8903 #  mov_[ebx],eax
58                # pop_eax               # ;
:_output_symbol_table_loop2 #:_output_symbol_table_loop2
50               #  push_eax              # 0
B8 00000000 #   mov_eax, %0
50               #  push_eax              # i (local)
8D85 08000000 # lea_eax,[ebp+DWORD] %8
8B00          # mov_eax,[eax]         # ?
5B                # pop_ebx               # !=
39C3 #  cmp_eax_ebx
0F95C0 #    setne_al
0FB6C0 #    movzx_eax,al
85C0           #    test_eax,eax          # !
0F94C0 #    sete_al
0FB6C0 #    movzx_eax,al
85C0           #    test_eax,eax          # if
58 #    pop_eax
0F84 %_output_symbol_table_else3 #  je %_output_symbol_table_else3
E9 %_output_symbol_table_loop_end2 #    jmp %_output_symbol_table_loop_end2
 ## blood-elf.c 231
 ## blood-elf.c 232
:_output_symbol_table_else3  #:_output_symbol_table_else3 # no else
50               #  push_eax              # '%ELF_str_'
B8 &string_46 # mov_eax, &string_46
50               #  push_eax              # output (global)
B8 &g_output #  mov_eax, &g_output
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # fputs (function)
B8 &f_fputs #   mov_eax, &f_fputs
81C5 0C000000          #    add_ebp, %12         # ()
FFD0 #  call_eax
81ED 0C000000 # sub_ebp, %12
58                # pop_eax               # ;
 ## blood-elf.c 233
50               #  push_eax              # i (local)
8D85 08000000 # lea_eax,[ebp+DWORD] %8
8B00          # mov_eax,[eax]         # ->
81C0 04000000 # add_eax, %4
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # output (global)
B8 &g_output #  mov_eax, &g_output
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # fputs (function)
B8 &f_fputs #   mov_eax, &f_fputs
81C5 0C000000          #    add_ebp, %12         # ()
FFD0 #  call_eax
81ED 0C000000 # sub_ebp, %12
58                # pop_eax               # ;
 ## blood-elf.c 234
50               #  push_eax              # '>ELF_str\t# st_name\n'
B8 &string_47 # mov_eax, &string_47
50               #  push_eax              # output (global)
B8 &g_output #  mov_eax, &g_output
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # fputs (function)
B8 &f_fputs #   mov_eax, &f_fputs
81C5 0C000000          #    add_ebp, %12         # ()
FFD0 #  call_eax
81ED 0C000000 # sub_ebp, %12
58                # pop_eax               # ;
 ## blood-elf.c 236
50               #  push_eax              # 64
B8 40000000 #   mov_eax, %64
50               #  push_eax              # BITSIZE (global)
B8 &g_BITSIZE # mov_eax, &g_BITSIZE
8B00          # mov_eax,[eax]         # ?
5B                # pop_ebx               # ==
39C3 #  cmp_eax_ebx
0F94C0 #    sete_al
0FB6C0 #    movzx_eax,al
85C0           #    test_eax,eax          # if
58 #    pop_eax
0F84 %_output_symbol_table_else4 #  je %_output_symbol_table_else4
 ## blood-elf.c 237
 ## blood-elf.c 238
50               #  push_eax              # two_8 (global)
B8 &g_two_8 #   mov_eax, &g_two_8
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # output (global)
B8 &g_output #  mov_eax, &g_output
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # fputs (function)
B8 &f_fputs #   mov_eax, &f_fputs
81C5 0C000000          #    add_ebp, %12         # ()
FFD0 #  call_eax
81ED 0C000000 # sub_ebp, %12
58                # pop_eax               # ;
 ## blood-elf.c 239
50               #  push_eax              # '\t# st_info (FUNC)\n'
B8 &string_48 # mov_eax, &string_48
50               #  push_eax              # output (global)
B8 &g_output #  mov_eax, &g_output
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # fputs (function)
B8 &f_fputs #   mov_eax, &f_fputs
81C5 0C000000          #    add_ebp, %12         # ()
FFD0 #  call_eax
81ED 0C000000 # sub_ebp, %12
58                # pop_eax               # ;
 ## blood-elf.c 241
50               #  push_eax              # 95
B8 5F000000 #   mov_eax, %95
50               #  push_eax              # i (local)
8D85 08000000 # lea_eax,[ebp+DWORD] %8
8B00          # mov_eax,[eax]         # ->
81C0 04000000 # add_eax, %4
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # 0
B8 00000000 #   mov_eax, %0
5B                # pop_ebx               # +
01D8 #  add_eax,ebx
8A00           #    mov_al,[eax]          # ?1
0FB6C0 #    movzx_eax,al
0FBEC0           #  movsx_eax,al          # char
5B                # pop_ebx               # ==
39C3 #  cmp_eax_ebx
0F94C0 #    sete_al
0FB6C0 #    movzx_eax,al
85C0           #    test_eax,eax          # &&
0F84 %_output_symbol_table_and_end5 #   je %_output_symbol_table_and_end5
58 #    pop_eax
50               #  push_eax              # entry (global)
B8 &g_entry #   mov_eax, &g_entry
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # i (local)
8D85 08000000 # lea_eax,[ebp+DWORD] %8
8B00          # mov_eax,[eax]         # ->
81C0 04000000 # add_eax, %4
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # match (function)
B8 &f_match #   mov_eax, &f_match
81C5 0C000000          #    add_ebp, %12         # ()
FFD0 #  call_eax
81ED 0C000000 # sub_ebp, %12
85C0           #    test_eax,eax          # !
0F94C0 #    sete_al
0FB6C0 #    movzx_eax,al
:_output_symbol_table_and_end5 #:_output_symbol_table_and_end5
85C0           #    test_eax,eax          # if
58 #    pop_eax
0F84 %_output_symbol_table_else6 #  je %_output_symbol_table_else6
 ## blood-elf.c 242
 ## blood-elf.c 243
50               #  push_eax              # two_8 (global)
B8 &g_two_8 #   mov_eax, &g_two_8
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # output (global)
B8 &g_output #  mov_eax, &g_output
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # fputs (function)
B8 &f_fputs #   mov_eax, &f_fputs
81C5 0C000000          #    add_ebp, %12         # ()
FFD0 #  call_eax
81ED 0C000000 # sub_ebp, %12
58                # pop_eax               # ;
 ## blood-elf.c 244
50               #  push_eax              # '\t# st_other (hidden)\n'
B8 &string_49 # mov_eax, &string_49
50               #  push_eax              # output (global)
B8 &g_output #  mov_eax, &g_output
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # fputs (function)
B8 &f_fputs #   mov_eax, &f_fputs
81C5 0C000000          #    add_ebp, %12         # ()
FFD0 #  call_eax
81ED 0C000000 # sub_ebp, %12
58                # pop_eax               # ;
E9 %_output_symbol_table_else_end6 #    jmp %_output_symbol_table_else_end6
:_output_symbol_table_else6 #:_output_symbol_table_else6
 ## blood-elf.c 247
 ## blood-elf.c 248
50               #  push_eax              # zero_8 (global)
B8 &g_zero_8 #  mov_eax, &g_zero_8
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # output (global)
B8 &g_output #  mov_eax, &g_output
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # fputs (function)
B8 &f_fputs #   mov_eax, &f_fputs
81C5 0C000000          #    add_ebp, %12         # ()
FFD0 #  call_eax
81ED 0C000000 # sub_ebp, %12
58                # pop_eax               # ;
 ## blood-elf.c 249
50               #  push_eax              # '\t# st_other (other)\n'
B8 &string_50 # mov_eax, &string_50
50               #  push_eax              # output (global)
B8 &g_output #  mov_eax, &g_output
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # fputs (function)
B8 &f_fputs #   mov_eax, &f_fputs
81C5 0C000000          #    add_ebp, %12         # ()
FFD0 #  call_eax
81ED 0C000000 # sub_ebp, %12
58                # pop_eax               # ;
:_output_symbol_table_else_end6 #:_output_symbol_table_else_end6
 ## blood-elf.c 252
50               #  push_eax              # one_16 (global)
B8 &g_one_16 #  mov_eax, &g_one_16
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # output (global)
B8 &g_output #  mov_eax, &g_output
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # fputs (function)
B8 &f_fputs #   mov_eax, &f_fputs
81C5 0C000000          #    add_ebp, %12         # ()
FFD0 #  call_eax
81ED 0C000000 # sub_ebp, %12
58                # pop_eax               # ;
 ## blood-elf.c 253
50               #  push_eax              # '\t# st_shndx\n'
B8 &string_41 # mov_eax, &string_41
50               #  push_eax              # output (global)
B8 &g_output #  mov_eax, &g_output
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # fputs (function)
B8 &f_fputs #   mov_eax, &f_fputs
81C5 0C000000          #    add_ebp, %12         # ()
FFD0 #  call_eax
81ED 0C000000 # sub_ebp, %12
58                # pop_eax               # ;
 ## blood-elf.c 255
50               #  push_eax              # '&'
B8 &string_51 # mov_eax, &string_51
50               #  push_eax              # output (global)
B8 &g_output #  mov_eax, &g_output
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # fputs (function)
B8 &f_fputs #   mov_eax, &f_fputs
81C5 0C000000          #    add_ebp, %12         # ()
FFD0 #  call_eax
81ED 0C000000 # sub_ebp, %12
58                # pop_eax               # ;
 ## blood-elf.c 256
50               #  push_eax              # i (local)
8D85 08000000 # lea_eax,[ebp+DWORD] %8
8B00          # mov_eax,[eax]         # ->
81C0 04000000 # add_eax, %4
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # output (global)
B8 &g_output #  mov_eax, &g_output
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # fputs (function)
B8 &f_fputs #   mov_eax, &f_fputs
81C5 0C000000          #    add_ebp, %12         # ()
FFD0 #  call_eax
81ED 0C000000 # sub_ebp, %12
58                # pop_eax               # ;
 ## blood-elf.c 257
50               #  push_eax              # 32
B8 20000000 #   mov_eax, %32
50               #  push_eax              # output (global)
B8 &g_output #  mov_eax, &g_output
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # fputc (function)
B8 &f_fputc #   mov_eax, &f_fputc
81C5 0C000000          #    add_ebp, %12         # ()
FFD0 #  call_eax
81ED 0C000000 # sub_ebp, %12
58                # pop_eax               # ;
 ## blood-elf.c 258
50               #  push_eax              # zero_32 (global)
B8 &g_zero_32 # mov_eax, &g_zero_32
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # output (global)
B8 &g_output #  mov_eax, &g_output
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # fputs (function)
B8 &f_fputs #   mov_eax, &f_fputs
81C5 0C000000          #    add_ebp, %12         # ()
FFD0 #  call_eax
81ED 0C000000 # sub_ebp, %12
58                # pop_eax               # ;
 ## blood-elf.c 259
50               #  push_eax              # '\t# st_value\n'
B8 &string_42 # mov_eax, &string_42
50               #  push_eax              # output (global)
B8 &g_output #  mov_eax, &g_output
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # fputs (function)
B8 &f_fputs #   mov_eax, &f_fputs
81C5 0C000000          #    add_ebp, %12         # ()
FFD0 #  call_eax
81ED 0C000000 # sub_ebp, %12
58                # pop_eax               # ;
 ## blood-elf.c 261
50               #  push_eax              # zero_32 (global)
B8 &g_zero_32 # mov_eax, &g_zero_32
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # output (global)
B8 &g_output #  mov_eax, &g_output
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # fputs (function)
B8 &f_fputs #   mov_eax, &f_fputs
81C5 0C000000          #    add_ebp, %12         # ()
FFD0 #  call_eax
81ED 0C000000 # sub_ebp, %12
58                # pop_eax               # ;
 ## blood-elf.c 262
50               #  push_eax              # 32
B8 20000000 #   mov_eax, %32
50               #  push_eax              # output (global)
B8 &g_output #  mov_eax, &g_output
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # fputc (function)
B8 &f_fputc #   mov_eax, &f_fputc
81C5 0C000000          #    add_ebp, %12         # ()
FFD0 #  call_eax
81ED 0C000000 # sub_ebp, %12
58                # pop_eax               # ;
 ## blood-elf.c 263
50               #  push_eax              # zero_32 (global)
B8 &g_zero_32 # mov_eax, &g_zero_32
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # output (global)
B8 &g_output #  mov_eax, &g_output
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # fputs (function)
B8 &f_fputs #   mov_eax, &f_fputs
81C5 0C000000          #    add_ebp, %12         # ()
FFD0 #  call_eax
81ED 0C000000 # sub_ebp, %12
58                # pop_eax               # ;
 ## blood-elf.c 264
50               #  push_eax              # '\t# st_size (unknown size)\n\n'
B8 &string_52 # mov_eax, &string_52
50               #  push_eax              # output (global)
B8 &g_output #  mov_eax, &g_output
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # fputs (function)
B8 &f_fputs #   mov_eax, &f_fputs
81C5 0C000000          #    add_ebp, %12         # ()
FFD0 #  call_eax
81ED 0C000000 # sub_ebp, %12
58                # pop_eax               # ;
E9 %_output_symbol_table_else_end4 #    jmp %_output_symbol_table_else_end4
:_output_symbol_table_else4 #:_output_symbol_table_else4
 ## blood-elf.c 267
 ## blood-elf.c 268
50               #  push_eax              # '&'
B8 &string_51 # mov_eax, &string_51
50               #  push_eax              # output (global)
B8 &g_output #  mov_eax, &g_output
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # fputs (function)
B8 &f_fputs #   mov_eax, &f_fputs
81C5 0C000000          #    add_ebp, %12         # ()
FFD0 #  call_eax
81ED 0C000000 # sub_ebp, %12
58                # pop_eax               # ;
 ## blood-elf.c 269
50               #  push_eax              # i (local)
8D85 08000000 # lea_eax,[ebp+DWORD] %8
8B00          # mov_eax,[eax]         # ->
81C0 04000000 # add_eax, %4
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # output (global)
B8 &g_output #  mov_eax, &g_output
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # fputs (function)
B8 &f_fputs #   mov_eax, &f_fputs
81C5 0C000000          #    add_ebp, %12         # ()
FFD0 #  call_eax
81ED 0C000000 # sub_ebp, %12
58                # pop_eax               # ;
 ## blood-elf.c 270
50               #  push_eax              # '\t#st_value\n'
B8 &string_53 # mov_eax, &string_53
50               #  push_eax              # output (global)
B8 &g_output #  mov_eax, &g_output
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # fputs (function)
B8 &f_fputs #   mov_eax, &f_fputs
81C5 0C000000          #    add_ebp, %12         # ()
FFD0 #  call_eax
81ED 0C000000 # sub_ebp, %12
58                # pop_eax               # ;
 ## blood-elf.c 272
50               #  push_eax              # zero_32 (global)
B8 &g_zero_32 # mov_eax, &g_zero_32
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # output (global)
B8 &g_output #  mov_eax, &g_output
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # fputs (function)
B8 &f_fputs #   mov_eax, &f_fputs
81C5 0C000000          #    add_ebp, %12         # ()
FFD0 #  call_eax
81ED 0C000000 # sub_ebp, %12
58                # pop_eax               # ;
 ## blood-elf.c 273
50               #  push_eax              # '\t# st_size (unknown size)\n'
B8 &string_54 # mov_eax, &string_54
50               #  push_eax              # output (global)
B8 &g_output #  mov_eax, &g_output
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # fputs (function)
B8 &f_fputs #   mov_eax, &f_fputs
81C5 0C000000          #    add_ebp, %12         # ()
FFD0 #  call_eax
81ED 0C000000 # sub_ebp, %12
58                # pop_eax               # ;
 ## blood-elf.c 275
50               #  push_eax              # two_8 (global)
B8 &g_two_8 #   mov_eax, &g_two_8
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # output (global)
B8 &g_output #  mov_eax, &g_output
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # fputs (function)
B8 &f_fputs #   mov_eax, &f_fputs
81C5 0C000000          #    add_ebp, %12         # ()
FFD0 #  call_eax
81ED 0C000000 # sub_ebp, %12
58                # pop_eax               # ;
 ## blood-elf.c 276
50               #  push_eax              # '\t# st_info (FUNC)\n'
B8 &string_48 # mov_eax, &string_48
50               #  push_eax              # output (global)
B8 &g_output #  mov_eax, &g_output
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # fputs (function)
B8 &f_fputs #   mov_eax, &f_fputs
81C5 0C000000          #    add_ebp, %12         # ()
FFD0 #  call_eax
81ED 0C000000 # sub_ebp, %12
58                # pop_eax               # ;
 ## blood-elf.c 278
50               #  push_eax              # 95
B8 5F000000 #   mov_eax, %95
50               #  push_eax              # i (local)
8D85 08000000 # lea_eax,[ebp+DWORD] %8
8B00          # mov_eax,[eax]         # ->
81C0 04000000 # add_eax, %4
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # 0
B8 00000000 #   mov_eax, %0
5B                # pop_ebx               # +
01D8 #  add_eax,ebx
8A00           #    mov_al,[eax]          # ?1
0FB6C0 #    movzx_eax,al
0FBEC0           #  movsx_eax,al          # char
5B                # pop_ebx               # ==
39C3 #  cmp_eax_ebx
0F94C0 #    sete_al
0FB6C0 #    movzx_eax,al
85C0           #    test_eax,eax          # &&
0F84 %_output_symbol_table_and_end7 #   je %_output_symbol_table_and_end7
58 #    pop_eax
50               #  push_eax              # entry (global)
B8 &g_entry #   mov_eax, &g_entry
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # i (local)
8D85 08000000 # lea_eax,[ebp+DWORD] %8
8B00          # mov_eax,[eax]         # ->
81C0 04000000 # add_eax, %4
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # match (function)
B8 &f_match #   mov_eax, &f_match
81C5 0C000000          #    add_ebp, %12         # ()
FFD0 #  call_eax
81ED 0C000000 # sub_ebp, %12
85C0           #    test_eax,eax          # !
0F94C0 #    sete_al
0FB6C0 #    movzx_eax,al
:_output_symbol_table_and_end7 #:_output_symbol_table_and_end7
85C0           #    test_eax,eax          # if
58 #    pop_eax
0F84 %_output_symbol_table_else8 #  je %_output_symbol_table_else8
 ## blood-elf.c 279
 ## blood-elf.c 280
50               #  push_eax              # two_8 (global)
B8 &g_two_8 #   mov_eax, &g_two_8
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # output (global)
B8 &g_output #  mov_eax, &g_output
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # fputs (function)
B8 &f_fputs #   mov_eax, &f_fputs
81C5 0C000000          #    add_ebp, %12         # ()
FFD0 #  call_eax
81ED 0C000000 # sub_ebp, %12
58                # pop_eax               # ;
 ## blood-elf.c 281
50               #  push_eax              # '\t# st_other (hidden)\n'
B8 &string_49 # mov_eax, &string_49
50               #  push_eax              # output (global)
B8 &g_output #  mov_eax, &g_output
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # fputs (function)
B8 &f_fputs #   mov_eax, &f_fputs
81C5 0C000000          #    add_ebp, %12         # ()
FFD0 #  call_eax
81ED 0C000000 # sub_ebp, %12
58                # pop_eax               # ;
E9 %_output_symbol_table_else_end8 #    jmp %_output_symbol_table_else_end8
:_output_symbol_table_else8 #:_output_symbol_table_else8
 ## blood-elf.c 284
 ## blood-elf.c 285
50               #  push_eax              # zero_8 (global)
B8 &g_zero_8 #  mov_eax, &g_zero_8
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # output (global)
B8 &g_output #  mov_eax, &g_output
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # fputs (function)
B8 &f_fputs #   mov_eax, &f_fputs
81C5 0C000000          #    add_ebp, %12         # ()
FFD0 #  call_eax
81ED 0C000000 # sub_ebp, %12
58                # pop_eax               # ;
 ## blood-elf.c 286
50               #  push_eax              # '\t# st_other (default)\n'
B8 &string_55 # mov_eax, &string_55
50               #  push_eax              # output (global)
B8 &g_output #  mov_eax, &g_output
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # fputs (function)
B8 &f_fputs #   mov_eax, &f_fputs
81C5 0C000000          #    add_ebp, %12         # ()
FFD0 #  call_eax
81ED 0C000000 # sub_ebp, %12
58                # pop_eax               # ;
:_output_symbol_table_else_end8 #:_output_symbol_table_else_end8
 ## blood-elf.c 289
50               #  push_eax              # one_16 (global)
B8 &g_one_16 #  mov_eax, &g_one_16
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # output (global)
B8 &g_output #  mov_eax, &g_output
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # fputs (function)
B8 &f_fputs #   mov_eax, &f_fputs
81C5 0C000000          #    add_ebp, %12         # ()
FFD0 #  call_eax
81ED 0C000000 # sub_ebp, %12
58                # pop_eax               # ;
 ## blood-elf.c 290
50               #  push_eax              # '\t# st_shndx\n\n'
B8 &string_45 # mov_eax, &string_45
50               #  push_eax              # output (global)
B8 &g_output #  mov_eax, &g_output
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # fputs (function)
B8 &f_fputs #   mov_eax, &f_fputs
81C5 0C000000          #    add_ebp, %12         # ()
FFD0 #  call_eax
81ED 0C000000 # sub_ebp, %12
58                # pop_eax               # ;
:_output_symbol_table_else_end4 #:_output_symbol_table_else_end4
50               #  push_eax              # i (local)
8D85 08000000 # lea_eax,[ebp+DWORD] %8
50               #  push_eax              # i (local)
8D85 08000000 # lea_eax,[ebp+DWORD] %8
8B00          # mov_eax,[eax]         # ->
81C0 00000000 # add_eax, %0
8B00          # mov_eax,[eax]         # ?
5B                # pop_ebx               # =
8903 #  mov_[ebx],eax
58                # pop_eax               # ;
E9 %_output_symbol_table_loop2 #    jmp %_output_symbol_table_loop2
:_output_symbol_table_loop_end2 #:_output_symbol_table_loop_end2
 ## blood-elf.c 294
50               #  push_eax              # '# END Generated symbol table\n'
B8 &string_56 # mov_eax, &string_56
50               #  push_eax              # output (global)
B8 &g_output #  mov_eax, &g_output
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # fputs (function)
B8 &f_fputs #   mov_eax, &f_fputs
81C5 0C000000          #    add_ebp, %12         # ()
FFD0 #  call_eax
81ED 0C000000 # sub_ebp, %12
58                # pop_eax               # ;
50               #  push_eax              # 0
B8 00000000 #   mov_eax, %0
8B5D00          #   mov_ebx,[ebp]         # return
53 #    push_ebx
C3 #    ret
 #
:f_reverse_list #:f_reverse_list
58 #    pop_eax
894500 #    mov_[ebp],eax
58 #    pop_eax
50               #  push_eax              # head (local)
8D85 04000000 # lea_eax,[ebp+DWORD] %4
5B                # pop_ebx               # =:
8918 #  mov_[eax],ebx
58 #    pop_eax
50               #  push_eax              # root (local)
8D85 08000000 # lea_eax,[ebp+DWORD] %8
50               #  push_eax              # 0
B8 00000000 #   mov_eax, %0
5B                # pop_ebx               # =
8903 #  mov_[ebx],eax
58                # pop_eax               # ;
 ## blood-elf.c 301
:_reverse_list_loop1 #:_reverse_list_loop1
50               #  push_eax              # 0
B8 00000000 #   mov_eax, %0
50               #  push_eax              # head (local)
8D85 04000000 # lea_eax,[ebp+DWORD] %4
8B00          # mov_eax,[eax]         # ?
5B                # pop_ebx               # !=
39C3 #  cmp_eax_ebx
0F95C0 #    setne_al
0FB6C0 #    movzx_eax,al
85C0           #    test_eax,eax          # !
0F94C0 #    sete_al
0FB6C0 #    movzx_eax,al
85C0           #    test_eax,eax          # if
58 #    pop_eax
0F84 %_reverse_list_else2 # je %_reverse_list_else2
E9 %_reverse_list_loop_end1 #   jmp %_reverse_list_loop_end1
 ## blood-elf.c 302
 ## blood-elf.c 303
:_reverse_list_else2  #:_reverse_list_else2 # no else
50               #  push_eax              # next (local)
8D85 0C000000 # lea_eax,[ebp+DWORD] %12
50               #  push_eax              # head (local)
8D85 04000000 # lea_eax,[ebp+DWORD] %4
8B00          # mov_eax,[eax]         # ->
81C0 00000000 # add_eax, %0
8B00          # mov_eax,[eax]         # ?
5B                # pop_ebx               # =
8903 #  mov_[ebx],eax
58                # pop_eax               # ;
 ## blood-elf.c 304
50               #  push_eax              # head (local)
8D85 04000000 # lea_eax,[ebp+DWORD] %4
8B00          # mov_eax,[eax]         # ->
81C0 00000000 # add_eax, %0
50               #  push_eax              # root (local)
8D85 08000000 # lea_eax,[ebp+DWORD] %8
8B00          # mov_eax,[eax]         # ?
5B                # pop_ebx               # =
8903 #  mov_[ebx],eax
58                # pop_eax               # ;
 ## blood-elf.c 305
50               #  push_eax              # root (local)
8D85 08000000 # lea_eax,[ebp+DWORD] %8
50               #  push_eax              # head (local)
8D85 04000000 # lea_eax,[ebp+DWORD] %4
8B00          # mov_eax,[eax]         # ?
5B                # pop_ebx               # =
8903 #  mov_[ebx],eax
58                # pop_eax               # ;
 ## blood-elf.c 306
50               #  push_eax              # head (local)
8D85 04000000 # lea_eax,[ebp+DWORD] %4
50               #  push_eax              # next (local)
8D85 0C000000 # lea_eax,[ebp+DWORD] %12
8B00          # mov_eax,[eax]         # ?
5B                # pop_ebx               # =
8903 #  mov_[ebx],eax
58                # pop_eax               # ;
E9 %_reverse_list_loop1 #   jmp %_reverse_list_loop1
:_reverse_list_loop_end1 #:_reverse_list_loop_end1
 ## blood-elf.c 308
50               #  push_eax              # root (local)
8D85 08000000 # lea_eax,[ebp+DWORD] %8
8B00          # mov_eax,[eax]         # ?
8B5D00          #   mov_ebx,[ebp]         # return
53 #    push_ebx
C3 #    ret
50               #  push_eax              # 0
B8 00000000 #   mov_eax, %0
8B5D00          #   mov_ebx,[ebp]         # return
53 #    push_ebx
C3 #    ret
 #
:f_write_int #:f_write_int
58 #    pop_eax
894500 #    mov_[ebp],eax
58 #    pop_eax
50               #  push_eax              # label (local)
8D85 04000000 # lea_eax,[ebp+DWORD] %4
5B                # pop_ebx               # =:
8918 #  mov_[eax],ebx
58 #    pop_eax
50               #  push_eax              # field (local)
8D85 08000000 # lea_eax,[ebp+DWORD] %8
5B                # pop_ebx               # =:
8918 #  mov_[eax],ebx
58 #    pop_eax
 ## blood-elf.c 313
50               #  push_eax              # field (local)
8D85 08000000 # lea_eax,[ebp+DWORD] %8
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # output (global)
B8 &g_output #  mov_eax, &g_output
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # fputs (function)
B8 &f_fputs #   mov_eax, &f_fputs
81C5 0C000000          #    add_ebp, %12         # ()
FFD0 #  call_eax
81ED 0C000000 # sub_ebp, %12
58                # pop_eax               # ;
 ## blood-elf.c 314
50               #  push_eax              # '\t#'
B8 &string_57 # mov_eax, &string_57
50               #  push_eax              # output (global)
B8 &g_output #  mov_eax, &g_output
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # fputs (function)
B8 &f_fputs #   mov_eax, &f_fputs
81C5 0C000000          #    add_ebp, %12         # ()
FFD0 #  call_eax
81ED 0C000000 # sub_ebp, %12
58                # pop_eax               # ;
 ## blood-elf.c 315
50               #  push_eax              # label (local)
8D85 04000000 # lea_eax,[ebp+DWORD] %4
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # output (global)
B8 &g_output #  mov_eax, &g_output
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # fputs (function)
B8 &f_fputs #   mov_eax, &f_fputs
81C5 0C000000          #    add_ebp, %12         # ()
FFD0 #  call_eax
81ED 0C000000 # sub_ebp, %12
58                # pop_eax               # ;
 ## blood-elf.c 316
50               #  push_eax              # 10
B8 0A000000 #   mov_eax, %10
50               #  push_eax              # output (global)
B8 &g_output #  mov_eax, &g_output
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # fputc (function)
B8 &f_fputc #   mov_eax, &f_fputc
81C5 0C000000          #    add_ebp, %12         # ()
FFD0 #  call_eax
81ED 0C000000 # sub_ebp, %12
58                # pop_eax               # ;
50               #  push_eax              # 0
B8 00000000 #   mov_eax, %0
8B5D00          #   mov_ebx,[ebp]         # return
53 #    push_ebx
C3 #    ret
 #
:f_write_register #:f_write_register
58 #    pop_eax
894500 #    mov_[ebp],eax
58 #    pop_eax
50               #  push_eax              # label (local)
8D85 04000000 # lea_eax,[ebp+DWORD] %4
5B                # pop_ebx               # =:
8918 #  mov_[eax],ebx
58 #    pop_eax
50               #  push_eax              # field (local)
8D85 08000000 # lea_eax,[ebp+DWORD] %8
5B                # pop_ebx               # =:
8918 #  mov_[eax],ebx
58 #    pop_eax
 ## blood-elf.c 323
50               #  push_eax              # field (local)
8D85 08000000 # lea_eax,[ebp+DWORD] %8
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # output (global)
B8 &g_output #  mov_eax, &g_output
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # fputs (function)
B8 &f_fputs #   mov_eax, &f_fputs
81C5 0C000000          #    add_ebp, %12         # ()
FFD0 #  call_eax
81ED 0C000000 # sub_ebp, %12
58                # pop_eax               # ;
 ## blood-elf.c 324
50               #  push_eax              # 64
B8 40000000 #   mov_eax, %64
50               #  push_eax              # BITSIZE (global)
B8 &g_BITSIZE # mov_eax, &g_BITSIZE
8B00          # mov_eax,[eax]         # ?
5B                # pop_ebx               # ==
39C3 #  cmp_eax_ebx
0F94C0 #    sete_al
0FB6C0 #    movzx_eax,al
85C0           #    test_eax,eax          # if
58 #    pop_eax
0F84 %_write_register_else1 #   je %_write_register_else1
 ## blood-elf.c 325
 ## blood-elf.c 326
50               #  push_eax              # 32
B8 20000000 #   mov_eax, %32
50               #  push_eax              # output (global)
B8 &g_output #  mov_eax, &g_output
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # fputc (function)
B8 &f_fputc #   mov_eax, &f_fputc
81C5 0C000000          #    add_ebp, %12         # ()
FFD0 #  call_eax
81ED 0C000000 # sub_ebp, %12
58                # pop_eax               # ;
 ## blood-elf.c 327
50               #  push_eax              # zero_32 (global)
B8 &g_zero_32 # mov_eax, &g_zero_32
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # output (global)
B8 &g_output #  mov_eax, &g_output
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # fputs (function)
B8 &f_fputs #   mov_eax, &f_fputs
81C5 0C000000          #    add_ebp, %12         # ()
FFD0 #  call_eax
81ED 0C000000 # sub_ebp, %12
58                # pop_eax               # ;
 ## blood-elf.c 330
:_write_register_else1  #:_write_register_else1 # no else
50               #  push_eax              # '\t#'
B8 &string_57 # mov_eax, &string_57
50               #  push_eax              # output (global)
B8 &g_output #  mov_eax, &g_output
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # fputs (function)
B8 &f_fputs #   mov_eax, &f_fputs
81C5 0C000000          #    add_ebp, %12         # ()
FFD0 #  call_eax
81ED 0C000000 # sub_ebp, %12
58                # pop_eax               # ;
 ## blood-elf.c 331
50               #  push_eax              # label (local)
8D85 04000000 # lea_eax,[ebp+DWORD] %4
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # output (global)
B8 &g_output #  mov_eax, &g_output
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # fputs (function)
B8 &f_fputs #   mov_eax, &f_fputs
81C5 0C000000          #    add_ebp, %12         # ()
FFD0 #  call_eax
81ED 0C000000 # sub_ebp, %12
58                # pop_eax               # ;
 ## blood-elf.c 332
50               #  push_eax              # 10
B8 0A000000 #   mov_eax, %10
50               #  push_eax              # output (global)
B8 &g_output #  mov_eax, &g_output
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # fputc (function)
B8 &f_fputc #   mov_eax, &f_fputc
81C5 0C000000          #    add_ebp, %12         # ()
FFD0 #  call_eax
81ED 0C000000 # sub_ebp, %12
58                # pop_eax               # ;
50               #  push_eax              # 0
B8 00000000 #   mov_eax, %0
8B5D00          #   mov_ebx,[ebp]         # return
53 #    push_ebx
C3 #    ret
 #
:f_write_section #:f_write_section
58 #    pop_eax
894500 #    mov_[ebp],eax
58 #    pop_eax
50               #  push_eax              # entry (local)
8D85 04000000 # lea_eax,[ebp+DWORD] %4
5B                # pop_ebx               # =:
8918 #  mov_[eax],ebx
58 #    pop_eax
50               #  push_eax              # info (local)
8D85 08000000 # lea_eax,[ebp+DWORD] %8
5B                # pop_ebx               # =:
8918 #  mov_[eax],ebx
58 #    pop_eax
50               #  push_eax              # link (local)
8D85 0C000000 # lea_eax,[ebp+DWORD] %12
5B                # pop_ebx               # =:
8918 #  mov_[eax],ebx
58 #    pop_eax
50               #  push_eax              # size (local)
8D85 10000000 # lea_eax,[ebp+DWORD] %16
5B                # pop_ebx               # =:
8918 #  mov_[eax],ebx
58 #    pop_eax
50               #  push_eax              # offset (local)
8D85 14000000 # lea_eax,[ebp+DWORD] %20
5B                # pop_ebx               # =:
8918 #  mov_[eax],ebx
58 #    pop_eax
50               #  push_eax              # address (local)
8D85 18000000 # lea_eax,[ebp+DWORD] %24
5B                # pop_ebx               # =:
8918 #  mov_[eax],ebx
58 #    pop_eax
50               #  push_eax              # flags (local)
8D85 1C000000 # lea_eax,[ebp+DWORD] %28
5B                # pop_ebx               # =:
8918 #  mov_[eax],ebx
58 #    pop_eax
50               #  push_eax              # type (local)
8D85 20000000 # lea_eax,[ebp+DWORD] %32
5B                # pop_ebx               # =:
8918 #  mov_[eax],ebx
58 #    pop_eax
50               #  push_eax              # name (local)
8D85 24000000 # lea_eax,[ebp+DWORD] %36
5B                # pop_ebx               # =:
8918 #  mov_[eax],ebx
58 #    pop_eax
50               #  push_eax              # label (local)
8D85 28000000 # lea_eax,[ebp+DWORD] %40
5B                # pop_ebx               # =:
8918 #  mov_[eax],ebx
58 #    pop_eax
 ## blood-elf.c 338
50               #  push_eax              # 10
B8 0A000000 #   mov_eax, %10
50               #  push_eax              # output (global)
B8 &g_output #  mov_eax, &g_output
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # fputc (function)
B8 &f_fputc #   mov_eax, &f_fputc
81C5 2C000000          #    add_ebp, %44         # ()
FFD0 #  call_eax
81ED 2C000000 # sub_ebp, %44
58                # pop_eax               # ;
 ## blood-elf.c 339
50               #  push_eax              # label (local)
8D85 28000000 # lea_eax,[ebp+DWORD] %40
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # output (global)
B8 &g_output #  mov_eax, &g_output
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # fputs (function)
B8 &f_fputs #   mov_eax, &f_fputs
81C5 2C000000          #    add_ebp, %44         # ()
FFD0 #  call_eax
81ED 2C000000 # sub_ebp, %44
58                # pop_eax               # ;
 ## blood-elf.c 340
50               #  push_eax              # 10
B8 0A000000 #   mov_eax, %10
50               #  push_eax              # output (global)
B8 &g_output #  mov_eax, &g_output
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # fputc (function)
B8 &f_fputc #   mov_eax, &f_fputc
81C5 2C000000          #    add_ebp, %44         # ()
FFD0 #  call_eax
81ED 2C000000 # sub_ebp, %44
58                # pop_eax               # ;
 ## blood-elf.c 342
50               #  push_eax              # name (local)
8D85 24000000 # lea_eax,[ebp+DWORD] %36
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # 'sh_name'
B8 &string_58 # mov_eax, &string_58
50               #  push_eax              # write_int (function)
B8 &f_write_int #   mov_eax, &f_write_int
81C5 2C000000          #    add_ebp, %44         # ()
FFD0 #  call_eax
81ED 2C000000 # sub_ebp, %44
58                # pop_eax               # ;
 ## blood-elf.c 343
50               #  push_eax              # type (local)
8D85 20000000 # lea_eax,[ebp+DWORD] %32
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # 'sh_type'
B8 &string_59 # mov_eax, &string_59
50               #  push_eax              # write_int (function)
B8 &f_write_int #   mov_eax, &f_write_int
81C5 2C000000          #    add_ebp, %44         # ()
FFD0 #  call_eax
81ED 2C000000 # sub_ebp, %44
58                # pop_eax               # ;
 ## blood-elf.c 344
50               #  push_eax              # flags (local)
8D85 1C000000 # lea_eax,[ebp+DWORD] %28
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # 'sh_flags'
B8 &string_60 # mov_eax, &string_60
50               #  push_eax              # write_register (function)
B8 &f_write_register #  mov_eax, &f_write_register
81C5 2C000000          #    add_ebp, %44         # ()
FFD0 #  call_eax
81ED 2C000000 # sub_ebp, %44
58                # pop_eax               # ;
 ## blood-elf.c 345
50               #  push_eax              # address (local)
8D85 18000000 # lea_eax,[ebp+DWORD] %24
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # 'sh_addr'
B8 &string_61 # mov_eax, &string_61
50               #  push_eax              # write_register (function)
B8 &f_write_register #  mov_eax, &f_write_register
81C5 2C000000          #    add_ebp, %44         # ()
FFD0 #  call_eax
81ED 2C000000 # sub_ebp, %44
58                # pop_eax               # ;
 ## blood-elf.c 346
50               #  push_eax              # offset (local)
8D85 14000000 # lea_eax,[ebp+DWORD] %20
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # 'sh_offset'
B8 &string_62 # mov_eax, &string_62
50               #  push_eax              # write_register (function)
B8 &f_write_register #  mov_eax, &f_write_register
81C5 2C000000          #    add_ebp, %44         # ()
FFD0 #  call_eax
81ED 2C000000 # sub_ebp, %44
58                # pop_eax               # ;
 ## blood-elf.c 347
50               #  push_eax              # size (local)
8D85 10000000 # lea_eax,[ebp+DWORD] %16
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # 'sh_size'
B8 &string_63 # mov_eax, &string_63
50               #  push_eax              # write_register (function)
B8 &f_write_register #  mov_eax, &f_write_register
81C5 2C000000          #    add_ebp, %44         # ()
FFD0 #  call_eax
81ED 2C000000 # sub_ebp, %44
58                # pop_eax               # ;
 ## blood-elf.c 348
50               #  push_eax              # link (local)
8D85 0C000000 # lea_eax,[ebp+DWORD] %12
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # 'sh_link'
B8 &string_64 # mov_eax, &string_64
50               #  push_eax              # write_int (function)
B8 &f_write_int #   mov_eax, &f_write_int
81C5 2C000000          #    add_ebp, %44         # ()
FFD0 #  call_eax
81ED 2C000000 # sub_ebp, %44
58                # pop_eax               # ;
 ## blood-elf.c 351
50               #  push_eax              # info (local)
8D85 08000000 # lea_eax,[ebp+DWORD] %8
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # output (global)
B8 &g_output #  mov_eax, &g_output
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # fputs (function)
B8 &f_fputs #   mov_eax, &f_fputs
81C5 2C000000          #    add_ebp, %44         # ()
FFD0 #  call_eax
81ED 2C000000 # sub_ebp, %44
58                # pop_eax               # ;
 ## blood-elf.c 352
50               #  push_eax              # '\t#sh_info\n'
B8 &string_65 # mov_eax, &string_65
50               #  push_eax              # output (global)
B8 &g_output #  mov_eax, &g_output
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # fputs (function)
B8 &f_fputs #   mov_eax, &f_fputs
81C5 2C000000          #    add_ebp, %44         # ()
FFD0 #  call_eax
81ED 2C000000 # sub_ebp, %44
58                # pop_eax               # ;
 ## blood-elf.c 356
50               #  push_eax              # 64
B8 40000000 #   mov_eax, %64
50               #  push_eax              # BITSIZE (global)
B8 &g_BITSIZE # mov_eax, &g_BITSIZE
8B00          # mov_eax,[eax]         # ?
5B                # pop_ebx               # ==
39C3 #  cmp_eax_ebx
0F94C0 #    sete_al
0FB6C0 #    movzx_eax,al
85C0           #    test_eax,eax          # if
58 #    pop_eax
0F84 %_write_section_else1 #    je %_write_section_else1
 ## blood-elf.c 357
 ## blood-elf.c 358
50               #  push_eax              # one_32 (global)
B8 &g_one_32 #  mov_eax, &g_one_32
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # output (global)
B8 &g_output #  mov_eax, &g_output
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # fputs (function)
B8 &f_fputs #   mov_eax, &f_fputs
81C5 2C000000          #    add_ebp, %44         # ()
FFD0 #  call_eax
81ED 2C000000 # sub_ebp, %44
58                # pop_eax               # ;
 ## blood-elf.c 359
50               #  push_eax              # 32
B8 20000000 #   mov_eax, %32
50               #  push_eax              # output (global)
B8 &g_output #  mov_eax, &g_output
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # fputc (function)
B8 &f_fputc #   mov_eax, &f_fputc
81C5 2C000000          #    add_ebp, %44         # ()
FFD0 #  call_eax
81ED 2C000000 # sub_ebp, %44
58                # pop_eax               # ;
 ## blood-elf.c 360
50               #  push_eax              # zero_32 (global)
B8 &g_zero_32 # mov_eax, &g_zero_32
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # output (global)
B8 &g_output #  mov_eax, &g_output
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # fputs (function)
B8 &f_fputs #   mov_eax, &f_fputs
81C5 2C000000          #    add_ebp, %44         # ()
FFD0 #  call_eax
81ED 2C000000 # sub_ebp, %44
58                # pop_eax               # ;
 ## blood-elf.c 361
50               #  push_eax              # '\t#sh_addralign\n'
B8 &string_66 # mov_eax, &string_66
50               #  push_eax              # output (global)
B8 &g_output #  mov_eax, &g_output
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # fputs (function)
B8 &f_fputs #   mov_eax, &f_fputs
81C5 2C000000          #    add_ebp, %44         # ()
FFD0 #  call_eax
81ED 2C000000 # sub_ebp, %44
58                # pop_eax               # ;
E9 %_write_section_else_end1 #  jmp %_write_section_else_end1
:_write_section_else1 #:_write_section_else1
 ## blood-elf.c 364
 ## blood-elf.c 365
50               #  push_eax              # one_32 (global)
B8 &g_one_32 #  mov_eax, &g_one_32
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # output (global)
B8 &g_output #  mov_eax, &g_output
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # fputs (function)
B8 &f_fputs #   mov_eax, &f_fputs
81C5 2C000000          #    add_ebp, %44         # ()
FFD0 #  call_eax
81ED 2C000000 # sub_ebp, %44
58                # pop_eax               # ;
 ## blood-elf.c 366
50               #  push_eax              # '\t#sh_addralign\n'
B8 &string_66 # mov_eax, &string_66
50               #  push_eax              # output (global)
B8 &g_output #  mov_eax, &g_output
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # fputs (function)
B8 &f_fputs #   mov_eax, &f_fputs
81C5 2C000000          #    add_ebp, %44         # ()
FFD0 #  call_eax
81ED 2C000000 # sub_ebp, %44
58                # pop_eax               # ;
:_write_section_else_end1 #:_write_section_else_end1
 ## blood-elf.c 369
50               #  push_eax              # entry (local)
8D85 04000000 # lea_eax,[ebp+DWORD] %4
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # 'sh_entsize'
B8 &string_67 # mov_eax, &string_67
50               #  push_eax              # write_register (function)
B8 &f_write_register #  mov_eax, &f_write_register
81C5 2C000000          #    add_ebp, %44         # ()
FFD0 #  call_eax
81ED 2C000000 # sub_ebp, %44
58                # pop_eax               # ;
50               #  push_eax              # 0
B8 00000000 #   mov_eax, %0
8B5D00          #   mov_ebx,[ebp]         # return
53 #    push_ebx
C3 #    ret
 #
:f_nibble_to_hex #:f_nibble_to_hex
58 #    pop_eax
894500 #    mov_[ebp],eax
58 #    pop_eax
50               #  push_eax              # nibble (local)
8D85 04000000 # lea_eax,[ebp+DWORD] %4
5B                # pop_ebx               # =:
8918 #  mov_[eax],ebx
58 #    pop_eax
 ## blood-elf.c 374
50               #  push_eax              # nibble (local)
8D85 04000000 # lea_eax,[ebp+DWORD] %4
8A00           #    mov_al,[eax]          # ?1
0FB6C0 #    movzx_eax,al
0FBEC0           #  movsx_eax,al          # char
50               #  push_eax              # nibble (local)
8D85 04000000 # lea_eax,[ebp+DWORD] %4
8A00           #    mov_al,[eax]          # ?1
0FB6C0 #    movzx_eax,al
0FBEC0           #  movsx_eax,al          # char
50               #  push_eax              # 10
B8 0A000000 #   mov_eax, %10
5B                # pop_ebx               # <s
39C3 #  cmp_eax_ebx
0F9CC0 #    setl_al
0FB6C0 #    movzx_eax,al
85C0           #    test_eax,eax          # if
58 #    pop_eax
0F84 %_nibble_to_hex_else1 #    je %_nibble_to_hex_else1
50               #  push_eax              # 48
B8 30000000 #   mov_eax, %48
E9 %_nibble_to_hex_else_end1 #  jmp %_nibble_to_hex_else_end1
:_nibble_to_hex_else1 #:_nibble_to_hex_else1
50               #  push_eax              # 65
B8 41000000 #   mov_eax, %65
50               #  push_eax              # 10
B8 0A000000 #   mov_eax, %10
5B                # pop_ebx               # -
29C3 #  sub_ebx,eax
89D8 #  mov_eax,ebx
:_nibble_to_hex_else_end1 #:_nibble_to_hex_else_end1
5B                # pop_ebx               # +
01D8 #  add_eax,ebx
8B5D00          #   mov_ebx,[ebp]         # return
53 #    push_ebx
C3 #    ret
50               #  push_eax              # 0
B8 00000000 #   mov_eax, %0
8B5D00          #   mov_ebx,[ebp]         # return
53 #    push_ebx
C3 #    ret
 #
:f_get_string #:f_get_string
58 #    pop_eax
894500 #    mov_[ebp],eax
58 #    pop_eax
50               #  push_eax              # shift (local)
8D85 04000000 # lea_eax,[ebp+DWORD] %4
5B                # pop_ebx               # =:
8918 #  mov_[eax],ebx
58 #    pop_eax
50               #  push_eax              # ByteMode (local)
8D85 08000000 # lea_eax,[ebp+DWORD] %8
5B                # pop_ebx               # =:
8918 #  mov_[eax],ebx
58 #    pop_eax
50               #  push_eax              # size (local)
8D85 0C000000 # lea_eax,[ebp+DWORD] %12
5B                # pop_ebx               # =:
8918 #  mov_[eax],ebx
58 #    pop_eax
50               #  push_eax              # value (local)
8D85 10000000 # lea_eax,[ebp+DWORD] %16
5B                # pop_ebx               # =:
8918 #  mov_[eax],ebx
58 #    pop_eax
50               #  push_eax              # ch (local)
8D85 14000000 # lea_eax,[ebp+DWORD] %20
50               #  push_eax              # size (local)
8D85 0C000000 # lea_eax,[ebp+DWORD] %12
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # 1
B8 01000000 #   mov_eax, %1
5B                # pop_ebx               # +
01D8 #  add_eax,ebx
50               #  push_eax              # malloc (function)
B8 &f_malloc #  mov_eax, &f_malloc
81C5 18000000          #    add_ebp, %24         # ()
FFD0 #  call_eax
81ED 18000000 # sub_ebp, %24
5B                # pop_ebx               # =
8903 #  mov_[ebx],eax
58                # pop_eax               # ;
 ## blood-elf.c 380
50               #  push_eax              # 0
B8 00000000 #   mov_eax, %0
50               #  push_eax              # ch (local)
8D85 14000000 # lea_eax,[ebp+DWORD] %20
8B00          # mov_eax,[eax]         # ?
5B                # pop_ebx               # !=
39C3 #  cmp_eax_ebx
0F95C0 #    setne_al
0FB6C0 #    movzx_eax,al
50               #  push_eax              # 'Exhausted available memory\n'
B8 &string_68 # mov_eax, &string_68
50               #  push_eax              # require (function)
B8 &f_require # mov_eax, &f_require
81C5 18000000          #    add_ebp, %24         # ()
FFD0 #  call_eax
81ED 18000000 # sub_ebp, %24
58                # pop_eax               # ;
 ## blood-elf.c 381
50               #  push_eax              # i (local)
8D85 18000000 # lea_eax,[ebp+DWORD] %24
50               #  push_eax              # 0
B8 00000000 #   mov_eax, %0
5B                # pop_ebx               # =
8903 #  mov_[ebx],eax
58                # pop_eax               # ;
:_get_string_loop1 #:_get_string_loop1
50               #  push_eax              # i (local)
8D85 18000000 # lea_eax,[ebp+DWORD] %24
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # size (local)
8D85 0C000000 # lea_eax,[ebp+DWORD] %12
8B00          # mov_eax,[eax]         # ?
5B                # pop_ebx               # <s
39C3 #  cmp_eax_ebx
0F9CC0 #    setl_al
0FB6C0 #    movzx_eax,al
85C0           #    test_eax,eax          # !
0F94C0 #    sete_al
0FB6C0 #    movzx_eax,al
85C0           #    test_eax,eax          # if
58 #    pop_eax
0F84 %_get_string_else2 #   je %_get_string_else2
E9 %_get_string_loop_end1 # jmp %_get_string_loop_end1
 ## blood-elf.c 382
:_get_string_else2  #:_get_string_else2 # no else
50               #  push_eax              # byte (local)
8D85 1C000000 # lea_eax,[ebp+DWORD] %28
50               #  push_eax              # value (local)
8D85 10000000 # lea_eax,[ebp+DWORD] %16
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # 4
B8 04000000 #   mov_eax, %4
50               #  push_eax              # i (local)
8D85 18000000 # lea_eax,[ebp+DWORD] %24
8B00          # mov_eax,[eax]         # ?
5B                # pop_ebx               # *
F7E3 #  mul_ebx
89C1            #   mov_ecx,eax           # >>
58 #    pop_eax
D3E8 #  shr_eax,cl
50               #  push_eax              # 255
B8 FF000000 #   mov_eax, %255
5B                # pop_ebx               # &
21D8 #  and_eax,ebx
5B                # pop_ebx               # =1
8803 #  mov_[ebx],al
58                # pop_eax               # ;
 ## blood-elf.c 384
50               #  push_eax              # ch (local)
8D85 14000000 # lea_eax,[ebp+DWORD] %20
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # i (local)
8D85 18000000 # lea_eax,[ebp+DWORD] %24
8B00          # mov_eax,[eax]         # ?
5B                # pop_ebx               # +
01D8 #  add_eax,ebx
50               #  push_eax              # byte (local)
8D85 1C000000 # lea_eax,[ebp+DWORD] %28
8A00           #    mov_al,[eax]          # ?1
0FB6C0 #    movzx_eax,al
50               #  push_eax              # 4
B8 04000000 #   mov_eax, %4
89C1            #   mov_ecx,eax           # >>
58 #    pop_eax
D3E8 #  shr_eax,cl
50               #  push_eax              # 15
B8 0F000000 #   mov_eax, %15
5B                # pop_ebx               # &
21D8 #  and_eax,ebx
50               #  push_eax              # nibble_to_hex (function)
B8 &f_nibble_to_hex #   mov_eax, &f_nibble_to_hex
81C5 20000000          #    add_ebp, %32         # ()
FFD0 #  call_eax
81ED 20000000 # sub_ebp, %32
5B                # pop_ebx               # =1
8803 #  mov_[ebx],al
58                # pop_eax               # ;
 ## blood-elf.c 385
50               #  push_eax              # ch (local)
8D85 14000000 # lea_eax,[ebp+DWORD] %20
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # i (local)
8D85 18000000 # lea_eax,[ebp+DWORD] %24
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # 1
B8 01000000 #   mov_eax, %1
5B                # pop_ebx               # +
01D8 #  add_eax,ebx
5B                # pop_ebx               # +
01D8 #  add_eax,ebx
50               #  push_eax              # byte (local)
8D85 1C000000 # lea_eax,[ebp+DWORD] %28
8A00           #    mov_al,[eax]          # ?1
0FB6C0 #    movzx_eax,al
50               #  push_eax              # 15
B8 0F000000 #   mov_eax, %15
5B                # pop_ebx               # &
21D8 #  and_eax,ebx
50               #  push_eax              # nibble_to_hex (function)
B8 &f_nibble_to_hex #   mov_eax, &f_nibble_to_hex
81C5 20000000          #    add_ebp, %32         # ()
FFD0 #  call_eax
81ED 20000000 # sub_ebp, %32
5B                # pop_ebx               # =1
8803 #  mov_[ebx],al
58                # pop_eax               # ;
50               #  push_eax              # i (local)
8D85 18000000 # lea_eax,[ebp+DWORD] %24
50               #  push_eax              # $ (dup)
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # 2
B8 02000000 #   mov_eax, %2
5B                # pop_ebx               # +
01D8 #  add_eax,ebx
5B                # pop_ebx               # =
8903 #  mov_[ebx],eax
58                # pop_eax               # ;
E9 %_get_string_loop1 # jmp %_get_string_loop1
:_get_string_loop_end1 #:_get_string_loop_end1
 ## blood-elf.c 387
50               #  push_eax              # ch (local)
8D85 14000000 # lea_eax,[ebp+DWORD] %20
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # size (local)
8D85 0C000000 # lea_eax,[ebp+DWORD] %12
8B00          # mov_eax,[eax]         # ?
5B                # pop_ebx               # +
01D8 #  add_eax,ebx
50               #  push_eax              # 0
B8 00000000 #   mov_eax, %0
5B                # pop_ebx               # =1
8803 #  mov_[ebx],al
58                # pop_eax               # ;
 ## blood-elf.c 388
50               #  push_eax              # ch (local)
8D85 14000000 # lea_eax,[ebp+DWORD] %20
8B00          # mov_eax,[eax]         # ?
8B5D00          #   mov_ebx,[ebp]         # return
53 #    push_ebx
C3 #    ret
50               #  push_eax              # 0
B8 00000000 #   mov_eax, %0
8B5D00          #   mov_ebx,[ebp]         # return
53 #    push_ebx
C3 #    ret
 #
:f_setup_string #:f_setup_string
58 #    pop_eax
894500 #    mov_[ebp],eax
58 #    pop_eax
50               #  push_eax              # ByteMode (local)
8D85 04000000 # lea_eax,[ebp+DWORD] %4
5B                # pop_ebx               # =:
8918 #  mov_[eax],ebx
58 #    pop_eax
50               #  push_eax              # number_of_bytes (local)
8D85 08000000 # lea_eax,[ebp+DWORD] %8
5B                # pop_ebx               # =:
8918 #  mov_[eax],ebx
58 #    pop_eax
50               #  push_eax              # value (local)
8D85 0C000000 # lea_eax,[ebp+DWORD] %12
5B                # pop_ebx               # =:
8918 #  mov_[eax],ebx
58 #    pop_eax
 ## blood-elf.c 395
50               #  push_eax              # HEX (global)
B8 &g_HEX # mov_eax, &g_HEX
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # ByteMode (local)
8D85 04000000 # lea_eax,[ebp+DWORD] %4
8B00          # mov_eax,[eax]         # ?
5B                # pop_ebx               # ==
39C3 #  cmp_eax_ebx
0F94C0 #    sete_al
0FB6C0 #    movzx_eax,al
85C0           #    test_eax,eax          # if
58 #    pop_eax
0F84 %_setup_string_else1 # je %_setup_string_else1
 ## blood-elf.c 396
 ## blood-elf.c 397
50               #  push_eax              # size (local)
8D85 14000000 # lea_eax,[ebp+DWORD] %20
50               #  push_eax              # 2
B8 02000000 #   mov_eax, %2
5B                # pop_ebx               # =
8903 #  mov_[ebx],eax
58                # pop_eax               # ;
 ## blood-elf.c 398
50               #  push_eax              # shift (local)
8D85 10000000 # lea_eax,[ebp+DWORD] %16
50               #  push_eax              # 4
B8 04000000 #   mov_eax, %4
5B                # pop_ebx               # =
8903 #  mov_[ebx],eax
58                # pop_eax               # ;
E9 %_setup_string_else_end1 #   jmp %_setup_string_else_end1
:_setup_string_else1 #:_setup_string_else1
 ## blood-elf.c 400
50               #  push_eax              # OCTAL (global)
B8 &g_OCTAL #   mov_eax, &g_OCTAL
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # ByteMode (local)
8D85 04000000 # lea_eax,[ebp+DWORD] %4
8B00          # mov_eax,[eax]         # ?
5B                # pop_ebx               # ==
39C3 #  cmp_eax_ebx
0F94C0 #    sete_al
0FB6C0 #    movzx_eax,al
85C0           #    test_eax,eax          # if
58 #    pop_eax
0F84 %_setup_string_else2 # je %_setup_string_else2
 ## blood-elf.c 401
 ## blood-elf.c 402
50               #  push_eax              # size (local)
8D85 14000000 # lea_eax,[ebp+DWORD] %20
50               #  push_eax              # 3
B8 03000000 #   mov_eax, %3
5B                # pop_ebx               # =
8903 #  mov_[ebx],eax
58                # pop_eax               # ;
 ## blood-elf.c 403
50               #  push_eax              # shift (local)
8D85 10000000 # lea_eax,[ebp+DWORD] %16
50               #  push_eax              # 3
B8 03000000 #   mov_eax, %3
5B                # pop_ebx               # =
8903 #  mov_[ebx],eax
58                # pop_eax               # ;
E9 %_setup_string_else_end2 #   jmp %_setup_string_else_end2
:_setup_string_else2 #:_setup_string_else2
 ## blood-elf.c 405
50               #  push_eax              # BINARY (global)
B8 &g_BINARY #  mov_eax, &g_BINARY
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # ByteMode (local)
8D85 04000000 # lea_eax,[ebp+DWORD] %4
8B00          # mov_eax,[eax]         # ?
5B                # pop_ebx               # ==
39C3 #  cmp_eax_ebx
0F94C0 #    sete_al
0FB6C0 #    movzx_eax,al
85C0           #    test_eax,eax          # if
58 #    pop_eax
0F84 %_setup_string_else3 # je %_setup_string_else3
 ## blood-elf.c 406
 ## blood-elf.c 407
50               #  push_eax              # size (local)
8D85 14000000 # lea_eax,[ebp+DWORD] %20
50               #  push_eax              # 8
B8 08000000 #   mov_eax, %8
5B                # pop_ebx               # =
8903 #  mov_[ebx],eax
58                # pop_eax               # ;
 ## blood-elf.c 408
50               #  push_eax              # shift (local)
8D85 10000000 # lea_eax,[ebp+DWORD] %16
50               #  push_eax              # 1
B8 01000000 #   mov_eax, %1
5B                # pop_ebx               # =
8903 #  mov_[ebx],eax
58                # pop_eax               # ;
E9 %_setup_string_else_end3 #   jmp %_setup_string_else_end3
:_setup_string_else3 #:_setup_string_else3
 ## blood-elf.c 411
 ## blood-elf.c 412
50               #  push_eax              # 'reached impossible mode\n'
B8 &string_69 # mov_eax, &string_69
50               #  push_eax              # stderr (global)
B8 &g_stderr #  mov_eax, &g_stderr
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # fputs (function)
B8 &f_fputs #   mov_eax, &f_fputs
81C5 18000000          #    add_ebp, %24         # ()
FFD0 #  call_eax
81ED 18000000 # sub_ebp, %24
58                # pop_eax               # ;
 ## blood-elf.c 413
50               #  push_eax              # 4294967295
B8 FFFFFFFF #   mov_eax, %4294967295
50               #  push_eax              # exit (function)
B8 &f_exit #    mov_eax, &f_exit
81C5 18000000          #    add_ebp, %24         # ()
FFD0 #  call_eax
81ED 18000000 # sub_ebp, %24
58                # pop_eax               # ;
:_setup_string_else_end3 #:_setup_string_else_end3
:_setup_string_else_end2 #:_setup_string_else_end2
:_setup_string_else_end1 #:_setup_string_else_end1
 ## blood-elf.c 416
50               #  push_eax              # value (local)
8D85 0C000000 # lea_eax,[ebp+DWORD] %12
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # number_of_bytes (local)
8D85 08000000 # lea_eax,[ebp+DWORD] %8
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # size (local)
8D85 14000000 # lea_eax,[ebp+DWORD] %20
8B00          # mov_eax,[eax]         # ?
5B                # pop_ebx               # *
F7E3 #  mul_ebx
50               #  push_eax              # ByteMode (local)
8D85 04000000 # lea_eax,[ebp+DWORD] %4
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # shift (local)
8D85 10000000 # lea_eax,[ebp+DWORD] %16
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # get_string (function)
B8 &f_get_string #  mov_eax, &f_get_string
81C5 18000000          #    add_ebp, %24         # ()
FFD0 #  call_eax
81ED 18000000 # sub_ebp, %24
8B5D00          #   mov_ebx,[ebp]         # return
53 #    push_ebx
C3 #    ret
50               #  push_eax              # 0
B8 00000000 #   mov_eax, %0
8B5D00          #   mov_ebx,[ebp]         # return
53 #    push_ebx
C3 #    ret
 #
:f_setup_strings #:f_setup_strings
58 #    pop_eax
894500 #    mov_[ebp],eax
58 #    pop_eax
50               #  push_eax              # ByteMode (local)
8D85 04000000 # lea_eax,[ebp+DWORD] %4
5B                # pop_ebx               # =:
8918 #  mov_[eax],ebx
58 #    pop_eax
 ## blood-elf.c 421
50               #  push_eax              # zero_8 (global)
B8 &g_zero_8 #  mov_eax, &g_zero_8
50               #  push_eax              # 0
B8 00000000 #   mov_eax, %0
50               #  push_eax              # 1
B8 01000000 #   mov_eax, %1
50               #  push_eax              # ByteMode (local)
8D85 04000000 # lea_eax,[ebp+DWORD] %4
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # setup_string (function)
B8 &f_setup_string #    mov_eax, &f_setup_string
81C5 08000000          #    add_ebp, %8         # ()
FFD0 #  call_eax
81ED 08000000 # sub_ebp, %8
5B                # pop_ebx               # =
8903 #  mov_[ebx],eax
58                # pop_eax               # ;
 ## blood-elf.c 422
50               #  push_eax              # zero_16 (global)
B8 &g_zero_16 # mov_eax, &g_zero_16
50               #  push_eax              # 0
B8 00000000 #   mov_eax, %0
50               #  push_eax              # 2
B8 02000000 #   mov_eax, %2
50               #  push_eax              # ByteMode (local)
8D85 04000000 # lea_eax,[ebp+DWORD] %4
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # setup_string (function)
B8 &f_setup_string #    mov_eax, &f_setup_string
81C5 08000000          #    add_ebp, %8         # ()
FFD0 #  call_eax
81ED 08000000 # sub_ebp, %8
5B                # pop_ebx               # =
8903 #  mov_[ebx],eax
58                # pop_eax               # ;
 ## blood-elf.c 423
50               #  push_eax              # zero_32 (global)
B8 &g_zero_32 # mov_eax, &g_zero_32
50               #  push_eax              # 0
B8 00000000 #   mov_eax, %0
50               #  push_eax              # 4
B8 04000000 #   mov_eax, %4
50               #  push_eax              # ByteMode (local)
8D85 04000000 # lea_eax,[ebp+DWORD] %4
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # setup_string (function)
B8 &f_setup_string #    mov_eax, &f_setup_string
81C5 08000000          #    add_ebp, %8         # ()
FFD0 #  call_eax
81ED 08000000 # sub_ebp, %8
5B                # pop_ebx               # =
8903 #  mov_[ebx],eax
58                # pop_eax               # ;
 ## blood-elf.c 424
50               #  push_eax              # one_16 (global)
B8 &g_one_16 #  mov_eax, &g_one_16
50               #  push_eax              # 1
B8 01000000 #   mov_eax, %1
50               #  push_eax              # 2
B8 02000000 #   mov_eax, %2
50               #  push_eax              # ByteMode (local)
8D85 04000000 # lea_eax,[ebp+DWORD] %4
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # setup_string (function)
B8 &f_setup_string #    mov_eax, &f_setup_string
81C5 08000000          #    add_ebp, %8         # ()
FFD0 #  call_eax
81ED 08000000 # sub_ebp, %8
5B                # pop_ebx               # =
8903 #  mov_[ebx],eax
58                # pop_eax               # ;
 ## blood-elf.c 425
50               #  push_eax              # one_32 (global)
B8 &g_one_32 #  mov_eax, &g_one_32
50               #  push_eax              # 1
B8 01000000 #   mov_eax, %1
50               #  push_eax              # 4
B8 04000000 #   mov_eax, %4
50               #  push_eax              # ByteMode (local)
8D85 04000000 # lea_eax,[ebp+DWORD] %4
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # setup_string (function)
B8 &f_setup_string #    mov_eax, &f_setup_string
81C5 08000000          #    add_ebp, %8         # ()
FFD0 #  call_eax
81ED 08000000 # sub_ebp, %8
5B                # pop_ebx               # =
8903 #  mov_[ebx],eax
58                # pop_eax               # ;
 ## blood-elf.c 426
50               #  push_eax              # two_8 (global)
B8 &g_two_8 #   mov_eax, &g_two_8
50               #  push_eax              # 2
B8 02000000 #   mov_eax, %2
50               #  push_eax              # 1
B8 01000000 #   mov_eax, %1
50               #  push_eax              # ByteMode (local)
8D85 04000000 # lea_eax,[ebp+DWORD] %4
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # setup_string (function)
B8 &f_setup_string #    mov_eax, &f_setup_string
81C5 08000000          #    add_ebp, %8         # ()
FFD0 #  call_eax
81ED 08000000 # sub_ebp, %8
5B                # pop_ebx               # =
8903 #  mov_[ebx],eax
58                # pop_eax               # ;
 ## blood-elf.c 427
50               #  push_eax              # two_32 (global)
B8 &g_two_32 #  mov_eax, &g_two_32
50               #  push_eax              # 2
B8 02000000 #   mov_eax, %2
50               #  push_eax              # 4
B8 04000000 #   mov_eax, %4
50               #  push_eax              # ByteMode (local)
8D85 04000000 # lea_eax,[ebp+DWORD] %4
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # setup_string (function)
B8 &f_setup_string #    mov_eax, &f_setup_string
81C5 08000000          #    add_ebp, %8         # ()
FFD0 #  call_eax
81ED 08000000 # sub_ebp, %8
5B                # pop_ebx               # =
8903 #  mov_[ebx],eax
58                # pop_eax               # ;
 ## blood-elf.c 428
50               #  push_eax              # three_32 (global)
B8 &g_three_32 #    mov_eax, &g_three_32
50               #  push_eax              # 3
B8 03000000 #   mov_eax, %3
50               #  push_eax              # 4
B8 04000000 #   mov_eax, %4
50               #  push_eax              # ByteMode (local)
8D85 04000000 # lea_eax,[ebp+DWORD] %4
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # setup_string (function)
B8 &f_setup_string #    mov_eax, &f_setup_string
81C5 08000000          #    add_ebp, %8         # ()
FFD0 #  call_eax
81ED 08000000 # sub_ebp, %8
5B                # pop_ebx               # =
8903 #  mov_[ebx],eax
58                # pop_eax               # ;
 ## blood-elf.c 429
50               #  push_eax              # six_32 (global)
B8 &g_six_32 #  mov_eax, &g_six_32
50               #  push_eax              # 6
B8 06000000 #   mov_eax, %6
50               #  push_eax              # 4
B8 04000000 #   mov_eax, %4
50               #  push_eax              # ByteMode (local)
8D85 04000000 # lea_eax,[ebp+DWORD] %4
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # setup_string (function)
B8 &f_setup_string #    mov_eax, &f_setup_string
81C5 08000000          #    add_ebp, %8         # ()
FFD0 #  call_eax
81ED 08000000 # sub_ebp, %8
5B                # pop_ebx               # =
8903 #  mov_[ebx],eax
58                # pop_eax               # ;
 ## blood-elf.c 430
50               #  push_eax              # sixteen_32 (global)
B8 &g_sixteen_32 #  mov_eax, &g_sixteen_32
50               #  push_eax              # 16
B8 10000000 #   mov_eax, %16
50               #  push_eax              # 4
B8 04000000 #   mov_eax, %4
50               #  push_eax              # ByteMode (local)
8D85 04000000 # lea_eax,[ebp+DWORD] %4
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # setup_string (function)
B8 &f_setup_string #    mov_eax, &f_setup_string
81C5 08000000          #    add_ebp, %8         # ()
FFD0 #  call_eax
81ED 08000000 # sub_ebp, %8
5B                # pop_ebx               # =
8903 #  mov_[ebx],eax
58                # pop_eax               # ;
 ## blood-elf.c 431
50               #  push_eax              # twentyfour_32 (global)
B8 &g_twentyfour_32 #   mov_eax, &g_twentyfour_32
50               #  push_eax              # 24
B8 18000000 #   mov_eax, %24
50               #  push_eax              # 4
B8 04000000 #   mov_eax, %4
50               #  push_eax              # ByteMode (local)
8D85 04000000 # lea_eax,[ebp+DWORD] %4
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # setup_string (function)
B8 &f_setup_string #    mov_eax, &f_setup_string
81C5 08000000          #    add_ebp, %8         # ()
FFD0 #  call_eax
81ED 08000000 # sub_ebp, %8
5B                # pop_ebx               # =
8903 #  mov_[ebx],eax
58                # pop_eax               # ;
50               #  push_eax              # 0
B8 00000000 #   mov_eax, %0
8B5D00          #   mov_ebx,[ebp]         # return
53 #    push_ebx
C3 #    ret
 #
:f_main #:f_main
58 #    pop_eax
894500 #    mov_[ebp],eax
58 #    pop_eax
50               #  push_eax              # argv (local)
8D85 04000000 # lea_eax,[ebp+DWORD] %4
5B                # pop_ebx               # =:
8918 #  mov_[eax],ebx
58 #    pop_eax
50               #  push_eax              # argc (local)
8D85 08000000 # lea_eax,[ebp+DWORD] %8
5B                # pop_ebx               # =:
8918 #  mov_[eax],ebx
58 #    pop_eax
50               #  push_eax              # __init_globals__ (function)
B8 &f___init_globals__ #    mov_eax, &f___init_globals__
81C5 0C000000          #    add_ebp, %12         # ()
FFD0 #  call_eax
81ED 0C000000 # sub_ebp, %12
50               #  push_eax              # _sys_env (global)
B8 &g__sys_env #    mov_eax, &g__sys_env
50               #  push_eax              # argv (local)
8D85 04000000 # lea_eax,[ebp+DWORD] %4
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # argc (local)
8D85 08000000 # lea_eax,[ebp+DWORD] %8
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # 4
B8 04000000 #   mov_eax, %4
5B                # pop_ebx               # *
F7E3 #  mul_ebx
50               #  push_eax              # 4
B8 04000000 #   mov_eax, %4
5B                # pop_ebx               # +
01D8 #  add_eax,ebx
5B                # pop_ebx               # +
01D8 #  add_eax,ebx
5B                # pop_ebx               # =
8903 #  mov_[ebx],eax
58                # pop_eax               # ;
 ## blood-elf.c 437
50               #  push_eax              # jump_table (global)
B8 &g_jump_table #  mov_eax, &g_jump_table
50               #  push_eax              # 0
B8 00000000 #   mov_eax, %0
5B                # pop_ebx               # =
8903 #  mov_[ebx],eax
58                # pop_eax               # ;
50               #  push_eax              # input (local)
8D85 0C000000 # lea_eax,[ebp+DWORD] %12
50               #  push_eax              # 0
B8 00000000 #   mov_eax, %0
5B                # pop_ebx               # =
8903 #  mov_[ebx],eax
58                # pop_eax               # ;
 ## blood-elf.c 439
50               #  push_eax              # output (global)
B8 &g_output #  mov_eax, &g_output
50               #  push_eax              # stdout (global)
B8 &g_stdout #  mov_eax, &g_stdout
8B00          # mov_eax,[eax]         # ?
5B                # pop_ebx               # =
8903 #  mov_[ebx],eax
58                # pop_eax               # ;
50               #  push_eax              # output_file (local)
8D85 10000000 # lea_eax,[ebp+DWORD] %16
50               #  push_eax              # ''
B8 &string_70 # mov_eax, &string_70
5B                # pop_ebx               # =
8903 #  mov_[ebx],eax
58                # pop_eax               # ;
 ## blood-elf.c 441
50               #  push_eax              # entry (global)
B8 &g_entry #   mov_eax, &g_entry
50               #  push_eax              # ''
B8 &string_70 # mov_eax, &string_70
5B                # pop_ebx               # =
8903 #  mov_[ebx],eax
58                # pop_eax               # ;
 ## blood-elf.c 442
50               #  push_eax              # BITSIZE (global)
B8 &g_BITSIZE # mov_eax, &g_BITSIZE
50               #  push_eax              # 32
B8 20000000 #   mov_eax, %32
5B                # pop_ebx               # =
8903 #  mov_[ebx],eax
58                # pop_eax               # ;
 ## blood-elf.c 443
50               #  push_eax              # count (global)
B8 &g_count #   mov_eax, &g_count
50               #  push_eax              # 1
B8 01000000 #   mov_eax, %1
5B                # pop_ebx               # =
8903 #  mov_[ebx],eax
58                # pop_eax               # ;
 ## blood-elf.c 444
50               #  push_eax              # BigEndian (global)
B8 &g_BigEndian #   mov_eax, &g_BigEndian
50               #  push_eax              # 1
B8 01000000 #   mov_eax, %1
5B                # pop_ebx               # =
8903 #  mov_[ebx],eax
58                # pop_eax               # ;
50               #  push_eax              # ByteMode (local)
8D85 14000000 # lea_eax,[ebp+DWORD] %20
50               #  push_eax              # HEX (global)
B8 &g_HEX # mov_eax, &g_HEX
8B00          # mov_eax,[eax]         # ?
5B                # pop_ebx               # =
8903 #  mov_[ebx],eax
58                # pop_eax               # ;
50               #  push_eax              # set (local)
8D85 18000000 # lea_eax,[ebp+DWORD] %24
50               #  push_eax              # 0
B8 00000000 #   mov_eax, %0
5B                # pop_ebx               # =
8903 #  mov_[ebx],eax
58                # pop_eax               # ;
50               #  push_eax              # option_index (local)
8D85 24000000 # lea_eax,[ebp+DWORD] %36
50               #  push_eax              # 1
B8 01000000 #   mov_eax, %1
5B                # pop_ebx               # =
8903 #  mov_[ebx],eax
58                # pop_eax               # ;
 ## blood-elf.c 451
:_main_loop1 #:_main_loop1
50               #  push_eax              # option_index (local)
8D85 24000000 # lea_eax,[ebp+DWORD] %36
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # argc (local)
8D85 08000000 # lea_eax,[ebp+DWORD] %8
8B00          # mov_eax,[eax]         # ?
5B                # pop_ebx               # <=s
39C3 #  cmp_eax_ebx
0F9EC0 #    setle_al
0FB6C0 #    movzx_eax,al
85C0           #    test_eax,eax          # !
0F94C0 #    sete_al
0FB6C0 #    movzx_eax,al
85C0           #    test_eax,eax          # if
58 #    pop_eax
0F84 %_main_else2 # je %_main_else2
E9 %_main_loop_end1 #   jmp %_main_loop_end1
 ## blood-elf.c 452
 ## blood-elf.c 453
:_main_else2  #:_main_else2 # no else
50               #  push_eax              # 0
B8 00000000 #   mov_eax, %0
50               #  push_eax              # argv (local)
8D85 04000000 # lea_eax,[ebp+DWORD] %4
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # option_index (local)
8D85 24000000 # lea_eax,[ebp+DWORD] %36
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # 4
B8 04000000 #   mov_eax, %4
5B                # pop_ebx               # *
F7E3 #  mul_ebx
5B                # pop_ebx               # +
01D8 #  add_eax,ebx
8B00          # mov_eax,[eax]         # ?
5B                # pop_ebx               # ==
39C3 #  cmp_eax_ebx
0F94C0 #    sete_al
0FB6C0 #    movzx_eax,al
85C0           #    test_eax,eax          # if
58 #    pop_eax
0F84 %_main_else3 # je %_main_else3
 ## blood-elf.c 454
 ## blood-elf.c 455
50               #  push_eax              # option_index (local)
8D85 24000000 # lea_eax,[ebp+DWORD] %36
50               #  push_eax              # option_index (local)
8D85 24000000 # lea_eax,[ebp+DWORD] %36
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # 1
B8 01000000 #   mov_eax, %1
5B                # pop_ebx               # +
01D8 #  add_eax,ebx
5B                # pop_ebx               # =
8903 #  mov_[ebx],eax
58                # pop_eax               # ;
E9 %_main_else_end3 #   jmp %_main_else_end3
:_main_else3 #:_main_else3
 ## blood-elf.c 457
50               #  push_eax              # argv (local)
8D85 04000000 # lea_eax,[ebp+DWORD] %4
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # option_index (local)
8D85 24000000 # lea_eax,[ebp+DWORD] %36
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # 4
B8 04000000 #   mov_eax, %4
5B                # pop_ebx               # *
F7E3 #  mul_ebx
5B                # pop_ebx               # +
01D8 #  add_eax,ebx
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # '-h'
B8 &string_71 # mov_eax, &string_71
50               #  push_eax              # match (function)
B8 &f_match #   mov_eax, &f_match
81C5 28000000          #    add_ebp, %40         # ()
FFD0 #  call_eax
81ED 28000000 # sub_ebp, %40
85C0           #    test_eax,eax          # ||
0F85 %_main_or_end4 #   jne %_main_or_end4
58 #    pop_eax
50               #  push_eax              # argv (local)
8D85 04000000 # lea_eax,[ebp+DWORD] %4
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # option_index (local)
8D85 24000000 # lea_eax,[ebp+DWORD] %36
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # 4
B8 04000000 #   mov_eax, %4
5B                # pop_ebx               # *
F7E3 #  mul_ebx
5B                # pop_ebx               # +
01D8 #  add_eax,ebx
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # '--help'
B8 &string_72 # mov_eax, &string_72
50               #  push_eax              # match (function)
B8 &f_match #   mov_eax, &f_match
81C5 28000000          #    add_ebp, %40         # ()
FFD0 #  call_eax
81ED 28000000 # sub_ebp, %40
:_main_or_end4 #:_main_or_end4
85C0           #    test_eax,eax          # if
58 #    pop_eax
0F84 %_main_else5 # je %_main_else5
 ## blood-elf.c 458
 ## blood-elf.c 459
50               #  push_eax              # 'Usage: '
B8 &string_73 # mov_eax, &string_73
50               #  push_eax              # stderr (global)
B8 &g_stderr #  mov_eax, &g_stderr
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # fputs (function)
B8 &f_fputs #   mov_eax, &f_fputs
81C5 28000000          #    add_ebp, %40         # ()
FFD0 #  call_eax
81ED 28000000 # sub_ebp, %40
58                # pop_eax               # ;
 ## blood-elf.c 460
50               #  push_eax              # argv (local)
8D85 04000000 # lea_eax,[ebp+DWORD] %4
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # 0
B8 00000000 #   mov_eax, %0
50               #  push_eax              # 4
B8 04000000 #   mov_eax, %4
5B                # pop_ebx               # *
F7E3 #  mul_ebx
5B                # pop_ebx               # +
01D8 #  add_eax,ebx
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # stderr (global)
B8 &g_stderr #  mov_eax, &g_stderr
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # fputs (function)
B8 &f_fputs #   mov_eax, &f_fputs
81C5 28000000          #    add_ebp, %40         # ()
FFD0 #  call_eax
81ED 28000000 # sub_ebp, %40
58                # pop_eax               # ;
 ## blood-elf.c 461
50               #  push_eax              # ' --file FILENAME1 {--file FILENAME2} --output FILENAME\n'
B8 &string_74 # mov_eax, &string_74
50               #  push_eax              # stderr (global)
B8 &g_stderr #  mov_eax, &g_stderr
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # fputs (function)
B8 &f_fputs #   mov_eax, &f_fputs
81C5 28000000          #    add_ebp, %40         # ()
FFD0 #  call_eax
81ED 28000000 # sub_ebp, %40
58                # pop_eax               # ;
 ## blood-elf.c 462
50               #  push_eax              # 0
B8 00000000 #   mov_eax, %0
50               #  push_eax              # exit (function)
B8 &f_exit #    mov_eax, &f_exit
81C5 28000000          #    add_ebp, %40         # ()
FFD0 #  call_eax
81ED 28000000 # sub_ebp, %40
58                # pop_eax               # ;
E9 %_main_else_end5 #   jmp %_main_else_end5
:_main_else5 #:_main_else5
 ## blood-elf.c 464
50               #  push_eax              # argv (local)
8D85 04000000 # lea_eax,[ebp+DWORD] %4
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # option_index (local)
8D85 24000000 # lea_eax,[ebp+DWORD] %36
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # 4
B8 04000000 #   mov_eax, %4
5B                # pop_ebx               # *
F7E3 #  mul_ebx
5B                # pop_ebx               # +
01D8 #  add_eax,ebx
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # '--64'
B8 &string_75 # mov_eax, &string_75
50               #  push_eax              # match (function)
B8 &f_match #   mov_eax, &f_match
81C5 28000000          #    add_ebp, %40         # ()
FFD0 #  call_eax
81ED 28000000 # sub_ebp, %40
85C0           #    test_eax,eax          # if
58 #    pop_eax
0F84 %_main_else6 # je %_main_else6
 ## blood-elf.c 465
 ## blood-elf.c 466
50               #  push_eax              # BITSIZE (global)
B8 &g_BITSIZE # mov_eax, &g_BITSIZE
50               #  push_eax              # 64
B8 40000000 #   mov_eax, %64
5B                # pop_ebx               # =
8903 #  mov_[ebx],eax
58                # pop_eax               # ;
 ## blood-elf.c 467
50               #  push_eax              # option_index (local)
8D85 24000000 # lea_eax,[ebp+DWORD] %36
50               #  push_eax              # option_index (local)
8D85 24000000 # lea_eax,[ebp+DWORD] %36
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # 1
B8 01000000 #   mov_eax, %1
5B                # pop_ebx               # +
01D8 #  add_eax,ebx
5B                # pop_ebx               # =
8903 #  mov_[ebx],eax
58                # pop_eax               # ;
E9 %_main_else_end6 #   jmp %_main_else_end6
:_main_else6 #:_main_else6
 ## blood-elf.c 469
50               #  push_eax              # argv (local)
8D85 04000000 # lea_eax,[ebp+DWORD] %4
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # option_index (local)
8D85 24000000 # lea_eax,[ebp+DWORD] %36
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # 4
B8 04000000 #   mov_eax, %4
5B                # pop_ebx               # *
F7E3 #  mul_ebx
5B                # pop_ebx               # +
01D8 #  add_eax,ebx
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # '-f'
B8 &string_76 # mov_eax, &string_76
50               #  push_eax              # match (function)
B8 &f_match #   mov_eax, &f_match
81C5 28000000          #    add_ebp, %40         # ()
FFD0 #  call_eax
81ED 28000000 # sub_ebp, %40
85C0           #    test_eax,eax          # ||
0F85 %_main_or_end7 #   jne %_main_or_end7
58 #    pop_eax
50               #  push_eax              # argv (local)
8D85 04000000 # lea_eax,[ebp+DWORD] %4
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # option_index (local)
8D85 24000000 # lea_eax,[ebp+DWORD] %36
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # 4
B8 04000000 #   mov_eax, %4
5B                # pop_ebx               # *
F7E3 #  mul_ebx
5B                # pop_ebx               # +
01D8 #  add_eax,ebx
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # '--file'
B8 &string_77 # mov_eax, &string_77
50               #  push_eax              # match (function)
B8 &f_match #   mov_eax, &f_match
81C5 28000000          #    add_ebp, %40         # ()
FFD0 #  call_eax
81ED 28000000 # sub_ebp, %40
:_main_or_end7 #:_main_or_end7
85C0           #    test_eax,eax          # if
58 #    pop_eax
0F84 %_main_else8 # je %_main_else8
 ## blood-elf.c 470
 ## blood-elf.c 471
50               #  push_eax              # temp (local)
8D85 1C000000 # lea_eax,[ebp+DWORD] %28
50               #  push_eax              # 1
B8 01000000 #   mov_eax, %1
50               #  push_eax              # 8
B8 08000000 #   mov_eax, %8
50               #  push_eax              # calloc (function)
B8 &f_calloc #  mov_eax, &f_calloc
81C5 28000000          #    add_ebp, %40         # ()
FFD0 #  call_eax
81ED 28000000 # sub_ebp, %40
5B                # pop_ebx               # =
8903 #  mov_[ebx],eax
58                # pop_eax               # ;
 ## blood-elf.c 472
50               #  push_eax              # temp (local)
8D85 1C000000 # lea_eax,[ebp+DWORD] %28
8B00          # mov_eax,[eax]         # ->
81C0 04000000 # add_eax, %4
50               #  push_eax              # argv (local)
8D85 04000000 # lea_eax,[ebp+DWORD] %4
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # option_index (local)
8D85 24000000 # lea_eax,[ebp+DWORD] %36
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # 1
B8 01000000 #   mov_eax, %1
5B                # pop_ebx               # +
01D8 #  add_eax,ebx
50               #  push_eax              # 4
B8 04000000 #   mov_eax, %4
5B                # pop_ebx               # *
F7E3 #  mul_ebx
5B                # pop_ebx               # +
01D8 #  add_eax,ebx
8B00          # mov_eax,[eax]         # ?
5B                # pop_ebx               # =
8903 #  mov_[ebx],eax
58                # pop_eax               # ;
 ## blood-elf.c 473
50               #  push_eax              # temp (local)
8D85 1C000000 # lea_eax,[ebp+DWORD] %28
8B00          # mov_eax,[eax]         # ->
81C0 00000000 # add_eax, %0
50               #  push_eax              # input (local)
8D85 0C000000 # lea_eax,[ebp+DWORD] %12
8B00          # mov_eax,[eax]         # ?
5B                # pop_ebx               # =
8903 #  mov_[ebx],eax
58                # pop_eax               # ;
 ## blood-elf.c 474
50               #  push_eax              # input (local)
8D85 0C000000 # lea_eax,[ebp+DWORD] %12
50               #  push_eax              # temp (local)
8D85 1C000000 # lea_eax,[ebp+DWORD] %28
8B00          # mov_eax,[eax]         # ?
5B                # pop_ebx               # =
8903 #  mov_[ebx],eax
58                # pop_eax               # ;
 ## blood-elf.c 475
50               #  push_eax              # option_index (local)
8D85 24000000 # lea_eax,[ebp+DWORD] %36
50               #  push_eax              # option_index (local)
8D85 24000000 # lea_eax,[ebp+DWORD] %36
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # 2
B8 02000000 #   mov_eax, %2
5B                # pop_ebx               # +
01D8 #  add_eax,ebx
5B                # pop_ebx               # =
8903 #  mov_[ebx],eax
58                # pop_eax               # ;
E9 %_main_else_end8 #   jmp %_main_else_end8
:_main_else8 #:_main_else8
 ## blood-elf.c 477
50               #  push_eax              # argv (local)
8D85 04000000 # lea_eax,[ebp+DWORD] %4
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # option_index (local)
8D85 24000000 # lea_eax,[ebp+DWORD] %36
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # 4
B8 04000000 #   mov_eax, %4
5B                # pop_ebx               # *
F7E3 #  mul_ebx
5B                # pop_ebx               # +
01D8 #  add_eax,ebx
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # '-o'
B8 &string_78 # mov_eax, &string_78
50               #  push_eax              # match (function)
B8 &f_match #   mov_eax, &f_match
81C5 28000000          #    add_ebp, %40         # ()
FFD0 #  call_eax
81ED 28000000 # sub_ebp, %40
85C0           #    test_eax,eax          # ||
0F85 %_main_or_end9 #   jne %_main_or_end9
58 #    pop_eax
50               #  push_eax              # argv (local)
8D85 04000000 # lea_eax,[ebp+DWORD] %4
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # option_index (local)
8D85 24000000 # lea_eax,[ebp+DWORD] %36
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # 4
B8 04000000 #   mov_eax, %4
5B                # pop_ebx               # *
F7E3 #  mul_ebx
5B                # pop_ebx               # +
01D8 #  add_eax,ebx
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # '--output'
B8 &string_79 # mov_eax, &string_79
50               #  push_eax              # match (function)
B8 &f_match #   mov_eax, &f_match
81C5 28000000          #    add_ebp, %40         # ()
FFD0 #  call_eax
81ED 28000000 # sub_ebp, %40
:_main_or_end9 #:_main_or_end9
85C0           #    test_eax,eax          # if
58 #    pop_eax
0F84 %_main_else10 #    je %_main_else10
 ## blood-elf.c 478
 ## blood-elf.c 479
50               #  push_eax              # output_file (local)
8D85 10000000 # lea_eax,[ebp+DWORD] %16
50               #  push_eax              # argv (local)
8D85 04000000 # lea_eax,[ebp+DWORD] %4
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # option_index (local)
8D85 24000000 # lea_eax,[ebp+DWORD] %36
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # 1
B8 01000000 #   mov_eax, %1
5B                # pop_ebx               # +
01D8 #  add_eax,ebx
50               #  push_eax              # 4
B8 04000000 #   mov_eax, %4
5B                # pop_ebx               # *
F7E3 #  mul_ebx
5B                # pop_ebx               # +
01D8 #  add_eax,ebx
8B00          # mov_eax,[eax]         # ?
5B                # pop_ebx               # =
8903 #  mov_[ebx],eax
58                # pop_eax               # ;
 ## blood-elf.c 480
50               #  push_eax              # output (global)
B8 &g_output #  mov_eax, &g_output
50               #  push_eax              # output_file (local)
8D85 10000000 # lea_eax,[ebp+DWORD] %16
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # 'w'
B8 &string_80 # mov_eax, &string_80
50               #  push_eax              # fopen (function)
B8 &f_fopen #   mov_eax, &f_fopen
81C5 28000000          #    add_ebp, %40         # ()
FFD0 #  call_eax
81ED 28000000 # sub_ebp, %40
5B                # pop_ebx               # =
8903 #  mov_[ebx],eax
58                # pop_eax               # ;
 ## blood-elf.c 482
50               #  push_eax              # 0
B8 00000000 #   mov_eax, %0
50               #  push_eax              # output (global)
B8 &g_output #  mov_eax, &g_output
8B00          # mov_eax,[eax]         # ?
5B                # pop_ebx               # ==
39C3 #  cmp_eax_ebx
0F94C0 #    sete_al
0FB6C0 #    movzx_eax,al
85C0           #    test_eax,eax          # if
58 #    pop_eax
0F84 %_main_else11 #    je %_main_else11
 ## blood-elf.c 483
 ## blood-elf.c 484
50               #  push_eax              # 'The file: '
B8 &string_26 # mov_eax, &string_26
50               #  push_eax              # stderr (global)
B8 &g_stderr #  mov_eax, &g_stderr
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # fputs (function)
B8 &f_fputs #   mov_eax, &f_fputs
81C5 28000000          #    add_ebp, %40         # ()
FFD0 #  call_eax
81ED 28000000 # sub_ebp, %40
58                # pop_eax               # ;
 ## blood-elf.c 485
50               #  push_eax              # input (local)
8D85 0C000000 # lea_eax,[ebp+DWORD] %12
8B00          # mov_eax,[eax]         # ->
81C0 04000000 # add_eax, %4
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # stderr (global)
B8 &g_stderr #  mov_eax, &g_stderr
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # fputs (function)
B8 &f_fputs #   mov_eax, &f_fputs
81C5 28000000          #    add_ebp, %40         # ()
FFD0 #  call_eax
81ED 28000000 # sub_ebp, %40
58                # pop_eax               # ;
 ## blood-elf.c 486
50               #  push_eax              # ' can not be opened!\n'
B8 &string_27 # mov_eax, &string_27
50               #  push_eax              # stderr (global)
B8 &g_stderr #  mov_eax, &g_stderr
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # fputs (function)
B8 &f_fputs #   mov_eax, &f_fputs
81C5 28000000          #    add_ebp, %40         # ()
FFD0 #  call_eax
81ED 28000000 # sub_ebp, %40
58                # pop_eax               # ;
 ## blood-elf.c 487
50               #  push_eax              # 4294967295
B8 FFFFFFFF #   mov_eax, %4294967295
50               #  push_eax              # exit (function)
B8 &f_exit #    mov_eax, &f_exit
81C5 28000000          #    add_ebp, %40         # ()
FFD0 #  call_eax
81ED 28000000 # sub_ebp, %40
58                # pop_eax               # ;
 ## blood-elf.c 489
:_main_else11  #:_main_else11 # no else
50               #  push_eax              # option_index (local)
8D85 24000000 # lea_eax,[ebp+DWORD] %36
50               #  push_eax              # option_index (local)
8D85 24000000 # lea_eax,[ebp+DWORD] %36
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # 2
B8 02000000 #   mov_eax, %2
5B                # pop_ebx               # +
01D8 #  add_eax,ebx
5B                # pop_ebx               # =
8903 #  mov_[ebx],eax
58                # pop_eax               # ;
E9 %_main_else_end10 #  jmp %_main_else_end10
:_main_else10 #:_main_else10
 ## blood-elf.c 491
50               #  push_eax              # argv (local)
8D85 04000000 # lea_eax,[ebp+DWORD] %4
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # option_index (local)
8D85 24000000 # lea_eax,[ebp+DWORD] %36
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # 4
B8 04000000 #   mov_eax, %4
5B                # pop_ebx               # *
F7E3 #  mul_ebx
5B                # pop_ebx               # +
01D8 #  add_eax,ebx
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # '-b'
B8 &string_81 # mov_eax, &string_81
50               #  push_eax              # match (function)
B8 &f_match #   mov_eax, &f_match
81C5 28000000          #    add_ebp, %40         # ()
FFD0 #  call_eax
81ED 28000000 # sub_ebp, %40
85C0           #    test_eax,eax          # ||
0F85 %_main_or_end12 #  jne %_main_or_end12
58 #    pop_eax
50               #  push_eax              # argv (local)
8D85 04000000 # lea_eax,[ebp+DWORD] %4
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # option_index (local)
8D85 24000000 # lea_eax,[ebp+DWORD] %36
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # 4
B8 04000000 #   mov_eax, %4
5B                # pop_ebx               # *
F7E3 #  mul_ebx
5B                # pop_ebx               # +
01D8 #  add_eax,ebx
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # '--binary'
B8 &string_82 # mov_eax, &string_82
50               #  push_eax              # match (function)
B8 &f_match #   mov_eax, &f_match
81C5 28000000          #    add_ebp, %40         # ()
FFD0 #  call_eax
81ED 28000000 # sub_ebp, %40
:_main_or_end12 #:_main_or_end12
85C0           #    test_eax,eax          # if
58 #    pop_eax
0F84 %_main_else13 #    je %_main_else13
 ## blood-elf.c 492
 ## blood-elf.c 493
50               #  push_eax              # ByteMode (local)
8D85 14000000 # lea_eax,[ebp+DWORD] %20
50               #  push_eax              # BINARY (global)
B8 &g_BINARY #  mov_eax, &g_BINARY
8B00          # mov_eax,[eax]         # ?
5B                # pop_ebx               # =
8903 #  mov_[ebx],eax
58                # pop_eax               # ;
 ## blood-elf.c 494
50               #  push_eax              # option_index (local)
8D85 24000000 # lea_eax,[ebp+DWORD] %36
50               #  push_eax              # option_index (local)
8D85 24000000 # lea_eax,[ebp+DWORD] %36
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # 1
B8 01000000 #   mov_eax, %1
5B                # pop_ebx               # +
01D8 #  add_eax,ebx
5B                # pop_ebx               # =
8903 #  mov_[ebx],eax
58                # pop_eax               # ;
E9 %_main_else_end13 #  jmp %_main_else_end13
:_main_else13 #:_main_else13
 ## blood-elf.c 496
50               #  push_eax              # argv (local)
8D85 04000000 # lea_eax,[ebp+DWORD] %4
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # option_index (local)
8D85 24000000 # lea_eax,[ebp+DWORD] %36
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # 4
B8 04000000 #   mov_eax, %4
5B                # pop_ebx               # *
F7E3 #  mul_ebx
5B                # pop_ebx               # +
01D8 #  add_eax,ebx
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # '-O'
B8 &string_83 # mov_eax, &string_83
50               #  push_eax              # match (function)
B8 &f_match #   mov_eax, &f_match
81C5 28000000          #    add_ebp, %40         # ()
FFD0 #  call_eax
81ED 28000000 # sub_ebp, %40
85C0           #    test_eax,eax          # ||
0F85 %_main_or_end14 #  jne %_main_or_end14
58 #    pop_eax
50               #  push_eax              # argv (local)
8D85 04000000 # lea_eax,[ebp+DWORD] %4
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # option_index (local)
8D85 24000000 # lea_eax,[ebp+DWORD] %36
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # 4
B8 04000000 #   mov_eax, %4
5B                # pop_ebx               # *
F7E3 #  mul_ebx
5B                # pop_ebx               # +
01D8 #  add_eax,ebx
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # '--octal'
B8 &string_84 # mov_eax, &string_84
50               #  push_eax              # match (function)
B8 &f_match #   mov_eax, &f_match
81C5 28000000          #    add_ebp, %40         # ()
FFD0 #  call_eax
81ED 28000000 # sub_ebp, %40
:_main_or_end14 #:_main_or_end14
85C0           #    test_eax,eax          # if
58 #    pop_eax
0F84 %_main_else15 #    je %_main_else15
 ## blood-elf.c 497
 ## blood-elf.c 498
50               #  push_eax              # ByteMode (local)
8D85 14000000 # lea_eax,[ebp+DWORD] %20
50               #  push_eax              # OCTAL (global)
B8 &g_OCTAL #   mov_eax, &g_OCTAL
8B00          # mov_eax,[eax]         # ?
5B                # pop_ebx               # =
8903 #  mov_[ebx],eax
58                # pop_eax               # ;
 ## blood-elf.c 499
50               #  push_eax              # option_index (local)
8D85 24000000 # lea_eax,[ebp+DWORD] %36
50               #  push_eax              # option_index (local)
8D85 24000000 # lea_eax,[ebp+DWORD] %36
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # 1
B8 01000000 #   mov_eax, %1
5B                # pop_ebx               # +
01D8 #  add_eax,ebx
5B                # pop_ebx               # =
8903 #  mov_[ebx],eax
58                # pop_eax               # ;
E9 %_main_else_end15 #  jmp %_main_else_end15
:_main_else15 #:_main_else15
 ## blood-elf.c 501
50               #  push_eax              # argv (local)
8D85 04000000 # lea_eax,[ebp+DWORD] %4
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # option_index (local)
8D85 24000000 # lea_eax,[ebp+DWORD] %36
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # 4
B8 04000000 #   mov_eax, %4
5B                # pop_ebx               # *
F7E3 #  mul_ebx
5B                # pop_ebx               # +
01D8 #  add_eax,ebx
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # '-X'
B8 &string_85 # mov_eax, &string_85
50               #  push_eax              # match (function)
B8 &f_match #   mov_eax, &f_match
81C5 28000000          #    add_ebp, %40         # ()
FFD0 #  call_eax
81ED 28000000 # sub_ebp, %40
85C0           #    test_eax,eax          # ||
0F85 %_main_or_end16 #  jne %_main_or_end16
58 #    pop_eax
50               #  push_eax              # argv (local)
8D85 04000000 # lea_eax,[ebp+DWORD] %4
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # option_index (local)
8D85 24000000 # lea_eax,[ebp+DWORD] %36
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # 4
B8 04000000 #   mov_eax, %4
5B                # pop_ebx               # *
F7E3 #  mul_ebx
5B                # pop_ebx               # +
01D8 #  add_eax,ebx
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # '--hex'
B8 &string_86 # mov_eax, &string_86
50               #  push_eax              # match (function)
B8 &f_match #   mov_eax, &f_match
81C5 28000000          #    add_ebp, %40         # ()
FFD0 #  call_eax
81ED 28000000 # sub_ebp, %40
:_main_or_end16 #:_main_or_end16
85C0           #    test_eax,eax          # if
58 #    pop_eax
0F84 %_main_else17 #    je %_main_else17
 ## blood-elf.c 502
 ## blood-elf.c 503
50               #  push_eax              # ByteMode (local)
8D85 14000000 # lea_eax,[ebp+DWORD] %20
50               #  push_eax              # HEX (global)
B8 &g_HEX # mov_eax, &g_HEX
8B00          # mov_eax,[eax]         # ?
5B                # pop_ebx               # =
8903 #  mov_[ebx],eax
58                # pop_eax               # ;
 ## blood-elf.c 504
50               #  push_eax              # option_index (local)
8D85 24000000 # lea_eax,[ebp+DWORD] %36
50               #  push_eax              # option_index (local)
8D85 24000000 # lea_eax,[ebp+DWORD] %36
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # 1
B8 01000000 #   mov_eax, %1
5B                # pop_ebx               # +
01D8 #  add_eax,ebx
5B                # pop_ebx               # =
8903 #  mov_[ebx],eax
58                # pop_eax               # ;
E9 %_main_else_end17 #  jmp %_main_else_end17
:_main_else17 #:_main_else17
 ## blood-elf.c 506
50               #  push_eax              # argv (local)
8D85 04000000 # lea_eax,[ebp+DWORD] %4
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # option_index (local)
8D85 24000000 # lea_eax,[ebp+DWORD] %36
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # 4
B8 04000000 #   mov_eax, %4
5B                # pop_ebx               # *
F7E3 #  mul_ebx
5B                # pop_ebx               # +
01D8 #  add_eax,ebx
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # '--big-endian'
B8 &string_87 # mov_eax, &string_87
50               #  push_eax              # match (function)
B8 &f_match #   mov_eax, &f_match
81C5 28000000          #    add_ebp, %40         # ()
FFD0 #  call_eax
81ED 28000000 # sub_ebp, %40
85C0           #    test_eax,eax          # if
58 #    pop_eax
0F84 %_main_else18 #    je %_main_else18
 ## blood-elf.c 507
 ## blood-elf.c 508
50               #  push_eax              # BigEndian (global)
B8 &g_BigEndian #   mov_eax, &g_BigEndian
50               #  push_eax              # 1
B8 01000000 #   mov_eax, %1
5B                # pop_ebx               # =
8903 #  mov_[ebx],eax
58                # pop_eax               # ;
 ## blood-elf.c 509
50               #  push_eax              # set (local)
8D85 18000000 # lea_eax,[ebp+DWORD] %24
50               #  push_eax              # 1
B8 01000000 #   mov_eax, %1
5B                # pop_ebx               # =
8903 #  mov_[ebx],eax
58                # pop_eax               # ;
 ## blood-elf.c 510
50               #  push_eax              # option_index (local)
8D85 24000000 # lea_eax,[ebp+DWORD] %36
50               #  push_eax              # option_index (local)
8D85 24000000 # lea_eax,[ebp+DWORD] %36
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # 1
B8 01000000 #   mov_eax, %1
5B                # pop_ebx               # +
01D8 #  add_eax,ebx
5B                # pop_ebx               # =
8903 #  mov_[ebx],eax
58                # pop_eax               # ;
E9 %_main_else_end18 #  jmp %_main_else_end18
:_main_else18 #:_main_else18
 ## blood-elf.c 512
50               #  push_eax              # argv (local)
8D85 04000000 # lea_eax,[ebp+DWORD] %4
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # option_index (local)
8D85 24000000 # lea_eax,[ebp+DWORD] %36
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # 4
B8 04000000 #   mov_eax, %4
5B                # pop_ebx               # *
F7E3 #  mul_ebx
5B                # pop_ebx               # +
01D8 #  add_eax,ebx
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # '--little-endian'
B8 &string_88 # mov_eax, &string_88
50               #  push_eax              # match (function)
B8 &f_match #   mov_eax, &f_match
81C5 28000000          #    add_ebp, %40         # ()
FFD0 #  call_eax
81ED 28000000 # sub_ebp, %40
85C0           #    test_eax,eax          # if
58 #    pop_eax
0F84 %_main_else19 #    je %_main_else19
 ## blood-elf.c 513
 ## blood-elf.c 514
50               #  push_eax              # BigEndian (global)
B8 &g_BigEndian #   mov_eax, &g_BigEndian
50               #  push_eax              # 0
B8 00000000 #   mov_eax, %0
5B                # pop_ebx               # =
8903 #  mov_[ebx],eax
58                # pop_eax               # ;
 ## blood-elf.c 515
50               #  push_eax              # set (local)
8D85 18000000 # lea_eax,[ebp+DWORD] %24
50               #  push_eax              # 1
B8 01000000 #   mov_eax, %1
5B                # pop_ebx               # =
8903 #  mov_[ebx],eax
58                # pop_eax               # ;
 ## blood-elf.c 516
50               #  push_eax              # option_index (local)
8D85 24000000 # lea_eax,[ebp+DWORD] %36
50               #  push_eax              # option_index (local)
8D85 24000000 # lea_eax,[ebp+DWORD] %36
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # 1
B8 01000000 #   mov_eax, %1
5B                # pop_ebx               # +
01D8 #  add_eax,ebx
5B                # pop_ebx               # =
8903 #  mov_[ebx],eax
58                # pop_eax               # ;
E9 %_main_else_end19 #  jmp %_main_else_end19
:_main_else19 #:_main_else19
 ## blood-elf.c 518
50               #  push_eax              # argv (local)
8D85 04000000 # lea_eax,[ebp+DWORD] %4
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # option_index (local)
8D85 24000000 # lea_eax,[ebp+DWORD] %36
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # 4
B8 04000000 #   mov_eax, %4
5B                # pop_ebx               # *
F7E3 #  mul_ebx
5B                # pop_ebx               # +
01D8 #  add_eax,ebx
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # '-V'
B8 &string_89 # mov_eax, &string_89
50               #  push_eax              # match (function)
B8 &f_match #   mov_eax, &f_match
81C5 28000000          #    add_ebp, %40         # ()
FFD0 #  call_eax
81ED 28000000 # sub_ebp, %40
85C0           #    test_eax,eax          # ||
0F85 %_main_or_end20 #  jne %_main_or_end20
58 #    pop_eax
50               #  push_eax              # argv (local)
8D85 04000000 # lea_eax,[ebp+DWORD] %4
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # option_index (local)
8D85 24000000 # lea_eax,[ebp+DWORD] %36
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # 4
B8 04000000 #   mov_eax, %4
5B                # pop_ebx               # *
F7E3 #  mul_ebx
5B                # pop_ebx               # +
01D8 #  add_eax,ebx
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # '--version'
B8 &string_90 # mov_eax, &string_90
50               #  push_eax              # match (function)
B8 &f_match #   mov_eax, &f_match
81C5 28000000          #    add_ebp, %40         # ()
FFD0 #  call_eax
81ED 28000000 # sub_ebp, %40
:_main_or_end20 #:_main_or_end20
85C0           #    test_eax,eax          # if
58 #    pop_eax
0F84 %_main_else21 #    je %_main_else21
 ## blood-elf.c 519
 ## blood-elf.c 520
50               #  push_eax              # 'blood-elf 2.0.1\n(Basically Launches Odd Object Dump ExecutabLe Files\n'
B8 &string_91 # mov_eax, &string_91
50               #  push_eax              # stdout (global)
B8 &g_stdout #  mov_eax, &g_stdout
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # fputs (function)
B8 &f_fputs #   mov_eax, &f_fputs
81C5 28000000          #    add_ebp, %40         # ()
FFD0 #  call_eax
81ED 28000000 # sub_ebp, %40
58                # pop_eax               # ;
 ## blood-elf.c 521
50               #  push_eax              # 0
B8 00000000 #   mov_eax, %0
50               #  push_eax              # exit (function)
B8 &f_exit #    mov_eax, &f_exit
81C5 28000000          #    add_ebp, %40         # ()
FFD0 #  call_eax
81ED 28000000 # sub_ebp, %40
58                # pop_eax               # ;
E9 %_main_else_end21 #  jmp %_main_else_end21
:_main_else21 #:_main_else21
 ## blood-elf.c 523
50               #  push_eax              # argv (local)
8D85 04000000 # lea_eax,[ebp+DWORD] %4
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # option_index (local)
8D85 24000000 # lea_eax,[ebp+DWORD] %36
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # 4
B8 04000000 #   mov_eax, %4
5B                # pop_ebx               # *
F7E3 #  mul_ebx
5B                # pop_ebx               # +
01D8 #  add_eax,ebx
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # '--entry'
B8 &string_92 # mov_eax, &string_92
50               #  push_eax              # match (function)
B8 &f_match #   mov_eax, &f_match
81C5 28000000          #    add_ebp, %40         # ()
FFD0 #  call_eax
81ED 28000000 # sub_ebp, %40
85C0           #    test_eax,eax          # if
58 #    pop_eax
0F84 %_main_else22 #    je %_main_else22
 ## blood-elf.c 524
 ## blood-elf.c 525
50               #  push_eax              # head (local)
8D85 20000000 # lea_eax,[ebp+DWORD] %32
50               #  push_eax              # 1
B8 01000000 #   mov_eax, %1
50               #  push_eax              # 8
B8 08000000 #   mov_eax, %8
50               #  push_eax              # calloc (function)
B8 &f_calloc #  mov_eax, &f_calloc
81C5 28000000          #    add_ebp, %40         # ()
FFD0 #  call_eax
81ED 28000000 # sub_ebp, %40
5B                # pop_ebx               # =
8903 #  mov_[ebx],eax
58                # pop_eax               # ;
 ## blood-elf.c 527
50               #  push_eax              # head (local)
8D85 20000000 # lea_eax,[ebp+DWORD] %32
8B00          # mov_eax,[eax]         # ->
81C0 00000000 # add_eax, %0
50               #  push_eax              # jump_table (global)
B8 &g_jump_table #  mov_eax, &g_jump_table
8B00          # mov_eax,[eax]         # ?
5B                # pop_ebx               # =
8903 #  mov_[ebx],eax
58                # pop_eax               # ;
 ## blood-elf.c 528
50               #  push_eax              # jump_table (global)
B8 &g_jump_table #  mov_eax, &g_jump_table
50               #  push_eax              # head (local)
8D85 20000000 # lea_eax,[ebp+DWORD] %32
8B00          # mov_eax,[eax]         # ?
5B                # pop_ebx               # =
8903 #  mov_[ebx],eax
58                # pop_eax               # ;
 ## blood-elf.c 529
50               #  push_eax              # jump_table (global)
B8 &g_jump_table #  mov_eax, &g_jump_table
8B00          # mov_eax,[eax]         # ->
81C0 04000000 # add_eax, %4
50               #  push_eax              # argv (local)
8D85 04000000 # lea_eax,[ebp+DWORD] %4
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # option_index (local)
8D85 24000000 # lea_eax,[ebp+DWORD] %36
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # 1
B8 01000000 #   mov_eax, %1
5B                # pop_ebx               # +
01D8 #  add_eax,ebx
50               #  push_eax              # 4
B8 04000000 #   mov_eax, %4
5B                # pop_ebx               # *
F7E3 #  mul_ebx
5B                # pop_ebx               # +
01D8 #  add_eax,ebx
8B00          # mov_eax,[eax]         # ?
5B                # pop_ebx               # =
8903 #  mov_[ebx],eax
58                # pop_eax               # ;
 ## blood-elf.c 531
50               #  push_eax              # entry (global)
B8 &g_entry #   mov_eax, &g_entry
50               #  push_eax              # argv (local)
8D85 04000000 # lea_eax,[ebp+DWORD] %4
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # option_index (local)
8D85 24000000 # lea_eax,[ebp+DWORD] %36
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # 1
B8 01000000 #   mov_eax, %1
5B                # pop_ebx               # +
01D8 #  add_eax,ebx
50               #  push_eax              # 4
B8 04000000 #   mov_eax, %4
5B                # pop_ebx               # *
F7E3 #  mul_ebx
5B                # pop_ebx               # +
01D8 #  add_eax,ebx
8B00          # mov_eax,[eax]         # ?
5B                # pop_ebx               # =
8903 #  mov_[ebx],eax
58                # pop_eax               # ;
 ## blood-elf.c 532
50               #  push_eax              # option_index (local)
8D85 24000000 # lea_eax,[ebp+DWORD] %36
50               #  push_eax              # option_index (local)
8D85 24000000 # lea_eax,[ebp+DWORD] %36
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # 2
B8 02000000 #   mov_eax, %2
5B                # pop_ebx               # +
01D8 #  add_eax,ebx
5B                # pop_ebx               # =
8903 #  mov_[ebx],eax
58                # pop_eax               # ;
 ## blood-elf.c 533
50               #  push_eax              # count (global)
B8 &g_count #   mov_eax, &g_count
50               #  push_eax              # count (global)
B8 &g_count #   mov_eax, &g_count
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # 1
B8 01000000 #   mov_eax, %1
5B                # pop_ebx               # +
01D8 #  add_eax,ebx
5B                # pop_ebx               # =
8903 #  mov_[ebx],eax
58                # pop_eax               # ;
E9 %_main_else_end22 #  jmp %_main_else_end22
:_main_else22 #:_main_else22
 ## blood-elf.c 536
 ## blood-elf.c 537
50               #  push_eax              # 'Unknown option\n'
B8 &string_93 # mov_eax, &string_93
50               #  push_eax              # stderr (global)
B8 &g_stderr #  mov_eax, &g_stderr
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # fputs (function)
B8 &f_fputs #   mov_eax, &f_fputs
81C5 28000000          #    add_ebp, %40         # ()
FFD0 #  call_eax
81ED 28000000 # sub_ebp, %40
58                # pop_eax               # ;
 ## blood-elf.c 538
50               #  push_eax              # 4294967295
B8 FFFFFFFF #   mov_eax, %4294967295
50               #  push_eax              # exit (function)
B8 &f_exit #    mov_eax, &f_exit
81C5 28000000          #    add_ebp, %40         # ()
FFD0 #  call_eax
81ED 28000000 # sub_ebp, %40
58                # pop_eax               # ;
:_main_else_end22 #:_main_else_end22
:_main_else_end21 #:_main_else_end21
:_main_else_end19 #:_main_else_end19
:_main_else_end18 #:_main_else_end18
:_main_else_end17 #:_main_else_end17
:_main_else_end15 #:_main_else_end15
:_main_else_end13 #:_main_else_end13
:_main_else_end10 #:_main_else_end10
:_main_else_end8 #:_main_else_end8
:_main_else_end6 #:_main_else_end6
:_main_else_end5 #:_main_else_end5
:_main_else_end3 #:_main_else_end3
E9 %_main_loop1 #   jmp %_main_loop1
:_main_loop_end1 #:_main_loop_end1
 ## blood-elf.c 543
50               #  push_eax              # 0
B8 00000000 #   mov_eax, %0
50               #  push_eax              # input (local)
8D85 0C000000 # lea_eax,[ebp+DWORD] %12
8B00          # mov_eax,[eax]         # ?
5B                # pop_ebx               # ==
39C3 #  cmp_eax_ebx
0F94C0 #    sete_al
0FB6C0 #    movzx_eax,al
85C0           #    test_eax,eax          # if
58 #    pop_eax
0F84 %_main_else23 #    je %_main_else23
 ## blood-elf.c 544
 ## blood-elf.c 545
50               #  push_eax              # 4294967295
B8 FFFFFFFF #   mov_eax, %4294967295
8B5D00          #   mov_ebx,[ebp]         # return
53 #    push_ebx
C3 #    ret
 ## blood-elf.c 549
:_main_else23  #:_main_else23 # no else
50               #  push_eax              # set (local)
8D85 18000000 # lea_eax,[ebp+DWORD] %24
8B00          # mov_eax,[eax]         # ?
85C0           #    test_eax,eax          # !
0F94C0 #    sete_al
0FB6C0 #    movzx_eax,al
85C0           #    test_eax,eax          # if
58 #    pop_eax
0F84 %_main_else24 #    je %_main_else24
 ## blood-elf.c 550
 ## blood-elf.c 551
50               #  push_eax              # 'either --little-endian or --big-endian MUST be set\n'
B8 &string_94 # mov_eax, &string_94
50               #  push_eax              # stderr (global)
B8 &g_stderr #  mov_eax, &g_stderr
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # fputs (function)
B8 &f_fputs #   mov_eax, &f_fputs
81C5 28000000          #    add_ebp, %40         # ()
FFD0 #  call_eax
81ED 28000000 # sub_ebp, %40
58                # pop_eax               # ;
 ## blood-elf.c 552
50               #  push_eax              # 4294967295
B8 FFFFFFFF #   mov_eax, %4294967295
8B5D00          #   mov_ebx,[ebp]         # return
53 #    push_ebx
C3 #    ret
 ## blood-elf.c 556
:_main_else24  #:_main_else24 # no else
50               #  push_eax              # ByteMode (local)
8D85 14000000 # lea_eax,[ebp+DWORD] %20
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # setup_strings (function)
B8 &f_setup_strings #   mov_eax, &f_setup_strings
81C5 28000000          #    add_ebp, %40         # ()
FFD0 #  call_eax
81ED 28000000 # sub_ebp, %40
58                # pop_eax               # ;
 ## blood-elf.c 559
50               #  push_eax              # input (local)
8D85 0C000000 # lea_eax,[ebp+DWORD] %12
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # first_pass (function)
B8 &f_first_pass #  mov_eax, &f_first_pass
81C5 28000000          #    add_ebp, %40         # ()
FFD0 #  call_eax
81ED 28000000 # sub_ebp, %40
58                # pop_eax               # ;
 ## blood-elf.c 562
50               #  push_eax              # jump_table (global)
B8 &g_jump_table #  mov_eax, &g_jump_table
50               #  push_eax              # jump_table (global)
B8 &g_jump_table #  mov_eax, &g_jump_table
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # reverse_list (function)
B8 &f_reverse_list #    mov_eax, &f_reverse_list
81C5 28000000          #    add_ebp, %40         # ()
FFD0 #  call_eax
81ED 28000000 # sub_ebp, %40
5B                # pop_ebx               # =
8903 #  mov_[ebx],eax
58                # pop_eax               # ;
 ## blood-elf.c 566
50               #  push_eax              # '# Generated sections\n:ELF_shstr\n'
B8 &string_95 # mov_eax, &string_95
50               #  push_eax              # output (global)
B8 &g_output #  mov_eax, &g_output
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # fputs (function)
B8 &f_fputs #   mov_eax, &f_fputs
81C5 28000000          #    add_ebp, %40         # ()
FFD0 #  call_eax
81ED 28000000 # sub_ebp, %40
58                # pop_eax               # ;
 ## blood-elf.c 567
50               #  push_eax              # zero_8 (global)
B8 &g_zero_8 #  mov_eax, &g_zero_8
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # output (global)
B8 &g_output #  mov_eax, &g_output
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # fputs (function)
B8 &f_fputs #   mov_eax, &f_fputs
81C5 28000000          #    add_ebp, %40         # ()
FFD0 #  call_eax
81ED 28000000 # sub_ebp, %40
58                # pop_eax               # ;
 ## blood-elf.c 568
50               #  push_eax              # '\t# NULL\n'
B8 &string_96 # mov_eax, &string_96
50               #  push_eax              # output (global)
B8 &g_output #  mov_eax, &g_output
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # fputs (function)
B8 &f_fputs #   mov_eax, &f_fputs
81C5 28000000          #    add_ebp, %40         # ()
FFD0 #  call_eax
81ED 28000000 # sub_ebp, %40
58                # pop_eax               # ;
 ## blood-elf.c 569
50               #  push_eax              # ':ELF_shstr__text\n\".text\"\n'
B8 &string_97 # mov_eax, &string_97
50               #  push_eax              # output (global)
B8 &g_output #  mov_eax, &g_output
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # fputs (function)
B8 &f_fputs #   mov_eax, &f_fputs
81C5 28000000          #    add_ebp, %40         # ()
FFD0 #  call_eax
81ED 28000000 # sub_ebp, %40
58                # pop_eax               # ;
 ## blood-elf.c 570
50               #  push_eax              # ':ELF_shstr__shstr\n\".shstrtab\"\n'
B8 &string_98 # mov_eax, &string_98
50               #  push_eax              # output (global)
B8 &g_output #  mov_eax, &g_output
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # fputs (function)
B8 &f_fputs #   mov_eax, &f_fputs
81C5 28000000          #    add_ebp, %40         # ()
FFD0 #  call_eax
81ED 28000000 # sub_ebp, %40
58                # pop_eax               # ;
 ## blood-elf.c 571
50               #  push_eax              # ':ELF_shstr__sym\n\".symtab\"\n'
B8 &string_99 # mov_eax, &string_99
50               #  push_eax              # output (global)
B8 &g_output #  mov_eax, &g_output
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # fputs (function)
B8 &f_fputs #   mov_eax, &f_fputs
81C5 28000000          #    add_ebp, %40         # ()
FFD0 #  call_eax
81ED 28000000 # sub_ebp, %40
58                # pop_eax               # ;
 ## blood-elf.c 572
50               #  push_eax              # ':ELF_shstr__str\n\".strtab\"\n'
B8 &string_100 #    mov_eax, &string_100
50               #  push_eax              # output (global)
B8 &g_output #  mov_eax, &g_output
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # fputs (function)
B8 &f_fputs #   mov_eax, &f_fputs
81C5 28000000          #    add_ebp, %40         # ()
FFD0 #  call_eax
81ED 28000000 # sub_ebp, %40
58                # pop_eax               # ;
 ## blood-elf.c 575
50               #  push_eax              # ':ELF_section_headers'
B8 &string_101 #    mov_eax, &string_101
50               #  push_eax              # zero_32 (global)
B8 &g_zero_32 # mov_eax, &g_zero_32
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # zero_32 (global)
B8 &g_zero_32 # mov_eax, &g_zero_32
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # zero_32 (global)
B8 &g_zero_32 # mov_eax, &g_zero_32
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # zero_32 (global)
B8 &g_zero_32 # mov_eax, &g_zero_32
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # zero_32 (global)
B8 &g_zero_32 # mov_eax, &g_zero_32
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # zero_32 (global)
B8 &g_zero_32 # mov_eax, &g_zero_32
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # zero_32 (global)
B8 &g_zero_32 # mov_eax, &g_zero_32
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # zero_32 (global)
B8 &g_zero_32 # mov_eax, &g_zero_32
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # zero_32 (global)
B8 &g_zero_32 # mov_eax, &g_zero_32
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # write_section (function)
B8 &f_write_section #   mov_eax, &f_write_section
81C5 28000000          #    add_ebp, %40         # ()
FFD0 #  call_eax
81ED 28000000 # sub_ebp, %40
58                # pop_eax               # ;
 ## blood-elf.c 576
50               #  push_eax              # ':ELF_section_header_text'
B8 &string_102 #    mov_eax, &string_102
50               #  push_eax              # '%ELF_shstr__text>ELF_shstr'
B8 &string_103 #    mov_eax, &string_103
50               #  push_eax              # one_32 (global)
B8 &g_one_32 #  mov_eax, &g_one_32
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # six_32 (global)
B8 &g_six_32 #  mov_eax, &g_six_32
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # '&ELF_text'
B8 &string_104 #    mov_eax, &string_104
50               #  push_eax              # '%ELF_text>ELF_base'
B8 &string_105 #    mov_eax, &string_105
50               #  push_eax              # '%ELF_data>ELF_text'
B8 &string_106 #    mov_eax, &string_106
50               #  push_eax              # zero_32 (global)
B8 &g_zero_32 # mov_eax, &g_zero_32
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # zero_32 (global)
B8 &g_zero_32 # mov_eax, &g_zero_32
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # zero_32 (global)
B8 &g_zero_32 # mov_eax, &g_zero_32
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # write_section (function)
B8 &f_write_section #   mov_eax, &f_write_section
81C5 28000000          #    add_ebp, %40         # ()
FFD0 #  call_eax
81ED 28000000 # sub_ebp, %40
58                # pop_eax               # ;
 ## blood-elf.c 577
50               #  push_eax              # ':ELF_section_header_shstr'
B8 &string_107 #    mov_eax, &string_107
50               #  push_eax              # '%ELF_shstr__shstr>ELF_shstr'
B8 &string_108 #    mov_eax, &string_108
50               #  push_eax              # three_32 (global)
B8 &g_three_32 #    mov_eax, &g_three_32
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # zero_32 (global)
B8 &g_zero_32 # mov_eax, &g_zero_32
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # '&ELF_shstr'
B8 &string_109 #    mov_eax, &string_109
50               #  push_eax              # '%ELF_shstr>ELF_base'
B8 &string_110 #    mov_eax, &string_110
50               #  push_eax              # '%ELF_section_headers>ELF_shstr'
B8 &string_111 #    mov_eax, &string_111
50               #  push_eax              # zero_32 (global)
B8 &g_zero_32 # mov_eax, &g_zero_32
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # zero_32 (global)
B8 &g_zero_32 # mov_eax, &g_zero_32
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # zero_32 (global)
B8 &g_zero_32 # mov_eax, &g_zero_32
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # write_section (function)
B8 &f_write_section #   mov_eax, &f_write_section
81C5 28000000          #    add_ebp, %40         # ()
FFD0 #  call_eax
81ED 28000000 # sub_ebp, %40
58                # pop_eax               # ;
 ## blood-elf.c 578
50               #  push_eax              # ':ELF_section_header_str'
B8 &string_112 #    mov_eax, &string_112
50               #  push_eax              # '%ELF_shstr__str>ELF_shstr'
B8 &string_113 #    mov_eax, &string_113
50               #  push_eax              # three_32 (global)
B8 &g_three_32 #    mov_eax, &g_three_32
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # zero_32 (global)
B8 &g_zero_32 # mov_eax, &g_zero_32
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # '&ELF_str'
B8 &string_114 #    mov_eax, &string_114
50               #  push_eax              # '%ELF_str>ELF_base'
B8 &string_115 #    mov_eax, &string_115
50               #  push_eax              # '%ELF_sym>ELF_str'
B8 &string_116 #    mov_eax, &string_116
50               #  push_eax              # zero_32 (global)
B8 &g_zero_32 # mov_eax, &g_zero_32
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # zero_32 (global)
B8 &g_zero_32 # mov_eax, &g_zero_32
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # zero_32 (global)
B8 &g_zero_32 # mov_eax, &g_zero_32
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # write_section (function)
B8 &f_write_section #   mov_eax, &f_write_section
81C5 28000000          #    add_ebp, %40         # ()
FFD0 #  call_eax
81ED 28000000 # sub_ebp, %40
58                # pop_eax               # ;
 ## blood-elf.c 579
50               #  push_eax              # 64
B8 40000000 #   mov_eax, %64
50               #  push_eax              # BITSIZE (global)
B8 &g_BITSIZE # mov_eax, &g_BITSIZE
8B00          # mov_eax,[eax]         # ?
5B                # pop_ebx               # ==
39C3 #  cmp_eax_ebx
0F94C0 #    sete_al
0FB6C0 #    movzx_eax,al
85C0           #    test_eax,eax          # if
58 #    pop_eax
0F84 %_main_else25 #    je %_main_else25
 ## blood-elf.c 579
50               #  push_eax              # ':ELF_section_header_sym'
B8 &string_117 #    mov_eax, &string_117
50               #  push_eax              # '%ELF_shstr__sym>ELF_shstr'
B8 &string_118 #    mov_eax, &string_118
50               #  push_eax              # two_32 (global)
B8 &g_two_32 #  mov_eax, &g_two_32
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # zero_32 (global)
B8 &g_zero_32 # mov_eax, &g_zero_32
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # '&ELF_sym'
B8 &string_119 #    mov_eax, &string_119
50               #  push_eax              # '%ELF_sym>ELF_base'
B8 &string_120 #    mov_eax, &string_120
50               #  push_eax              # '%ELF_end>ELF_sym'
B8 &string_121 #    mov_eax, &string_121
50               #  push_eax              # three_32 (global)
B8 &g_three_32 #    mov_eax, &g_three_32
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # count (global)
B8 &g_count #   mov_eax, &g_count
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # 4
B8 04000000 #   mov_eax, %4
50               #  push_eax              # ByteMode (local)
8D85 14000000 # lea_eax,[ebp+DWORD] %20
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # setup_string (function)
B8 &f_setup_string #    mov_eax, &f_setup_string
81C5 28000000          #    add_ebp, %40         # ()
FFD0 #  call_eax
81ED 28000000 # sub_ebp, %40
50               #  push_eax              # twentyfour_32 (global)
B8 &g_twentyfour_32 #   mov_eax, &g_twentyfour_32
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # write_section (function)
B8 &f_write_section #   mov_eax, &f_write_section
81C5 28000000          #    add_ebp, %40         # ()
FFD0 #  call_eax
81ED 28000000 # sub_ebp, %40
58                # pop_eax               # ;
E9 %_main_else_end25 #  jmp %_main_else_end25
:_main_else25 #:_main_else25
 ## blood-elf.c 580
50               #  push_eax              # ':ELF_section_header_sym'
B8 &string_117 #    mov_eax, &string_117
50               #  push_eax              # '%ELF_shstr__sym>ELF_shstr'
B8 &string_118 #    mov_eax, &string_118
50               #  push_eax              # two_32 (global)
B8 &g_two_32 #  mov_eax, &g_two_32
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # zero_32 (global)
B8 &g_zero_32 # mov_eax, &g_zero_32
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # '&ELF_sym'
B8 &string_119 #    mov_eax, &string_119
50               #  push_eax              # '%ELF_sym>ELF_base'
B8 &string_120 #    mov_eax, &string_120
50               #  push_eax              # '%ELF_end>ELF_sym'
B8 &string_121 #    mov_eax, &string_121
50               #  push_eax              # three_32 (global)
B8 &g_three_32 #    mov_eax, &g_three_32
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # count (global)
B8 &g_count #   mov_eax, &g_count
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # 4
B8 04000000 #   mov_eax, %4
50               #  push_eax              # ByteMode (local)
8D85 14000000 # lea_eax,[ebp+DWORD] %20
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # setup_string (function)
B8 &f_setup_string #    mov_eax, &f_setup_string
81C5 28000000          #    add_ebp, %40         # ()
FFD0 #  call_eax
81ED 28000000 # sub_ebp, %40
50               #  push_eax              # sixteen_32 (global)
B8 &g_sixteen_32 #  mov_eax, &g_sixteen_32
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # write_section (function)
B8 &f_write_section #   mov_eax, &f_write_section
81C5 28000000          #    add_ebp, %40         # ()
FFD0 #  call_eax
81ED 28000000 # sub_ebp, %40
58                # pop_eax               # ;
:_main_else_end25 #:_main_else_end25
 ## blood-elf.c 583
50               #  push_eax              # jump_table (global)
B8 &g_jump_table #  mov_eax, &g_jump_table
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # output_string_table (function)
B8 &f_output_string_table # mov_eax, &f_output_string_table
81C5 28000000          #    add_ebp, %40         # ()
FFD0 #  call_eax
81ED 28000000 # sub_ebp, %40
58                # pop_eax               # ;
 ## blood-elf.c 584
50               #  push_eax              # jump_table (global)
B8 &g_jump_table #  mov_eax, &g_jump_table
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # output_symbol_table (function)
B8 &f_output_symbol_table # mov_eax, &f_output_symbol_table
81C5 28000000          #    add_ebp, %40         # ()
FFD0 #  call_eax
81ED 28000000 # sub_ebp, %40
58                # pop_eax               # ;
 ## blood-elf.c 585
50               #  push_eax              # '\n:ELF_end\n'
B8 &string_122 #    mov_eax, &string_122
50               #  push_eax              # output (global)
B8 &g_output #  mov_eax, &g_output
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # fputs (function)
B8 &f_fputs #   mov_eax, &f_fputs
81C5 28000000          #    add_ebp, %40         # ()
FFD0 #  call_eax
81ED 28000000 # sub_ebp, %40
58                # pop_eax               # ;
 ## blood-elf.c 588
50               #  push_eax              # output (global)
B8 &g_output #  mov_eax, &g_output
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # fclose (function)
B8 &f_fclose #  mov_eax, &f_fclose
81C5 28000000          #    add_ebp, %40         # ()
FFD0 #  call_eax
81ED 28000000 # sub_ebp, %40
58                # pop_eax               # ;
 ## blood-elf.c 590
50               #  push_eax              # 0
B8 00000000 #   mov_eax, %0
8B5D00          #   mov_ebx,[ebp]         # return
53 #    push_ebx
C3 #    ret
50               #  push_eax              # 0
B8 00000000 #   mov_eax, %0
8B5D00          #   mov_ebx,[ebp]         # return
53 #    push_ebx
C3 #    ret
 #
:f___init_globals__ #:f___init_globals__
58 #    pop_eax
894500 #    mov_[ebp],eax
58 #    pop_eax
50               #  push_eax              # __sys_stdin (global)
B8 &g___sys_stdin # mov_eax, &g___sys_stdin
50               #  push_eax              # $ (dup)
50               #  push_eax              # 0
B8 00000000 #   mov_eax, %0
5B                # pop_ebx               # =
8903 #  mov_[ebx],eax
58                # pop_eax               # ;
50               #  push_eax              # 4
B8 04000000 #   mov_eax, %4
5B                # pop_ebx               # +
01D8 #  add_eax,ebx
50               #  push_eax              # 0
B8 00000000 #   mov_eax, %0
5B                # pop_ebx               # =
8903 #  mov_[ebx],eax
58                # pop_eax               # ;
50               #  push_eax              # __sys_stdout (global)
B8 &g___sys_stdout #    mov_eax, &g___sys_stdout
50               #  push_eax              # $ (dup)
50               #  push_eax              # 1
B8 01000000 #   mov_eax, %1
5B                # pop_ebx               # =
8903 #  mov_[ebx],eax
58                # pop_eax               # ;
50               #  push_eax              # 4
B8 04000000 #   mov_eax, %4
5B                # pop_ebx               # +
01D8 #  add_eax,ebx
50               #  push_eax              # 0
B8 00000000 #   mov_eax, %0
5B                # pop_ebx               # =
8903 #  mov_[ebx],eax
58                # pop_eax               # ;
50               #  push_eax              # __sys_stderr (global)
B8 &g___sys_stderr #    mov_eax, &g___sys_stderr
50               #  push_eax              # $ (dup)
50               #  push_eax              # 2
B8 02000000 #   mov_eax, %2
5B                # pop_ebx               # =
8903 #  mov_[ebx],eax
58                # pop_eax               # ;
50               #  push_eax              # 4
B8 04000000 #   mov_eax, %4
5B                # pop_ebx               # +
01D8 #  add_eax,ebx
50               #  push_eax              # 0
B8 00000000 #   mov_eax, %0
5B                # pop_ebx               # =
8903 #  mov_[ebx],eax
58                # pop_eax               # ;
50               #  push_eax              # stdin (global)
B8 &g_stdin #   mov_eax, &g_stdin
50               #  push_eax              # __sys_stdin (global)
B8 &g___sys_stdin # mov_eax, &g___sys_stdin
5B                # pop_ebx               # =
8903 #  mov_[ebx],eax
58                # pop_eax               # ;
50               #  push_eax              # stdout (global)
B8 &g_stdout #  mov_eax, &g_stdout
50               #  push_eax              # __sys_stdout (global)
B8 &g___sys_stdout #    mov_eax, &g___sys_stdout
5B                # pop_ebx               # =
8903 #  mov_[ebx],eax
58                # pop_eax               # ;
50               #  push_eax              # stderr (global)
B8 &g_stderr #  mov_eax, &g_stderr
50               #  push_eax              # __sys_stderr (global)
B8 &g___sys_stderr #    mov_eax, &g___sys_stderr
5B                # pop_ebx               # =
8903 #  mov_[ebx],eax
58                # pop_eax               # ;
50               #  push_eax              # LINE_MACRO_OUTPUT_FORMAT_GCC (global)
B8 &g_LINE_MACRO_OUTPUT_FORMAT_GCC #    mov_eax, &g_LINE_MACRO_OUTPUT_FORMAT_GCC
50               #  push_eax              # 0
B8 00000000 #   mov_eax, %0
5B                # pop_ebx               # =
8903 #  mov_[ebx],eax
58                # pop_eax               # ;
50               #  push_eax              # LINE_MACRO_OUTPUT_FORMAT_NONE (global)
B8 &g_LINE_MACRO_OUTPUT_FORMAT_NONE #   mov_eax, &g_LINE_MACRO_OUTPUT_FORMAT_NONE
50               #  push_eax              # 1
B8 01000000 #   mov_eax, %1
5B                # pop_ebx               # =
8903 #  mov_[ebx],eax
58                # pop_eax               # ;
50               #  push_eax              # LINE_MACRO_OUTPUT_FORMAT_STD (global)
B8 &g_LINE_MACRO_OUTPUT_FORMAT_STD #    mov_eax, &g_LINE_MACRO_OUTPUT_FORMAT_STD
50               #  push_eax              # 2
B8 02000000 #   mov_eax, %2
5B                # pop_ebx               # =
8903 #  mov_[ebx],eax
58                # pop_eax               # ;
50               #  push_eax              # LINE_MACRO_OUTPUT_FORMAT_P10 (global)
B8 &g_LINE_MACRO_OUTPUT_FORMAT_P10 #    mov_eax, &g_LINE_MACRO_OUTPUT_FORMAT_P10
50               #  push_eax              # 11
B8 0B000000 #   mov_eax, %11
5B                # pop_ebx               # =
8903 #  mov_[ebx],eax
58                # pop_eax               # ;
50               #  push_eax              # _sys_env (global)
B8 &g__sys_env #    mov_eax, &g__sys_env
50               #  push_eax              # 0
B8 00000000 #   mov_eax, %0
5B                # pop_ebx               # =
8903 #  mov_[ebx],eax
58                # pop_eax               # ;
50               #  push_eax              # max_string (global)
B8 &g_max_string #  mov_eax, &g_max_string
50               #  push_eax              # 4096
B8 00100000 #   mov_eax, %4096
5B                # pop_ebx               # =
8903 #  mov_[ebx],eax
58                # pop_eax               # ;
50               #  push_eax              # BINARY (global)
B8 &g_BINARY #  mov_eax, &g_BINARY
50               #  push_eax              # 2
B8 02000000 #   mov_eax, %2
5B                # pop_ebx               # =
8903 #  mov_[ebx],eax
58                # pop_eax               # ;
50               #  push_eax              # OCTAL (global)
B8 &g_OCTAL #   mov_eax, &g_OCTAL
50               #  push_eax              # 8
B8 08000000 #   mov_eax, %8
5B                # pop_ebx               # =
8903 #  mov_[ebx],eax
58                # pop_eax               # ;
50               #  push_eax              # HEX (global)
B8 &g_HEX # mov_eax, &g_HEX
50               #  push_eax              # 16
B8 10000000 #   mov_eax, %16
5B                # pop_ebx               # =
8903 #  mov_[ebx],eax
58                # pop_eax               # ;
50               #  push_eax              # 0
B8 00000000 #   mov_eax, %0
8B5D00          #   mov_ebx,[ebp]         # return
53 #    push_ebx
C3 #    ret
 #
:ELF_data #:ELF_data
 #
:SYS_MALLOC 00000000 #:SYS_MALLOC NULL
:string_0  5F5F7379735F7072696E7466202500  #:string_0  "__sys_printf %"
:string_1  2000  #:string_1  " "
:string_2  0A 00 #:string_2  !10 !0
:string_3  4D 6F 64 65 20 25 73 20 73 68 6F 75 6C 64 20 62 65 #:string_3  !77 !111 !100 !101 !32 !37 !115 !32 !115 !104 !111 !117 !108 !100 !32 !98 !101
20 27 72 2F 77 28 62 29 28 2B 29 27 2C 20 27 77 27 2C 20 6F #  !32 !39 !114 !47 !119 !40 !98 !41 !40 !43 !41 !39 !44 !32 !39 !119 !39 !44 !32 !111
72 20 27 77 62 27 0A 00 #  !114 !32 !39 !119 !98 !39 !10 !0
:string_4  66 6F 70 65 6E 20 25 73 20 25 73 20 72 65 74 75 72 #:string_4  !102 !111 !112 !101 !110 !32 !37 !115 !32 !37 !115 !32 !114 !101 !116 !117 !114
6E 65 64 20 25 64 0A 00 #  !110 !101 !100 !32 !37 !100 !10 !0
:string_5  54 4F 44 4F 20 74 69 6D 65 0A 00 #:string_5  !84 !79 !68 !79 !32 !116 !105 !109 !101 !10 !0
:string_6  54 4F 44 4F 20 6C 6F 63 61 6C 74 69 6D 65 0A 00 #:string_6  !84 !79 !68 !79 !32 !108 !111 !99 !97 !108 !116 !105 !109 !101 !10 !0
:string_7  54 4F 44 4F 20 73 65 74 6A 6D 70 0A 00 #:string_7  !84 !79 !68 !79 !32 !115 !101 !116 !106 !109 !112 !10 !0
:string_8  54 4F 44 4F 20 6C 6F 6E 67 6A 6D 70 0A 00 #:string_8  !84 !79 !68 !79 !32 !108 !111 !110 !103 !106 !109 !112 !10 !0
:string_9  73 73 63 61 6E 66 3A 20 66 6F 72 6D 61 74 20 25 25 #:string_9  !115 !115 !99 !97 !110 !102 !58 !32 !102 !111 !114 !109 !97 !116 !32 !37 !37
25 63 20 6E 6F 74 20 73 75 70 70 6F 72 74 65 64 0A 00 #  !37 !99 !32 !110 !111 !116 !32 !115 !117 !112 !112 !111 !114 !116 !101 !100 !10 !0
:string_10  54 4F 44 4F 20 61 74 6F 69 0A 00 #:string_10  !84 !79 !68 !79 !32 !97 !116 !111 !105 !10 !0
:string_11  54 4F 44 4F 20 65 78 65 63 76 70 0A 00 #:string_11  !84 !79 !68 !79 !32 !101 !120 !101 !99 !118 !112 !10 !0
:string_12  6162636465666768696A6B6C6D6E6F707172737475767778797A00  #:string_12  "abcdefghijklmnopqrstuvwxyz"
:string_13  30315F00  #:string_13  "01_"
:string_14  303132333435363738394142434445466162636465665F00  #:string_14  "0123456789ABCDEFabcdef_"
:string_15  30313233343536375F00  #:string_15  "01234567_"
:string_16  303132333435363738395F00  #:string_16  "0123456789_"
:string_17  69 6E 74 32 73 74 72 20 64 6F 65 73 6E 27 74 20 73 #:string_17  !105 !110 !116 !50 !115 !116 !114 !32 !100 !111 !101 !115 !110 !39 !116 !32 !115
75 70 70 6F 72 74 20 61 20 62 61 73 65 20 6C 65 73 73 20 74 #  !117 !112 !112 !111 !114 !116 !32 !97 !32 !98 !97 !115 !101 !32 !108 !101 !115 !115 !32 !116
68 61 6E 20 32 0A 00 #  !104 !97 !110 !32 !50 !10 !0
:string_18  69 6E 74 32 73 74 72 20 64 6F 65 73 6E 27 74 20 73 #:string_18  !105 !110 !116 !50 !115 !116 !114 !32 !100 !111 !101 !115 !110 !39 !116 !32 !115
75 70 70 6F 72 74 20 61 20 62 61 73 65 20 6D 6F 72 65 20 74 #  !117 !112 !112 !111 !114 !116 !32 !97 !32 !98 !97 !115 !101 !32 !109 !111 !114 !101 !32 !116
68 61 6E 20 33 36 0A 00 #  !104 !97 !110 !32 !51 !54 !10 !0
:string_19  303132333435363738394142434445464748494A4B4C4D4E4F505152535455565758595A00  #:string_19  "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ"
:string_20  2D3231343734383336343800  #:string_20  "-2147483648"
:string_21  43 61 6E 20 6E 6F 74 20 68 61 76 65 20 61 6E 20 45 #:string_21  !67 !97 !110 !32 !110 !111 !116 !32 !104 !97 !118 !101 !32 !97 !110 !32 !69
4F 46 20 74 6F 6B 65 6E 0A 00 #  !79 !70 !32 !116 !111 !107 !101 !110 !10 !0
:string_22  54 6F 6B 65 6E 20 65 78 63 65 65 64 73 20 74 6F 6B #:string_22  !84 !111 !107 !101 !110 !32 !101 !120 !99 !101 !101 !100 !115 !32 !116 !111 !107
65 6E 20 6C 65 6E 67 74 68 20 72 65 73 74 72 69 63 74 69 6F #  !101 !110 !32 !108 !101 !110 !103 !116 !104 !32 !114 !101 !115 !116 !114 !105 !99 !116 !105 !111
6E 0A 00 #  !110 !10 !0
:string_23  20 09 0A 3E 00 #:string_23  !32 !9 !10 !62 !0
:string_24  0A 0D 00 #:string_24  !10 !13 !0
:string_25  7200  #:string_25  "r"
:string_26  5468652066696C653A2000  #:string_26  "The file: "
:string_27  20 63 61 6E 20 6E 6F 74 20 62 65 20 6F 70 65 6E 65 #:string_27  !32 !99 !97 !110 !32 !110 !111 !116 !32 !98 !101 !32 !111 !112 !101 !110 !101
64 21 0A 00 #  !100 !33 !10 !0
:string_28  0A 23 20 47 65 6E 65 72 61 74 65 64 20 73 74 72 69 #:string_28  !10 !35 !32 !71 !101 !110 !101 !114 !97 !116 !101 !100 !32 !115 !116 !114 !105
6E 67 20 74 61 62 6C 65 0A 3A 45 4C 46 5F 73 74 72 0A 00 #  !110 !103 !32 !116 !97 !98 !108 !101 !10 !58 !69 !76 !70 !95 !115 !116 !114 !10 !0
:string_29  09 23 20 4E 55 4C 4C 20 73 74 72 69 6E 67 0A 00 #:string_29  !9 !35 !32 !78 !85 !76 !76 !32 !115 !116 !114 !105 !110 !103 !10 !0
:string_30  3A454C465F7374725F00  #:string_30  ":ELF_str_"
:string_31  09 22 00 #:string_31  !9 !34 !0
:string_32  22 20 23 20 22 00 #:string_32  !34 !32 !35 !32 !34 !0
:string_33  5C6E00  #:string_33  "\n"
:string_34  5C7400  #:string_34  "\t"
:string_35  22 0A 00 #:string_35  !34 !10 !0
:string_36  23 20 45 4E 44 20 47 65 6E 65 72 61 74 65 64 20 73 #:string_36  !35 !32 !69 !78 !68 !32 !71 !101 !110 !101 !114 !97 !116 !101 !100 !32 !115
74 72 69 6E 67 20 74 61 62 6C 65 0A 0A 00 #  !116 !114 !105 !110 !103 !32 !116 !97 !98 !108 !101 !10 !10 !0
:string_37  0A 23 20 47 65 6E 65 72 61 74 65 64 20 73 79 6D 62 #:string_37  !10 !35 !32 !71 !101 !110 !101 !114 !97 !116 !101 !100 !32 !115 !121 !109 !98
6F 6C 20 74 61 62 6C 65 0A 3A 45 4C 46 5F 73 79 6D 0A 23 20 #  !111 !108 !32 !116 !97 !98 !108 !101 !10 !58 !69 !76 !70 !95 !115 !121 !109 !10 !35 !32
52 65 71 75 69 72 65 64 20 4E 55 4C 4C 20 73 79 6D 62 6F 6C #  !82 !101 !113 !117 !105 !114 !101 !100 !32 !78 !85 !76 !76 !32 !115 !121 !109 !98 !111 !108
20 65 6E 74 72 79 0A 00 #  !32 !101 !110 !116 !114 !121 !10 !0
:string_38  09 23 20 73 74 5F 6E 61 6D 65 0A 00 #:string_38  !9 !35 !32 !115 !116 !95 !110 !97 !109 !101 !10 !0
:string_39  09 23 20 73 74 5F 69 6E 66 6F 0A 00 #:string_39  !9 !35 !32 !115 !116 !95 !105 !110 !102 !111 !10 !0
:string_40  09 23 20 73 74 5F 6F 74 68 65 72 0A 00 #:string_40  !9 !35 !32 !115 !116 !95 !111 !116 !104 !101 !114 !10 !0
:string_41  09 23 20 73 74 5F 73 68 6E 64 78 0A 00 #:string_41  !9 !35 !32 !115 !116 !95 !115 !104 !110 !100 !120 !10 !0
:string_42  09 23 20 73 74 5F 76 61 6C 75 65 0A 00 #:string_42  !9 !35 !32 !115 !116 !95 !118 !97 !108 !117 !101 !10 !0
:string_43  09 23 20 73 74 5F 73 69 7A 65 0A 0A 00 #:string_43  !9 !35 !32 !115 !116 !95 !115 !105 !122 !101 !10 !10 !0
:string_44  09 23 20 73 74 5F 73 69 7A 65 0A 00 #:string_44  !9 !35 !32 !115 !116 !95 !115 !105 !122 !101 !10 !0
:string_45  09 23 20 73 74 5F 73 68 6E 64 78 0A 0A 00 #:string_45  !9 !35 !32 !115 !116 !95 !115 !104 !110 !100 !120 !10 !10 !0
:string_46  25454C465F7374725F00  #:string_46  "%ELF_str_"
:string_47  3E 45 4C 46 5F 73 74 72 09 23 20 73 74 5F 6E 61 6D #:string_47  !62 !69 !76 !70 !95 !115 !116 !114 !9 !35 !32 !115 !116 !95 !110 !97 !109
65 0A 00 #  !101 !10 !0
:string_48  09 23 20 73 74 5F 69 6E 66 6F 20 28 46 55 4E 43 29 #:string_48  !9 !35 !32 !115 !116 !95 !105 !110 !102 !111 !32 !40 !70 !85 !78 !67 !41
0A 00 #  !10 !0
:string_49  09 23 20 73 74 5F 6F 74 68 65 72 20 28 68 69 64 64 #:string_49  !9 !35 !32 !115 !116 !95 !111 !116 !104 !101 !114 !32 !40 !104 !105 !100 !100
65 6E 29 0A 00 #  !101 !110 !41 !10 !0
:string_50  09 23 20 73 74 5F 6F 74 68 65 72 20 28 6F 74 68 65 #:string_50  !9 !35 !32 !115 !116 !95 !111 !116 !104 !101 !114 !32 !40 !111 !116 !104 !101
72 29 0A 00 #  !114 !41 !10 !0
:string_51  2600  #:string_51  "&"
:string_52  09 23 20 73 74 5F 73 69 7A 65 20 28 75 6E 6B 6E 6F #:string_52  !9 !35 !32 !115 !116 !95 !115 !105 !122 !101 !32 !40 !117 !110 !107 !110 !111
77 6E 20 73 69 7A 65 29 0A 0A 00 #  !119 !110 !32 !115 !105 !122 !101 !41 !10 !10 !0
:string_53  09 23 73 74 5F 76 61 6C 75 65 0A 00 #:string_53  !9 !35 !115 !116 !95 !118 !97 !108 !117 !101 !10 !0
:string_54  09 23 20 73 74 5F 73 69 7A 65 20 28 75 6E 6B 6E 6F #:string_54  !9 !35 !32 !115 !116 !95 !115 !105 !122 !101 !32 !40 !117 !110 !107 !110 !111
77 6E 20 73 69 7A 65 29 0A 00 #  !119 !110 !32 !115 !105 !122 !101 !41 !10 !0
:string_55  09 23 20 73 74 5F 6F 74 68 65 72 20 28 64 65 66 61 #:string_55  !9 !35 !32 !115 !116 !95 !111 !116 !104 !101 !114 !32 !40 !100 !101 !102 !97
75 6C 74 29 0A 00 #  !117 !108 !116 !41 !10 !0
:string_56  23 20 45 4E 44 20 47 65 6E 65 72 61 74 65 64 20 73 #:string_56  !35 !32 !69 !78 !68 !32 !71 !101 !110 !101 !114 !97 !116 !101 !100 !32 !115
79 6D 62 6F 6C 20 74 61 62 6C 65 0A 00 #  !121 !109 !98 !111 !108 !32 !116 !97 !98 !108 !101 !10 !0
:string_57  09 23 00 #:string_57  !9 !35 !0
:string_58  73685F6E616D6500  #:string_58  "sh_name"
:string_59  73685F7479706500  #:string_59  "sh_type"
:string_60  73685F666C61677300  #:string_60  "sh_flags"
:string_61  73685F6164647200  #:string_61  "sh_addr"
:string_62  73685F6F666673657400  #:string_62  "sh_offset"
:string_63  73685F73697A6500  #:string_63  "sh_size"
:string_64  73685F6C696E6B00  #:string_64  "sh_link"
:string_65  09 23 73 68 5F 69 6E 66 6F 0A 00 #:string_65  !9 !35 !115 !104 !95 !105 !110 !102 !111 !10 !0
:string_66  09 23 73 68 5F 61 64 64 72 61 6C 69 67 6E 0A 00 #:string_66  !9 !35 !115 !104 !95 !97 !100 !100 !114 !97 !108 !105 !103 !110 !10 !0
:string_67  73685F656E7473697A6500  #:string_67  "sh_entsize"
:string_68  45 78 68 61 75 73 74 65 64 20 61 76 61 69 6C 61 62 #:string_68  !69 !120 !104 !97 !117 !115 !116 !101 !100 !32 !97 !118 !97 !105 !108 !97 !98
6C 65 20 6D 65 6D 6F 72 79 0A 00 #  !108 !101 !32 !109 !101 !109 !111 !114 !121 !10 !0
:string_69  72 65 61 63 68 65 64 20 69 6D 70 6F 73 73 69 62 6C #:string_69  !114 !101 !97 !99 !104 !101 !100 !32 !105 !109 !112 !111 !115 !115 !105 !98 !108
65 20 6D 6F 64 65 0A 00 #  !101 !32 !109 !111 !100 !101 !10 !0
:string_70  00  #:string_70  ""
:string_71  2D6800  #:string_71  "-h"
:string_72  2D2D68656C7000  #:string_72  "--help"
:string_73  55736167653A2000  #:string_73  "Usage: "
:string_74  20 2D 2D 66 69 6C 65 20 46 49 4C 45 4E 41 4D 45 31 #:string_74  !32 !45 !45 !102 !105 !108 !101 !32 !70 !73 !76 !69 !78 !65 !77 !69 !49
20 7B 2D 2D 66 69 6C 65 20 46 49 4C 45 4E 41 4D 45 32 7D 20 #  !32 !123 !45 !45 !102 !105 !108 !101 !32 !70 !73 !76 !69 !78 !65 !77 !69 !50 !125 !32
2D 2D 6F 75 74 70 75 74 20 46 49 4C 45 4E 41 4D 45 0A 00 #  !45 !45 !111 !117 !116 !112 !117 !116 !32 !70 !73 !76 !69 !78 !65 !77 !69 !10 !0
:string_75  2D2D363400  #:string_75  "--64"
:string_76  2D6600  #:string_76  "-f"
:string_77  2D2D66696C6500  #:string_77  "--file"
:string_78  2D6F00  #:string_78  "-o"
:string_79  2D2D6F757470757400  #:string_79  "--output"
:string_80  7700  #:string_80  "w"
:string_81  2D6200  #:string_81  "-b"
:string_82  2D2D62696E61727900  #:string_82  "--binary"
:string_83  2D4F00  #:string_83  "-O"
:string_84  2D2D6F6374616C00  #:string_84  "--octal"
:string_85  2D5800  #:string_85  "-X"
:string_86  2D2D68657800  #:string_86  "--hex"
:string_87  2D2D6269672D656E6469616E00  #:string_87  "--big-endian"
:string_88  2D2D6C6974746C652D656E6469616E00  #:string_88  "--little-endian"
:string_89  2D5600  #:string_89  "-V"
:string_90  2D2D76657273696F6E00  #:string_90  "--version"
:string_91  62 6C 6F 6F 64 2D 65 6C 66 20 32 2E 30 2E 31 0A 28 #:string_91  !98 !108 !111 !111 !100 !45 !101 !108 !102 !32 !50 !46 !48 !46 !49 !10 !40
42 61 73 69 63 61 6C 6C 79 20 4C 61 75 6E 63 68 65 73 20 4F #  !66 !97 !115 !105 !99 !97 !108 !108 !121 !32 !76 !97 !117 !110 !99 !104 !101 !115 !32 !79
64 64 20 4F 62 6A 65 63 74 20 44 75 6D 70 20 45 78 65 63 75 #  !100 !100 !32 !79 !98 !106 !101 !99 !116 !32 !68 !117 !109 !112 !32 !69 !120 !101 !99 !117
74 61 62 4C 65 20 46 69 6C 65 73 0A 00 #  !116 !97 !98 !76 !101 !32 !70 !105 !108 !101 !115 !10 !0
:string_92  2D2D656E74727900  #:string_92  "--entry"
:string_93  55 6E 6B 6E 6F 77 6E 20 6F 70 74 69 6F 6E 0A 00 #:string_93  !85 !110 !107 !110 !111 !119 !110 !32 !111 !112 !116 !105 !111 !110 !10 !0
:string_94  65 69 74 68 65 72 20 2D 2D 6C 69 74 74 6C 65 2D 65 #:string_94  !101 !105 !116 !104 !101 !114 !32 !45 !45 !108 !105 !116 !116 !108 !101 !45 !101
6E 64 69 61 6E 20 6F 72 20 2D 2D 62 69 67 2D 65 6E 64 69 61 #  !110 !100 !105 !97 !110 !32 !111 !114 !32 !45 !45 !98 !105 !103 !45 !101 !110 !100 !105 !97
6E 20 4D 55 53 54 20 62 65 20 73 65 74 0A 00 #  !110 !32 !77 !85 !83 !84 !32 !98 !101 !32 !115 !101 !116 !10 !0
:string_95  23 20 47 65 6E 65 72 61 74 65 64 20 73 65 63 74 69 #:string_95  !35 !32 !71 !101 !110 !101 !114 !97 !116 !101 !100 !32 !115 !101 !99 !116 !105
6F 6E 73 0A 3A 45 4C 46 5F 73 68 73 74 72 0A 00 #  !111 !110 !115 !10 !58 !69 !76 !70 !95 !115 !104 !115 !116 !114 !10 !0
:string_96  09 23 20 4E 55 4C 4C 0A 00 #:string_96  !9 !35 !32 !78 !85 !76 !76 !10 !0
:string_97  3A 45 4C 46 5F 73 68 73 74 72 5F 5F 74 65 78 74 0A #:string_97  !58 !69 !76 !70 !95 !115 !104 !115 !116 !114 !95 !95 !116 !101 !120 !116 !10
22 2E 74 65 78 74 22 0A 00 #  !34 !46 !116 !101 !120 !116 !34 !10 !0
:string_98  3A 45 4C 46 5F 73 68 73 74 72 5F 5F 73 68 73 74 72 #:string_98  !58 !69 !76 !70 !95 !115 !104 !115 !116 !114 !95 !95 !115 !104 !115 !116 !114
0A 22 2E 73 68 73 74 72 74 61 62 22 0A 00 #  !10 !34 !46 !115 !104 !115 !116 !114 !116 !97 !98 !34 !10 !0
:string_99  3A 45 4C 46 5F 73 68 73 74 72 5F 5F 73 79 6D 0A 22 #:string_99  !58 !69 !76 !70 !95 !115 !104 !115 !116 !114 !95 !95 !115 !121 !109 !10 !34
2E 73 79 6D 74 61 62 22 0A 00 #  !46 !115 !121 !109 !116 !97 !98 !34 !10 !0
:string_100  3A 45 4C 46 5F 73 68 73 74 72 5F 5F 73 74 72 0A 22 #:string_100  !58 !69 !76 !70 !95 !115 !104 !115 !116 !114 !95 !95 !115 !116 !114 !10 !34
2E 73 74 72 74 61 62 22 0A 00 #  !46 !115 !116 !114 !116 !97 !98 !34 !10 !0
:string_101  3A454C465F73656374696F6E5F6865616465727300  #:string_101  ":ELF_section_headers"
:string_102  3A454C465F73656374696F6E5F6865616465725F7465787400  #:string_102  ":ELF_section_header_text"
:string_103  25454C465F73687374725F5F746578743E454C465F736873747200  #:string_103  "%ELF_shstr__text>ELF_shstr"
:string_104  26454C465F7465787400  #:string_104  "&ELF_text"
:string_105  25454C465F746578743E454C465F6261736500  #:string_105  "%ELF_text>ELF_base"
:string_106  25454C465F646174613E454C465F7465787400  #:string_106  "%ELF_data>ELF_text"
:string_107  3A454C465F73656374696F6E5F6865616465725F736873747200  #:string_107  ":ELF_section_header_shstr"
:string_108  25454C465F73687374725F5F73687374723E454C465F736873747200  #:string_108  "%ELF_shstr__shstr>ELF_shstr"
:string_109  26454C465F736873747200  #:string_109  "&ELF_shstr"
:string_110  25454C465F73687374723E454C465F6261736500  #:string_110  "%ELF_shstr>ELF_base"
:string_111  25454C465F73656374696F6E5F686561646572733E454C465F736873747200  #:string_111  "%ELF_section_headers>ELF_shstr"
:string_112  3A454C465F73656374696F6E5F6865616465725F73747200  #:string_112  ":ELF_section_header_str"
:string_113  25454C465F73687374725F5F7374723E454C465F736873747200  #:string_113  "%ELF_shstr__str>ELF_shstr"
:string_114  26454C465F73747200  #:string_114  "&ELF_str"
:string_115  25454C465F7374723E454C465F6261736500  #:string_115  "%ELF_str>ELF_base"
:string_116  25454C465F73796D3E454C465F73747200  #:string_116  "%ELF_sym>ELF_str"
:string_117  3A454C465F73656374696F6E5F6865616465725F73796D00  #:string_117  ":ELF_section_header_sym"
:string_118  25454C465F73687374725F5F73796D3E454C465F736873747200  #:string_118  "%ELF_shstr__sym>ELF_shstr"
:string_119  26454C465F73796D00  #:string_119  "&ELF_sym"
:string_120  25454C465F73796D3E454C465F6261736500  #:string_120  "%ELF_sym>ELF_base"
:string_121  25454C465F656E643E454C465F73796D00  #:string_121  "%ELF_end>ELF_sym"
:string_122  0A 3A 45 4C 46 5F 65 6E 64 0A 00 #:string_122  !10 !58 !69 !76 !70 !95 !101 !110 !100 !10 !0
:g___sys_stdin #:g___sys_stdin
00000000 00000000 # NULL NULL
:g___sys_stdout #:g___sys_stdout
00000000 00000000 # NULL NULL
:g___sys_stderr #:g___sys_stderr
00000000 00000000 # NULL NULL
:g_stdin #:g_stdin
00000000 #  NULL
:g_stdout #:g_stdout
00000000 #  NULL
:g_stderr #:g_stderr
00000000 #  NULL
:g_errno #:g_errno
00000000 #  NULL
:g_LINE_MACRO_OUTPUT_FORMAT_GCC #:g_LINE_MACRO_OUTPUT_FORMAT_GCC
00000000 #  NULL
:g_LINE_MACRO_OUTPUT_FORMAT_NONE #:g_LINE_MACRO_OUTPUT_FORMAT_NONE
00000000 #  NULL
:g_LINE_MACRO_OUTPUT_FORMAT_STD #:g_LINE_MACRO_OUTPUT_FORMAT_STD
00000000 #  NULL
:g_LINE_MACRO_OUTPUT_FORMAT_P10 #:g_LINE_MACRO_OUTPUT_FORMAT_P10
00000000 #  NULL
:g__sys_env #:g__sys_env
00000000 #  NULL
:g_max_string #:g_max_string
00000000 #  NULL
:g_BITSIZE #:g_BITSIZE
00000000 #  NULL
:g_BigEndian #:g_BigEndian
00000000 #  NULL
:g_BINARY #:g_BINARY
00000000 #  NULL
:g_OCTAL #:g_OCTAL
00000000 #  NULL
:g_HEX #:g_HEX
00000000 #  NULL
:g_zero_8 #:g_zero_8
00000000 #  NULL
:g_zero_16 #:g_zero_16
00000000 #  NULL
:g_zero_32 #:g_zero_32
00000000 #  NULL
:g_one_16 #:g_one_16
00000000 #  NULL
:g_one_32 #:g_one_32
00000000 #  NULL
:g_two_8 #:g_two_8
00000000 #  NULL
:g_two_32 #:g_two_32
00000000 #  NULL
:g_three_32 #:g_three_32
00000000 #  NULL
:g_six_32 #:g_six_32
00000000 #  NULL
:g_sixteen_32 #:g_sixteen_32
00000000 #  NULL
:g_twentyfour_32 #:g_twentyfour_32
00000000 #  NULL
:g_output #:g_output
00000000 #  NULL
:g_jump_table #:g_jump_table
00000000 #  NULL
:g_count #:g_count
00000000 #  NULL
:g_entry #:g_entry
00000000 #  NULL
 #
:ELF_end #:ELF_end

File /x86/blood-elf_s.blood_elf

Source file is 'src/blood-elf_s.blood_elf'.
No URL
# Generated sections
:ELF_shstr
00  # NULL
:ELF_shstr__text
".text"
:ELF_shstr__shstr
".shstrtab"
:ELF_shstr__sym
".symtab"
:ELF_shstr__str
".strtab"

:ELF_section_headers
00000000    #sh_name
00000000    #sh_type
00000000    #sh_flags
00000000    #sh_addr
00000000    #sh_offset
00000000    #sh_size
00000000    #sh_link
00000000    #sh_info
01000000    #sh_addralign
00000000    #sh_entsize

:ELF_section_header_text
%ELF_shstr__text>ELF_shstr  #sh_name
01000000    #sh_type
06000000    #sh_flags
&ELF_text   #sh_addr
%ELF_text>ELF_base  #sh_offset
%ELF_data>ELF_text  #sh_size
00000000    #sh_link
00000000    #sh_info
01000000    #sh_addralign
00000000    #sh_entsize

:ELF_section_header_shstr
%ELF_shstr__shstr>ELF_shstr #sh_name
03000000    #sh_type
00000000    #sh_flags
&ELF_shstr  #sh_addr
%ELF_shstr>ELF_base #sh_offset
%ELF_section_headers>ELF_shstr  #sh_size
00000000    #sh_link
00000000    #sh_info
01000000    #sh_addralign
00000000    #sh_entsize

:ELF_section_header_str
%ELF_shstr__str>ELF_shstr   #sh_name
03000000    #sh_type
00000000    #sh_flags
&ELF_str    #sh_addr
%ELF_str>ELF_base   #sh_offset
%ELF_sym>ELF_str    #sh_size
00000000    #sh_link
00000000    #sh_info
01000000    #sh_addralign
00000000    #sh_entsize

:ELF_section_header_sym
%ELF_shstr__sym>ELF_shstr   #sh_name
02000000    #sh_type
00000000    #sh_flags
&ELF_sym    #sh_addr
%ELF_sym>ELF_base   #sh_offset
%ELF_end>ELF_sym    #sh_size
03000000    #sh_link
66020000    #sh_info
01000000    #sh_addralign
10000000    #sh_entsize

# Generated string table
:ELF_str
00  # NULL string
:ELF_str_ELF_text   "ELF_text" # "ELF_text"
:ELF_str__start "_start" # "_start"
:ELF_str_f_sys_int80    "f_sys_int80" # "f_sys_int80"
:ELF_str_f_sys_malloc   "f_sys_malloc" # "f_sys_malloc"
:ELF_str_SYS_MALLOC "SYS_MALLOC" # "SYS_MALLOC"
:ELF_str_f_exit "f_exit" # "f_exit"
:ELF_str_f_memcpy   "f_memcpy" # "f_memcpy"
:ELF_str__memcpy_loop1  "_memcpy_loop1" # "_memcpy_loop1"
:ELF_str__memcpy_else2  "_memcpy_else2" # "_memcpy_else2"
:ELF_str__memcpy_loop_end1  "_memcpy_loop_end1" # "_memcpy_loop_end1"
:ELF_str_f_memmove  "f_memmove" # "f_memmove"
:ELF_str__memmove_loop2 "_memmove_loop2" # "_memmove_loop2"
:ELF_str__memmove_else3 "_memmove_else3" # "_memmove_else3"
:ELF_str__memmove_loop_end2 "_memmove_loop_end2" # "_memmove_loop_end2"
:ELF_str__memmove_else1 "_memmove_else1" # "_memmove_else1"
:ELF_str__memmove_loop5 "_memmove_loop5" # "_memmove_loop5"
:ELF_str__memmove_else6 "_memmove_else6" # "_memmove_else6"
:ELF_str__memmove_loop_end5 "_memmove_loop_end5" # "_memmove_loop_end5"
:ELF_str__memmove_else4 "_memmove_else4" # "_memmove_else4"
:ELF_str__memmove_else_end1 "_memmove_else_end1" # "_memmove_else_end1"
:ELF_str_f_memset   "f_memset" # "f_memset"
:ELF_str__memset_loop1  "_memset_loop1" # "_memset_loop1"
:ELF_str__memset_else2  "_memset_else2" # "_memset_else2"
:ELF_str__memset_loop_end1  "_memset_loop_end1" # "_memset_loop_end1"
:ELF_str_f_memcmp   "f_memcmp" # "f_memcmp"
:ELF_str__memcmp_loop1  "_memcmp_loop1" # "_memcmp_loop1"
:ELF_str__memcmp_else2  "_memcmp_else2" # "_memcmp_else2"
:ELF_str__memcmp_else3  "_memcmp_else3" # "_memcmp_else3"
:ELF_str__memcmp_loop_end1  "_memcmp_loop_end1" # "_memcmp_loop_end1"
:ELF_str_f_strlen   "f_strlen" # "f_strlen"
:ELF_str__strlen_loop1  "_strlen_loop1" # "_strlen_loop1"
:ELF_str__strlen_else2  "_strlen_else2" # "_strlen_else2"
:ELF_str__strlen_loop_end1  "_strlen_loop_end1" # "_strlen_loop_end1"
:ELF_str_f_strcpy   "f_strcpy" # "f_strcpy"
:ELF_str__strcpy_loop1  "_strcpy_loop1" # "_strcpy_loop1"
:ELF_str__strcpy_else2  "_strcpy_else2" # "_strcpy_else2"
:ELF_str__strcpy_loop_end1  "_strcpy_loop_end1" # "_strcpy_loop_end1"
:ELF_str_f_strncpy  "f_strncpy" # "f_strncpy"
:ELF_str__strncpy_loop1 "_strncpy_loop1" # "_strncpy_loop1"
:ELF_str__strncpy_else2 "_strncpy_else2" # "_strncpy_else2"
:ELF_str__strncpy_else3 "_strncpy_else3" # "_strncpy_else3"
:ELF_str__strncpy_loop_end1 "_strncpy_loop_end1" # "_strncpy_loop_end1"
:ELF_str_f_strcat   "f_strcat" # "f_strcat"
:ELF_str_f_strchr   "f_strchr" # "f_strchr"
:ELF_str__strchr_loop1  "_strchr_loop1" # "_strchr_loop1"
:ELF_str__strchr_else2  "_strchr_else2" # "_strchr_else2"
:ELF_str__strchr_else3  "_strchr_else3" # "_strchr_else3"
:ELF_str__strchr_loop_end1  "_strchr_loop_end1" # "_strchr_loop_end1"
:ELF_str__strchr_else4  "_strchr_else4" # "_strchr_else4"
:ELF_str__strchr_else_end4  "_strchr_else_end4" # "_strchr_else_end4"
:ELF_str_f_strrchr  "f_strrchr" # "f_strrchr"
:ELF_str__strrchr_loop1 "_strrchr_loop1" # "_strrchr_loop1"
:ELF_str__strrchr_else2 "_strrchr_else2" # "_strrchr_else2"
:ELF_str__strrchr_else3 "_strrchr_else3" # "_strrchr_else3"
:ELF_str__strrchr_loop_end1 "_strrchr_loop_end1" # "_strrchr_loop_end1"
:ELF_str_f_strcmp   "f_strcmp" # "f_strcmp"
:ELF_str__strcmp_loop1  "_strcmp_loop1" # "_strcmp_loop1"
:ELF_str__strcmp_or_end2    "_strcmp_or_end2" # "_strcmp_or_end2"
:ELF_str__strcmp_else3  "_strcmp_else3" # "_strcmp_else3"
:ELF_str__strcmp_loop_end1  "_strcmp_loop_end1" # "_strcmp_loop_end1"
:ELF_str_f_strncmp  "f_strncmp" # "f_strncmp"
:ELF_str__strncmp_loop1 "_strncmp_loop1" # "_strncmp_loop1"
:ELF_str__strncmp_else2 "_strncmp_else2" # "_strncmp_else2"
:ELF_str__strncmp_or_end3   "_strncmp_or_end3" # "_strncmp_or_end3"
:ELF_str__strncmp_else4 "_strncmp_else4" # "_strncmp_else4"
:ELF_str__strncmp_loop_end1 "_strncmp_loop_end1" # "_strncmp_loop_end1"
:ELF_str_f_strstr   "f_strstr" # "f_strstr"
:ELF_str__strstr_loop1  "_strstr_loop1" # "_strstr_loop1"
:ELF_str__strstr_else2  "_strstr_else2" # "_strstr_else2"
:ELF_str__strstr_else3  "_strstr_else3" # "_strstr_else3"
:ELF_str__strstr_loop_end1  "_strstr_loop_end1" # "_strstr_loop_end1"
:ELF_str_f_strtoul  "f_strtoul" # "f_strtoul"
:ELF_str__strtoul_or_end3   "_strtoul_or_end3" # "_strtoul_or_end3"
:ELF_str__strtoul_else4 "_strtoul_else4" # "_strtoul_else4"
:ELF_str__strtoul_else2 "_strtoul_else2" # "_strtoul_else2"
:ELF_str__strtoul_else1 "_strtoul_else1" # "_strtoul_else1"
:ELF_str__strtoul_else5 "_strtoul_else5" # "_strtoul_else5"
:ELF_str__strtoul_else_end5 "_strtoul_else_end5" # "_strtoul_else_end5"
:ELF_str__strtoul_loop6 "_strtoul_loop6" # "_strtoul_loop6"
:ELF_str__strtoul_and_end7  "_strtoul_and_end7" # "_strtoul_and_end7"
:ELF_str__strtoul_else8 "_strtoul_else8" # "_strtoul_else8"
:ELF_str__strtoul_and_end9  "_strtoul_and_end9" # "_strtoul_and_end9"
:ELF_str__strtoul_else10    "_strtoul_else10" # "_strtoul_else10"
:ELF_str__strtoul_and_end11 "_strtoul_and_end11" # "_strtoul_and_end11"
:ELF_str__strtoul_else12    "_strtoul_else12" # "_strtoul_else12"
:ELF_str__strtoul_else_end12    "_strtoul_else_end12" # "_strtoul_else_end12"
:ELF_str__strtoul_else_end10    "_strtoul_else_end10" # "_strtoul_else_end10"
:ELF_str__strtoul_else_end8 "_strtoul_else_end8" # "_strtoul_else_end8"
:ELF_str__strtoul_loop_end6 "_strtoul_loop_end6" # "_strtoul_loop_end6"
:ELF_str__strtoul_else13    "_strtoul_else13" # "_strtoul_else13"
:ELF_str_f_strtol   "f_strtol" # "f_strtol"
:ELF_str__strtol_else1  "_strtol_else1" # "_strtol_else1"
:ELF_str_f_strtoll  "f_strtoll" # "f_strtoll"
:ELF_str_f_strtoull "f_strtoull" # "f_strtoull"
:ELF_str_f_strtof   "f_strtof" # "f_strtof"
:ELF_str_f_malloc   "f_malloc" # "f_malloc"
:ELF_str_f_realloc  "f_realloc" # "f_realloc"
:ELF_str__realloc_loop2 "_realloc_loop2" # "_realloc_loop2"
:ELF_str__realloc_else3 "_realloc_else3" # "_realloc_else3"
:ELF_str__realloc_loop_end2 "_realloc_loop_end2" # "_realloc_loop_end2"
:ELF_str__realloc_else1 "_realloc_else1" # "_realloc_else1"
:ELF_str_f_calloc   "f_calloc" # "f_calloc"
:ELF_str__calloc_loop1  "_calloc_loop1" # "_calloc_loop1"
:ELF_str__calloc_else2  "_calloc_else2" # "_calloc_else2"
:ELF_str__calloc_loop_end1  "_calloc_loop_end1" # "_calloc_loop_end1"
:ELF_str_f_free "f_free" # "f_free"
:ELF_str_f_fwrite   "f_fwrite" # "f_fwrite"
:ELF_str_f_fputc    "f_fputc" # "f_fputc"
:ELF_str_f_fputs    "f_fputs" # "f_fputs"
:ELF_str_f___sys_printf "f___sys_printf" # "f___sys_printf"
:ELF_str____sys_printf_loop1    "___sys_printf_loop1" # "___sys_printf_loop1"
:ELF_str____sys_printf_else2    "___sys_printf_else2" # "___sys_printf_else2"
:ELF_str____sys_printf_else4    "___sys_printf_else4" # "___sys_printf_else4"
:ELF_str____sys_printf_else5    "___sys_printf_else5" # "___sys_printf_else5"
:ELF_str____sys_printf_else_end4    "___sys_printf_else_end4" # "___sys_printf_else_end4"
:ELF_str____sys_printf_else6    "___sys_printf_else6" # "___sys_printf_else6"
:ELF_str____sys_printf_else3    "___sys_printf_else3" # "___sys_printf_else3"
:ELF_str____sys_printf_else8    "___sys_printf_else8" # "___sys_printf_else8"
:ELF_str____sys_printf_else10   "___sys_printf_else10" # "___sys_printf_else10"
:ELF_str____sys_printf_else11   "___sys_printf_else11" # "___sys_printf_else11"
:ELF_str____sys_printf_loop12   "___sys_printf_loop12" # "___sys_printf_loop12"
:ELF_str____sys_printf_and_end13    "___sys_printf_and_end13" # "___sys_printf_and_end13"
:ELF_str____sys_printf_else14   "___sys_printf_else14" # "___sys_printf_else14"
:ELF_str____sys_printf_loop_end12   "___sys_printf_loop_end12" # "___sys_printf_loop_end12"
:ELF_str____sys_printf_else15   "___sys_printf_else15" # "___sys_printf_else15"
:ELF_str____sys_printf_else17   "___sys_printf_else17" # "___sys_printf_else17"
:ELF_str____sys_printf_else18   "___sys_printf_else18" # "___sys_printf_else18"
:ELF_str____sys_printf_loop19   "___sys_printf_loop19" # "___sys_printf_loop19"
:ELF_str____sys_printf_else20   "___sys_printf_else20" # "___sys_printf_else20"
:ELF_str____sys_printf_loop_end19   "___sys_printf_loop_end19" # "___sys_printf_loop_end19"
:ELF_str____sys_printf_else21   "___sys_printf_else21" # "___sys_printf_else21"
:ELF_str____sys_printf_else_end17   "___sys_printf_else_end17" # "___sys_printf_else_end17"
:ELF_str____sys_printf_loop25   "___sys_printf_loop25" # "___sys_printf_loop25"
:ELF_str____sys_printf_else26   "___sys_printf_else26" # "___sys_printf_else26"
:ELF_str____sys_printf_else27   "___sys_printf_else27" # "___sys_printf_else27"
:ELF_str____sys_printf_else_end27   "___sys_printf_else_end27" # "___sys_printf_else_end27"
:ELF_str____sys_printf_loop_end25   "___sys_printf_loop_end25" # "___sys_printf_loop_end25"
:ELF_str____sys_printf_else24   "___sys_printf_else24" # "___sys_printf_else24"
:ELF_str____sys_printf_loop28   "___sys_printf_loop28" # "___sys_printf_loop28"
:ELF_str____sys_printf_else29   "___sys_printf_else29" # "___sys_printf_else29"
:ELF_str____sys_printf_loop_end28   "___sys_printf_loop_end28" # "___sys_printf_loop_end28"
:ELF_str____sys_printf_else_end24   "___sys_printf_else_end24" # "___sys_printf_else_end24"
:ELF_str____sys_printf_else23   "___sys_printf_else23" # "___sys_printf_else23"
:ELF_str____sys_printf_else22   "___sys_printf_else22" # "___sys_printf_else22"
:ELF_str____sys_printf_else16   "___sys_printf_else16" # "___sys_printf_else16"
:ELF_str____sys_printf_else31   "___sys_printf_else31" # "___sys_printf_else31"
:ELF_str____sys_printf_loop32   "___sys_printf_loop32" # "___sys_printf_loop32"
:ELF_str____sys_printf_else33   "___sys_printf_else33" # "___sys_printf_else33"
:ELF_str____sys_printf_loop_end32   "___sys_printf_loop_end32" # "___sys_printf_loop_end32"
:ELF_str____sys_printf_else_end31   "___sys_printf_else_end31" # "___sys_printf_else_end31"
:ELF_str____sys_printf_else30   "___sys_printf_else30" # "___sys_printf_else30"
:ELF_str____sys_printf_or_end34 "___sys_printf_or_end34" # "___sys_printf_or_end34"
:ELF_str____sys_printf_else36   "___sys_printf_else36" # "___sys_printf_else36"
:ELF_str____sys_printf_loop37   "___sys_printf_loop37" # "___sys_printf_loop37"
:ELF_str____sys_printf_else38   "___sys_printf_else38" # "___sys_printf_else38"
:ELF_str____sys_printf_else39   "___sys_printf_else39" # "___sys_printf_else39"
:ELF_str____sys_printf_else_end39   "___sys_printf_else_end39" # "___sys_printf_else_end39"
:ELF_str____sys_printf_loop_end37   "___sys_printf_loop_end37" # "___sys_printf_loop_end37"
:ELF_str____sys_printf_else_end36   "___sys_printf_else_end36" # "___sys_printf_else_end36"
:ELF_str____sys_printf_else35   "___sys_printf_else35" # "___sys_printf_else35"
:ELF_str____sys_printf_else40   "___sys_printf_else40" # "___sys_printf_else40"
:ELF_str____sys_printf_else_end40   "___sys_printf_else_end40" # "___sys_printf_else_end40"
:ELF_str____sys_printf_else_end35   "___sys_printf_else_end35" # "___sys_printf_else_end35"
:ELF_str____sys_printf_else_end30   "___sys_printf_else_end30" # "___sys_printf_else_end30"
:ELF_str____sys_printf_else_end16   "___sys_printf_else_end16" # "___sys_printf_else_end16"
:ELF_str____sys_printf_else_end15   "___sys_printf_else_end15" # "___sys_printf_else_end15"
:ELF_str____sys_printf_else_end10   "___sys_printf_else_end10" # "___sys_printf_else_end10"
:ELF_str____sys_printf_else9    "___sys_printf_else9" # "___sys_printf_else9"
:ELF_str____sys_printf_else_end9    "___sys_printf_else_end9" # "___sys_printf_else_end9"
:ELF_str____sys_printf_else7    "___sys_printf_else7" # "___sys_printf_else7"
:ELF_str____sys_printf_loop_end1    "___sys_printf_loop_end1" # "___sys_printf_loop_end1"
:ELF_str____sys_printf_and_end41    "___sys_printf_and_end41" # "___sys_printf_and_end41"
:ELF_str____sys_printf_else42   "___sys_printf_else42" # "___sys_printf_else42"
:ELF_str_f_va_end   "f_va_end" # "f_va_end"
:ELF_str_f_fprintf  "f_fprintf" # "f_fprintf"
:ELF_str_f_printf   "f_printf" # "f_printf"
:ELF_str_f_sprintf  "f_sprintf" # "f_sprintf"
:ELF_str_f_snprintf "f_snprintf" # "f_snprintf"
:ELF_str_f_vsnprintf    "f_vsnprintf" # "f_vsnprintf"
:ELF_str_f_open "f_open" # "f_open"
:ELF_str__open_else1    "_open_else1" # "_open_else1"
:ELF_str_f_close    "f_close" # "f_close"
:ELF_str_f_read "f_read" # "f_read"
:ELF_str_f_lseek    "f_lseek" # "f_lseek"
:ELF_str_f_fopen    "f_fopen" # "f_fopen"
:ELF_str__fopen_or_end1 "_fopen_or_end1" # "_fopen_or_end1"
:ELF_str__fopen_else2   "_fopen_else2" # "_fopen_else2"
:ELF_str__fopen_else3   "_fopen_else3" # "_fopen_else3"
:ELF_str__fopen_else4   "_fopen_else4" # "_fopen_else4"
:ELF_str__fopen_else5   "_fopen_else5" # "_fopen_else5"
:ELF_str__fopen_else7   "_fopen_else7" # "_fopen_else7"
:ELF_str__fopen_else_end7   "_fopen_else_end7" # "_fopen_else_end7"
:ELF_str__fopen_else6   "_fopen_else6" # "_fopen_else6"
:ELF_str__fopen_else8   "_fopen_else8" # "_fopen_else8"
:ELF_str__fopen_else_end8   "_fopen_else_end8" # "_fopen_else_end8"
:ELF_str__fopen_else_end6   "_fopen_else_end6" # "_fopen_else_end6"
:ELF_str__fopen_else9   "_fopen_else9" # "_fopen_else9"
:ELF_str_f_fdopen   "f_fdopen" # "f_fdopen"
:ELF_str_f_fclose   "f_fclose" # "f_fclose"
:ELF_str_f_fflush   "f_fflush" # "f_fflush"
:ELF_str_f_fseek    "f_fseek" # "f_fseek"
:ELF_str_f_ftell    "f_ftell" # "f_ftell"
:ELF_str_f_fread    "f_fread" # "f_fread"
:ELF_str__fread_loop1   "_fread_loop1" # "_fread_loop1"
:ELF_str__fread_else2   "_fread_else2" # "_fread_else2"
:ELF_str__fread_else3   "_fread_else3" # "_fread_else3"
:ELF_str__fread_loop_end1   "_fread_loop_end1" # "_fread_loop_end1"
:ELF_str_f_lseek    "f_lseek" # "f_lseek"
:ELF_str_f_feof "f_feof" # "f_feof"
:ELF_str_f_fgetc    "f_fgetc" # "f_fgetc"
:ELF_str__fgetc_else1   "_fgetc_else1" # "_fgetc_else1"
:ELF_str__fgetc_else2   "_fgetc_else2" # "_fgetc_else2"
:ELF_str_f_ldexp    "f_ldexp" # "f_ldexp"
:ELF_str__ldexp_loop1   "_ldexp_loop1" # "_ldexp_loop1"
:ELF_str__ldexp_else2   "_ldexp_else2" # "_ldexp_else2"
:ELF_str__ldexp_loop_end1   "_ldexp_loop_end1" # "_ldexp_loop_end1"
:ELF_str_f_time "f_time" # "f_time"
:ELF_str_f_localtime    "f_localtime" # "f_localtime"
:ELF_str_f_gettimeofday "f_gettimeofday" # "f_gettimeofday"
:ELF_str_f_write    "f_write" # "f_write"
:ELF_str_f_fileno   "f_fileno" # "f_fileno"
:ELF_str_f_getcwd   "f_getcwd" # "f_getcwd"
:ELF_str_f_getenv   "f_getenv" # "f_getenv"
:ELF_str__getenv_loop1  "_getenv_loop1" # "_getenv_loop1"
:ELF_str__getenv_else2  "_getenv_else2" # "_getenv_else2"
:ELF_str__getenv_and_end3   "_getenv_and_end3" # "_getenv_and_end3"
:ELF_str__getenv_else4  "_getenv_else4" # "_getenv_else4"
:ELF_str__getenv_loop_end1  "_getenv_loop_end1" # "_getenv_loop_end1"
:ELF_str_f_qsort    "f_qsort" # "f_qsort"
:ELF_str__qsort_loop1   "_qsort_loop1" # "_qsort_loop1"
:ELF_str__qsort_else2   "_qsort_else2" # "_qsort_else2"
:ELF_str__qsort_loop3   "_qsort_loop3" # "_qsort_loop3"
:ELF_str__qsort_else4   "_qsort_else4" # "_qsort_else4"
:ELF_str__qsort_loop6   "_qsort_loop6" # "_qsort_loop6"
:ELF_str__qsort_else7   "_qsort_else7" # "_qsort_else7"
:ELF_str__qsort_else8   "_qsort_else8" # "_qsort_else8"
:ELF_str__qsort_else_end8   "_qsort_else_end8" # "_qsort_else_end8"
:ELF_str__qsort_loop_end6   "_qsort_loop_end6" # "_qsort_loop_end6"
:ELF_str__qsort_else5   "_qsort_else5" # "_qsort_else5"
:ELF_str__qsort_loop_end3   "_qsort_loop_end3" # "_qsort_loop_end3"
:ELF_str__qsort_loop_end1   "_qsort_loop_end1" # "_qsort_loop_end1"
:ELF_str_f_time "f_time" # "f_time"
:ELF_str_f_setjmp   "f_setjmp" # "f_setjmp"
:ELF_str_f_longjmp  "f_longjmp" # "f_longjmp"
:ELF_str_f_unlink   "f_unlink" # "f_unlink"
:ELF_str_f_sscanf   "f_sscanf" # "f_sscanf"
:ELF_str__sscanf_loop1  "_sscanf_loop1" # "_sscanf_loop1"
:ELF_str__sscanf_else2  "_sscanf_else2" # "_sscanf_else2"
:ELF_str__sscanf_else3  "_sscanf_else3" # "_sscanf_else3"
:ELF_str__sscanf_loop6  "_sscanf_loop6" # "_sscanf_loop6"
:ELF_str__sscanf_and_end7   "_sscanf_and_end7" # "_sscanf_and_end7"
:ELF_str__sscanf_else8  "_sscanf_else8" # "_sscanf_else8"
:ELF_str__sscanf_loop_end6  "_sscanf_loop_end6" # "_sscanf_loop_end6"
:ELF_str__sscanf_else5  "_sscanf_else5" # "_sscanf_else5"
:ELF_str__sscanf_else_end5  "_sscanf_else_end5" # "_sscanf_else_end5"
:ELF_str__sscanf_else4  "_sscanf_else4" # "_sscanf_else4"
:ELF_str__sscanf_else9  "_sscanf_else9" # "_sscanf_else9"
:ELF_str__sscanf_else_end4  "_sscanf_else_end4" # "_sscanf_else_end4"
:ELF_str__sscanf_else_end3  "_sscanf_else_end3" # "_sscanf_else_end3"
:ELF_str__sscanf_loop_end1  "_sscanf_loop_end1" # "_sscanf_loop_end1"
:ELF_str_f_atoi "f_atoi" # "f_atoi"
:ELF_str_f_remove   "f_remove" # "f_remove"
:ELF_str_f_execvp   "f_execvp" # "f_execvp"
:ELF_str_f_mkdir    "f_mkdir" # "f_mkdir"
:ELF_str_f_chdir    "f_chdir" # "f_chdir"
:ELF_str_f_access   "f_access" # "f_access"
:ELF_str_f_chmod    "f_chmod" # "f_chmod"
:ELF_str_f_symlink  "f_symlink" # "f_symlink"
:ELF_str_f_uname    "f_uname" # "f_uname"
:ELF_str_f_execve   "f_execve" # "f_execve"
:ELF_str_f_fgets    "f_fgets" # "f_fgets"
:ELF_str__fgets_else1   "_fgets_else1" # "_fgets_else1"
:ELF_str__fgets_loop2   "_fgets_loop2" # "_fgets_loop2"
:ELF_str__fgets_else3   "_fgets_else3" # "_fgets_else3"
:ELF_str__fgets_else4   "_fgets_else4" # "_fgets_else4"
:ELF_str__fgets_else5   "_fgets_else5" # "_fgets_else5"
:ELF_str__fgets_loop_end2   "_fgets_loop_end2" # "_fgets_loop_end2"
:ELF_str_f_require  "f_require" # "f_require"
:ELF_str__require_else1 "_require_else1" # "_require_else1"
:ELF_str_f_match    "f_match" # "f_match"
:ELF_str__match_and_end1    "_match_and_end1" # "_match_and_end1"
:ELF_str__match_else2   "_match_else2" # "_match_else2"
:ELF_str__match_else3   "_match_else3" # "_match_else3"
:ELF_str__match_else4   "_match_else4" # "_match_else4"
:ELF_str__match_loop5   "_match_loop5" # "_match_loop5"
:ELF_str__match_else6   "_match_else6" # "_match_else6"
:ELF_str__match_and_end7    "_match_and_end7" # "_match_and_end7"
:ELF_str__match_else8   "_match_else8" # "_match_else8"
:ELF_str__match_loop_end5   "_match_loop_end5" # "_match_loop_end5"
:ELF_str_f_in_set   "f_in_set" # "f_in_set"
:ELF_str__in_set_else1  "_in_set_else1" # "_in_set_else1"
:ELF_str__in_set_loop2  "_in_set_loop2" # "_in_set_loop2"
:ELF_str__in_set_else3  "_in_set_else3" # "_in_set_else3"
:ELF_str__in_set_else4  "_in_set_else4" # "_in_set_else4"
:ELF_str__in_set_loop_end2  "_in_set_loop_end2" # "_in_set_loop_end2"
:ELF_str_f___index_number   "f___index_number" # "f___index_number"
:ELF_str____index_number_loop1  "___index_number_loop1" # "___index_number_loop1"
:ELF_str____index_number_else2  "___index_number_else2" # "___index_number_else2"
:ELF_str____index_number_else3  "___index_number_else3" # "___index_number_else3"
:ELF_str____index_number_loop_end1  "___index_number_loop_end1" # "___index_number_loop_end1"
:ELF_str_f___toupper    "f___toupper" # "f___toupper"
:ELF_str____toupper_else1   "___toupper_else1" # "___toupper_else1"
:ELF_str_f___set_reader "f___set_reader" # "f___set_reader"
:ELF_str____set_reader_else1    "___set_reader_else1" # "___set_reader_else1"
:ELF_str____set_reader_loop2    "___set_reader_loop2" # "___set_reader_loop2"
:ELF_str____set_reader_else3    "___set_reader_else3" # "___set_reader_else3"
:ELF_str____set_reader_else4    "___set_reader_else4" # "___set_reader_else4"
:ELF_str____set_reader_else5    "___set_reader_else5" # "___set_reader_else5"
:ELF_str____set_reader_loop_end2    "___set_reader_loop_end2" # "___set_reader_loop_end2"
:ELF_str____set_reader_else6    "___set_reader_else6" # "___set_reader_else6"
:ELF_str____set_reader_else7    "___set_reader_else7" # "___set_reader_else7"
:ELF_str_f_strtoint "f_strtoint" # "f_strtoint"
:ELF_str__strtoint_else1    "_strtoint_else1" # "_strtoint_else1"
:ELF_str__strtoint_and_end2 "_strtoint_and_end2" # "_strtoint_and_end2"
:ELF_str__strtoint_else3    "_strtoint_else3" # "_strtoint_else3"
:ELF_str__strtoint_and_end4 "_strtoint_and_end4" # "_strtoint_and_end4"
:ELF_str__strtoint_else5    "_strtoint_else5" # "_strtoint_else5"
:ELF_str__strtoint_else6    "_strtoint_else6" # "_strtoint_else6"
:ELF_str__strtoint_else_end6    "_strtoint_else_end6" # "_strtoint_else_end6"
:ELF_str__strtoint_else_end5    "_strtoint_else_end5" # "_strtoint_else_end5"
:ELF_str__strtoint_else_end3    "_strtoint_else_end3" # "_strtoint_else_end3"
:ELF_str__strtoint_else_end1    "_strtoint_else_end1" # "_strtoint_else_end1"
:ELF_str__strtoint_else7    "_strtoint_else7" # "_strtoint_else7"
:ELF_str_f_int2str  "f_int2str" # "f_int2str"
:ELF_str__int2str_else1 "_int2str_else1" # "_int2str_else1"
:ELF_str__int2str_and_end2  "_int2str_and_end2" # "_int2str_and_end2"
:ELF_str__int2str_and_end3  "_int2str_and_end3" # "_int2str_and_end3"
:ELF_str__int2str_else5 "_int2str_else5" # "_int2str_else5"
:ELF_str__int2str_else4 "_int2str_else4" # "_int2str_else4"
:ELF_str__int2str_else_end4 "_int2str_else_end4" # "_int2str_else_end4"
:ELF_str__int2str_loop6 "_int2str_loop6" # "_int2str_loop6"
:ELF_str__int2str_else7 "_int2str_else7" # "_int2str_else7"
:ELF_str__int2str_loop_end6 "_int2str_loop_end6" # "_int2str_loop_end6"
:ELF_str__int2str_else8 "_int2str_else8" # "_int2str_else8"
:ELF_str_f_consume_token    "f_consume_token" # "f_consume_token"
:ELF_str__consume_token_loop1   "_consume_token_loop1" # "_consume_token_loop1"
:ELF_str__consume_token_else2   "_consume_token_else2" # "_consume_token_else2"
:ELF_str__consume_token_else3   "_consume_token_else3" # "_consume_token_else3"
:ELF_str__consume_token_loop_end1   "_consume_token_loop_end1" # "_consume_token_loop_end1"
:ELF_str_f_storeLabel   "f_storeLabel" # "f_storeLabel"
:ELF_str_f_line_Comment "f_line_Comment" # "f_line_Comment"
:ELF_str__line_Comment_loop1    "_line_Comment_loop1" # "_line_Comment_loop1"
:ELF_str__line_Comment_else2    "_line_Comment_else2" # "_line_Comment_else2"
:ELF_str__line_Comment_else3    "_line_Comment_else3" # "_line_Comment_else3"
:ELF_str__line_Comment_loop_end1    "_line_Comment_loop_end1" # "_line_Comment_loop_end1"
:ELF_str_f_purge_string "f_purge_string" # "f_purge_string"
:ELF_str__purge_string_loop1    "_purge_string_loop1" # "_purge_string_loop1"
:ELF_str__purge_string_and_end2 "_purge_string_and_end2" # "_purge_string_and_end2"
:ELF_str__purge_string_else3    "_purge_string_else3" # "_purge_string_else3"
:ELF_str__purge_string_loop_end1    "_purge_string_loop_end1" # "_purge_string_loop_end1"
:ELF_str_f_first_pass   "f_first_pass" # "f_first_pass"
:ELF_str__first_pass_else1  "_first_pass_else1" # "_first_pass_else1"
:ELF_str__first_pass_else2  "_first_pass_else2" # "_first_pass_else2"
:ELF_str__first_pass_loop3  "_first_pass_loop3" # "_first_pass_loop3"
:ELF_str__first_pass_else4  "_first_pass_else4" # "_first_pass_else4"
:ELF_str__first_pass_else5  "_first_pass_else5" # "_first_pass_else5"
:ELF_str__first_pass_or_end6    "_first_pass_or_end6" # "_first_pass_or_end6"
:ELF_str__first_pass_else7  "_first_pass_else7" # "_first_pass_else7"
:ELF_str__first_pass_else8  "_first_pass_else8" # "_first_pass_else8"
:ELF_str__first_pass_else_end7  "_first_pass_else_end7" # "_first_pass_else_end7"
:ELF_str__first_pass_else_end5  "_first_pass_else_end5" # "_first_pass_else_end5"
:ELF_str__first_pass_loop_end3  "_first_pass_loop_end3" # "_first_pass_loop_end3"
:ELF_str_f_output_string_table  "f_output_string_table" # "f_output_string_table"
:ELF_str__output_string_table_loop1 "_output_string_table_loop1" # "_output_string_table_loop1"
:ELF_str__output_string_table_else2 "_output_string_table_else2" # "_output_string_table_else2"
:ELF_str__output_string_table_loop3 "_output_string_table_loop3" # "_output_string_table_loop3"
:ELF_str__output_string_table_else4 "_output_string_table_else4" # "_output_string_table_else4"
:ELF_str__output_string_table_else5 "_output_string_table_else5" # "_output_string_table_else5"
:ELF_str__output_string_table_else6 "_output_string_table_else6" # "_output_string_table_else6"
:ELF_str__output_string_table_else7 "_output_string_table_else7" # "_output_string_table_else7"
:ELF_str__output_string_table_else_end6 "_output_string_table_else_end6" # "_output_string_table_else_end6"
:ELF_str__output_string_table_else_end5 "_output_string_table_else_end5" # "_output_string_table_else_end5"
:ELF_str__output_string_table_loop_end3 "_output_string_table_loop_end3" # "_output_string_table_loop_end3"
:ELF_str__output_string_table_loop_end1 "_output_string_table_loop_end1" # "_output_string_table_loop_end1"
:ELF_str_f_output_symbol_table  "f_output_symbol_table" # "f_output_symbol_table"
:ELF_str__output_symbol_table_else1 "_output_symbol_table_else1" # "_output_symbol_table_else1"
:ELF_str__output_symbol_table_else_end1 "_output_symbol_table_else_end1" # "_output_symbol_table_else_end1"
:ELF_str__output_symbol_table_loop2 "_output_symbol_table_loop2" # "_output_symbol_table_loop2"
:ELF_str__output_symbol_table_else3 "_output_symbol_table_else3" # "_output_symbol_table_else3"
:ELF_str__output_symbol_table_and_end5  "_output_symbol_table_and_end5" # "_output_symbol_table_and_end5"
:ELF_str__output_symbol_table_else6 "_output_symbol_table_else6" # "_output_symbol_table_else6"
:ELF_str__output_symbol_table_else_end6 "_output_symbol_table_else_end6" # "_output_symbol_table_else_end6"
:ELF_str__output_symbol_table_else4 "_output_symbol_table_else4" # "_output_symbol_table_else4"
:ELF_str__output_symbol_table_and_end7  "_output_symbol_table_and_end7" # "_output_symbol_table_and_end7"
:ELF_str__output_symbol_table_else8 "_output_symbol_table_else8" # "_output_symbol_table_else8"
:ELF_str__output_symbol_table_else_end8 "_output_symbol_table_else_end8" # "_output_symbol_table_else_end8"
:ELF_str__output_symbol_table_else_end4 "_output_symbol_table_else_end4" # "_output_symbol_table_else_end4"
:ELF_str__output_symbol_table_loop_end2 "_output_symbol_table_loop_end2" # "_output_symbol_table_loop_end2"
:ELF_str_f_reverse_list "f_reverse_list" # "f_reverse_list"
:ELF_str__reverse_list_loop1    "_reverse_list_loop1" # "_reverse_list_loop1"
:ELF_str__reverse_list_else2    "_reverse_list_else2" # "_reverse_list_else2"
:ELF_str__reverse_list_loop_end1    "_reverse_list_loop_end1" # "_reverse_list_loop_end1"
:ELF_str_f_write_int    "f_write_int" # "f_write_int"
:ELF_str_f_write_register   "f_write_register" # "f_write_register"
:ELF_str__write_register_else1  "_write_register_else1" # "_write_register_else1"
:ELF_str_f_write_section    "f_write_section" # "f_write_section"
:ELF_str__write_section_else1   "_write_section_else1" # "_write_section_else1"
:ELF_str__write_section_else_end1   "_write_section_else_end1" # "_write_section_else_end1"
:ELF_str_f_nibble_to_hex    "f_nibble_to_hex" # "f_nibble_to_hex"
:ELF_str__nibble_to_hex_else1   "_nibble_to_hex_else1" # "_nibble_to_hex_else1"
:ELF_str__nibble_to_hex_else_end1   "_nibble_to_hex_else_end1" # "_nibble_to_hex_else_end1"
:ELF_str_f_get_string   "f_get_string" # "f_get_string"
:ELF_str__get_string_loop1  "_get_string_loop1" # "_get_string_loop1"
:ELF_str__get_string_else2  "_get_string_else2" # "_get_string_else2"
:ELF_str__get_string_loop_end1  "_get_string_loop_end1" # "_get_string_loop_end1"
:ELF_str_f_setup_string "f_setup_string" # "f_setup_string"
:ELF_str__setup_string_else1    "_setup_string_else1" # "_setup_string_else1"
:ELF_str__setup_string_else2    "_setup_string_else2" # "_setup_string_else2"
:ELF_str__setup_string_else3    "_setup_string_else3" # "_setup_string_else3"
:ELF_str__setup_string_else_end3    "_setup_string_else_end3" # "_setup_string_else_end3"
:ELF_str__setup_string_else_end2    "_setup_string_else_end2" # "_setup_string_else_end2"
:ELF_str__setup_string_else_end1    "_setup_string_else_end1" # "_setup_string_else_end1"
:ELF_str_f_setup_strings    "f_setup_strings" # "f_setup_strings"
:ELF_str_f_main "f_main" # "f_main"
:ELF_str__main_loop1    "_main_loop1" # "_main_loop1"
:ELF_str__main_else2    "_main_else2" # "_main_else2"
:ELF_str__main_else3    "_main_else3" # "_main_else3"
:ELF_str__main_or_end4  "_main_or_end4" # "_main_or_end4"
:ELF_str__main_else5    "_main_else5" # "_main_else5"
:ELF_str__main_else6    "_main_else6" # "_main_else6"
:ELF_str__main_or_end7  "_main_or_end7" # "_main_or_end7"
:ELF_str__main_else8    "_main_else8" # "_main_else8"
:ELF_str__main_or_end9  "_main_or_end9" # "_main_or_end9"
:ELF_str__main_else11   "_main_else11" # "_main_else11"
:ELF_str__main_else10   "_main_else10" # "_main_else10"
:ELF_str__main_or_end12 "_main_or_end12" # "_main_or_end12"
:ELF_str__main_else13   "_main_else13" # "_main_else13"
:ELF_str__main_or_end14 "_main_or_end14" # "_main_or_end14"
:ELF_str__main_else15   "_main_else15" # "_main_else15"
:ELF_str__main_or_end16 "_main_or_end16" # "_main_or_end16"
:ELF_str__main_else17   "_main_else17" # "_main_else17"
:ELF_str__main_else18   "_main_else18" # "_main_else18"
:ELF_str__main_else19   "_main_else19" # "_main_else19"
:ELF_str__main_or_end20 "_main_or_end20" # "_main_or_end20"
:ELF_str__main_else21   "_main_else21" # "_main_else21"
:ELF_str__main_else22   "_main_else22" # "_main_else22"
:ELF_str__main_else_end22   "_main_else_end22" # "_main_else_end22"
:ELF_str__main_else_end21   "_main_else_end21" # "_main_else_end21"
:ELF_str__main_else_end19   "_main_else_end19" # "_main_else_end19"
:ELF_str__main_else_end18   "_main_else_end18" # "_main_else_end18"
:ELF_str__main_else_end17   "_main_else_end17" # "_main_else_end17"
:ELF_str__main_else_end15   "_main_else_end15" # "_main_else_end15"
:ELF_str__main_else_end13   "_main_else_end13" # "_main_else_end13"
:ELF_str__main_else_end10   "_main_else_end10" # "_main_else_end10"
:ELF_str__main_else_end8    "_main_else_end8" # "_main_else_end8"
:ELF_str__main_else_end6    "_main_else_end6" # "_main_else_end6"
:ELF_str__main_else_end5    "_main_else_end5" # "_main_else_end5"
:ELF_str__main_else_end3    "_main_else_end3" # "_main_else_end3"
:ELF_str__main_loop_end1    "_main_loop_end1" # "_main_loop_end1"
:ELF_str__main_else23   "_main_else23" # "_main_else23"
:ELF_str__main_else24   "_main_else24" # "_main_else24"
:ELF_str__main_else25   "_main_else25" # "_main_else25"
:ELF_str__main_else_end25   "_main_else_end25" # "_main_else_end25"
:ELF_str_f___init_globals__ "f___init_globals__" # "f___init_globals__"
:ELF_str_ELF_data   "ELF_data" # "ELF_data"
:ELF_str_SYS_MALLOC "SYS_MALLOC" # "SYS_MALLOC"
:ELF_str_string_0   "string_0" # "string_0"
:ELF_str_string_1   "string_1" # "string_1"
:ELF_str_string_2   "string_2" # "string_2"
:ELF_str_string_3   "string_3" # "string_3"
:ELF_str_string_4   "string_4" # "string_4"
:ELF_str_string_5   "string_5" # "string_5"
:ELF_str_string_6   "string_6" # "string_6"
:ELF_str_string_7   "string_7" # "string_7"
:ELF_str_string_8   "string_8" # "string_8"
:ELF_str_string_9   "string_9" # "string_9"
:ELF_str_string_10  "string_10" # "string_10"
:ELF_str_string_11  "string_11" # "string_11"
:ELF_str_string_12  "string_12" # "string_12"
:ELF_str_string_13  "string_13" # "string_13"
:ELF_str_string_14  "string_14" # "string_14"
:ELF_str_string_15  "string_15" # "string_15"
:ELF_str_string_16  "string_16" # "string_16"
:ELF_str_string_17  "string_17" # "string_17"
:ELF_str_string_18  "string_18" # "string_18"
:ELF_str_string_19  "string_19" # "string_19"
:ELF_str_string_20  "string_20" # "string_20"
:ELF_str_string_21  "string_21" # "string_21"
:ELF_str_string_22  "string_22" # "string_22"
:ELF_str_string_23  "string_23" # "string_23"
:ELF_str_string_24  "string_24" # "string_24"
:ELF_str_string_25  "string_25" # "string_25"
:ELF_str_string_26  "string_26" # "string_26"
:ELF_str_string_27  "string_27" # "string_27"
:ELF_str_string_28  "string_28" # "string_28"
:ELF_str_string_29  "string_29" # "string_29"
:ELF_str_string_30  "string_30" # "string_30"
:ELF_str_string_31  "string_31" # "string_31"
:ELF_str_string_32  "string_32" # "string_32"
:ELF_str_string_33  "string_33" # "string_33"
:ELF_str_string_34  "string_34" # "string_34"
:ELF_str_string_35  "string_35" # "string_35"
:ELF_str_string_36  "string_36" # "string_36"
:ELF_str_string_37  "string_37" # "string_37"
:ELF_str_string_38  "string_38" # "string_38"
:ELF_str_string_39  "string_39" # "string_39"
:ELF_str_string_40  "string_40" # "string_40"
:ELF_str_string_41  "string_41" # "string_41"
:ELF_str_string_42  "string_42" # "string_42"
:ELF_str_string_43  "string_43" # "string_43"
:ELF_str_string_44  "string_44" # "string_44"
:ELF_str_string_45  "string_45" # "string_45"
:ELF_str_string_46  "string_46" # "string_46"
:ELF_str_string_47  "string_47" # "string_47"
:ELF_str_string_48  "string_48" # "string_48"
:ELF_str_string_49  "string_49" # "string_49"
:ELF_str_string_50  "string_50" # "string_50"
:ELF_str_string_51  "string_51" # "string_51"
:ELF_str_string_52  "string_52" # "string_52"
:ELF_str_string_53  "string_53" # "string_53"
:ELF_str_string_54  "string_54" # "string_54"
:ELF_str_string_55  "string_55" # "string_55"
:ELF_str_string_56  "string_56" # "string_56"
:ELF_str_string_57  "string_57" # "string_57"
:ELF_str_string_58  "string_58" # "string_58"
:ELF_str_string_59  "string_59" # "string_59"
:ELF_str_string_60  "string_60" # "string_60"
:ELF_str_string_61  "string_61" # "string_61"
:ELF_str_string_62  "string_62" # "string_62"
:ELF_str_string_63  "string_63" # "string_63"
:ELF_str_string_64  "string_64" # "string_64"
:ELF_str_string_65  "string_65" # "string_65"
:ELF_str_string_66  "string_66" # "string_66"
:ELF_str_string_67  "string_67" # "string_67"
:ELF_str_string_68  "string_68" # "string_68"
:ELF_str_string_69  "string_69" # "string_69"
:ELF_str_string_70  "string_70" # "string_70"
:ELF_str_string_71  "string_71" # "string_71"
:ELF_str_string_72  "string_72" # "string_72"
:ELF_str_string_73  "string_73" # "string_73"
:ELF_str_string_74  "string_74" # "string_74"
:ELF_str_string_75  "string_75" # "string_75"
:ELF_str_string_76  "string_76" # "string_76"
:ELF_str_string_77  "string_77" # "string_77"
:ELF_str_string_78  "string_78" # "string_78"
:ELF_str_string_79  "string_79" # "string_79"
:ELF_str_string_80  "string_80" # "string_80"
:ELF_str_string_81  "string_81" # "string_81"
:ELF_str_string_82  "string_82" # "string_82"
:ELF_str_string_83  "string_83" # "string_83"
:ELF_str_string_84  "string_84" # "string_84"
:ELF_str_string_85  "string_85" # "string_85"
:ELF_str_string_86  "string_86" # "string_86"
:ELF_str_string_87  "string_87" # "string_87"
:ELF_str_string_88  "string_88" # "string_88"
:ELF_str_string_89  "string_89" # "string_89"
:ELF_str_string_90  "string_90" # "string_90"
:ELF_str_string_91  "string_91" # "string_91"
:ELF_str_string_92  "string_92" # "string_92"
:ELF_str_string_93  "string_93" # "string_93"
:ELF_str_string_94  "string_94" # "string_94"
:ELF_str_string_95  "string_95" # "string_95"
:ELF_str_string_96  "string_96" # "string_96"
:ELF_str_string_97  "string_97" # "string_97"
:ELF_str_string_98  "string_98" # "string_98"
:ELF_str_string_99  "string_99" # "string_99"
:ELF_str_string_100 "string_100" # "string_100"
:ELF_str_string_101 "string_101" # "string_101"
:ELF_str_string_102 "string_102" # "string_102"
:ELF_str_string_103 "string_103" # "string_103"
:ELF_str_string_104 "string_104" # "string_104"
:ELF_str_string_105 "string_105" # "string_105"
:ELF_str_string_106 "string_106" # "string_106"
:ELF_str_string_107 "string_107" # "string_107"
:ELF_str_string_108 "string_108" # "string_108"
:ELF_str_string_109 "string_109" # "string_109"
:ELF_str_string_110 "string_110" # "string_110"
:ELF_str_string_111 "string_111" # "string_111"
:ELF_str_string_112 "string_112" # "string_112"
:ELF_str_string_113 "string_113" # "string_113"
:ELF_str_string_114 "string_114" # "string_114"
:ELF_str_string_115 "string_115" # "string_115"
:ELF_str_string_116 "string_116" # "string_116"
:ELF_str_string_117 "string_117" # "string_117"
:ELF_str_string_118 "string_118" # "string_118"
:ELF_str_string_119 "string_119" # "string_119"
:ELF_str_string_120 "string_120" # "string_120"
:ELF_str_string_121 "string_121" # "string_121"
:ELF_str_string_122 "string_122" # "string_122"
:ELF_str_g___sys_stdin  "g___sys_stdin" # "g___sys_stdin"
:ELF_str_g___sys_stdout "g___sys_stdout" # "g___sys_stdout"
:ELF_str_g___sys_stderr "g___sys_stderr" # "g___sys_stderr"
:ELF_str_g_stdin    "g_stdin" # "g_stdin"
:ELF_str_g_stdout   "g_stdout" # "g_stdout"
:ELF_str_g_stderr   "g_stderr" # "g_stderr"
:ELF_str_g_errno    "g_errno" # "g_errno"
:ELF_str_g_LINE_MACRO_OUTPUT_FORMAT_GCC "g_LINE_MACRO_OUTPUT_FORMAT_GCC" # "g_LINE_MACRO_OUTPUT_FORMAT_GCC"
:ELF_str_g_LINE_MACRO_OUTPUT_FORMAT_NONE    "g_LINE_MACRO_OUTPUT_FORMAT_NONE" # "g_LINE_MACRO_OUTPUT_FORMAT_NONE"
:ELF_str_g_LINE_MACRO_OUTPUT_FORMAT_STD "g_LINE_MACRO_OUTPUT_FORMAT_STD" # "g_LINE_MACRO_OUTPUT_FORMAT_STD"
:ELF_str_g_LINE_MACRO_OUTPUT_FORMAT_P10 "g_LINE_MACRO_OUTPUT_FORMAT_P10" # "g_LINE_MACRO_OUTPUT_FORMAT_P10"
:ELF_str_g__sys_env "g__sys_env" # "g__sys_env"
:ELF_str_g_max_string   "g_max_string" # "g_max_string"
:ELF_str_g_BITSIZE  "g_BITSIZE" # "g_BITSIZE"
:ELF_str_g_BigEndian    "g_BigEndian" # "g_BigEndian"
:ELF_str_g_BINARY   "g_BINARY" # "g_BINARY"
:ELF_str_g_OCTAL    "g_OCTAL" # "g_OCTAL"
:ELF_str_g_HEX  "g_HEX" # "g_HEX"
:ELF_str_g_zero_8   "g_zero_8" # "g_zero_8"
:ELF_str_g_zero_16  "g_zero_16" # "g_zero_16"
:ELF_str_g_zero_32  "g_zero_32" # "g_zero_32"
:ELF_str_g_one_16   "g_one_16" # "g_one_16"
:ELF_str_g_one_32   "g_one_32" # "g_one_32"
:ELF_str_g_two_8    "g_two_8" # "g_two_8"
:ELF_str_g_two_32   "g_two_32" # "g_two_32"
:ELF_str_g_three_32 "g_three_32" # "g_three_32"
:ELF_str_g_six_32   "g_six_32" # "g_six_32"
:ELF_str_g_sixteen_32   "g_sixteen_32" # "g_sixteen_32"
:ELF_str_g_twentyfour_32    "g_twentyfour_32" # "g_twentyfour_32"
:ELF_str_g_output   "g_output" # "g_output"
:ELF_str_g_jump_table   "g_jump_table" # "g_jump_table"
:ELF_str_g_count    "g_count" # "g_count"
:ELF_str_g_entry    "g_entry" # "g_entry"
:ELF_str_ELF_end    "ELF_end" # "ELF_end"
# END Generated string table


# Generated symbol table
:ELF_sym
# Required NULL symbol entry
00000000    # st_name
00000000    # st_value
00000000    # st_size
00  # st_info
00  # st_other
0100    # st_shndx

%ELF_str_ELF_text>ELF_str   # st_name
&ELF_text   #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
00  # st_other (default)
0100    # st_shndx

%ELF_str__start>ELF_str # st_name
&_start #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
02  # st_other (hidden)
0100    # st_shndx

%ELF_str_f_sys_int80>ELF_str    # st_name
&f_sys_int80    #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
00  # st_other (default)
0100    # st_shndx

%ELF_str_f_sys_malloc>ELF_str   # st_name
&f_sys_malloc   #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
00  # st_other (default)
0100    # st_shndx

%ELF_str_SYS_MALLOC>ELF_str # st_name
&SYS_MALLOC #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
00  # st_other (default)
0100    # st_shndx

%ELF_str_f_exit>ELF_str # st_name
&f_exit #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
00  # st_other (default)
0100    # st_shndx

%ELF_str_f_memcpy>ELF_str   # st_name
&f_memcpy   #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
00  # st_other (default)
0100    # st_shndx

%ELF_str__memcpy_loop1>ELF_str  # st_name
&_memcpy_loop1  #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
02  # st_other (hidden)
0100    # st_shndx

%ELF_str__memcpy_else2>ELF_str  # st_name
&_memcpy_else2  #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
02  # st_other (hidden)
0100    # st_shndx

%ELF_str__memcpy_loop_end1>ELF_str  # st_name
&_memcpy_loop_end1  #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
02  # st_other (hidden)
0100    # st_shndx

%ELF_str_f_memmove>ELF_str  # st_name
&f_memmove  #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
00  # st_other (default)
0100    # st_shndx

%ELF_str__memmove_loop2>ELF_str # st_name
&_memmove_loop2 #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
02  # st_other (hidden)
0100    # st_shndx

%ELF_str__memmove_else3>ELF_str # st_name
&_memmove_else3 #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
02  # st_other (hidden)
0100    # st_shndx

%ELF_str__memmove_loop_end2>ELF_str # st_name
&_memmove_loop_end2 #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
02  # st_other (hidden)
0100    # st_shndx

%ELF_str__memmove_else1>ELF_str # st_name
&_memmove_else1 #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
02  # st_other (hidden)
0100    # st_shndx

%ELF_str__memmove_loop5>ELF_str # st_name
&_memmove_loop5 #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
02  # st_other (hidden)
0100    # st_shndx

%ELF_str__memmove_else6>ELF_str # st_name
&_memmove_else6 #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
02  # st_other (hidden)
0100    # st_shndx

%ELF_str__memmove_loop_end5>ELF_str # st_name
&_memmove_loop_end5 #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
02  # st_other (hidden)
0100    # st_shndx

%ELF_str__memmove_else4>ELF_str # st_name
&_memmove_else4 #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
02  # st_other (hidden)
0100    # st_shndx

%ELF_str__memmove_else_end1>ELF_str # st_name
&_memmove_else_end1 #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
02  # st_other (hidden)
0100    # st_shndx

%ELF_str_f_memset>ELF_str   # st_name
&f_memset   #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
00  # st_other (default)
0100    # st_shndx

%ELF_str__memset_loop1>ELF_str  # st_name
&_memset_loop1  #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
02  # st_other (hidden)
0100    # st_shndx

%ELF_str__memset_else2>ELF_str  # st_name
&_memset_else2  #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
02  # st_other (hidden)
0100    # st_shndx

%ELF_str__memset_loop_end1>ELF_str  # st_name
&_memset_loop_end1  #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
02  # st_other (hidden)
0100    # st_shndx

%ELF_str_f_memcmp>ELF_str   # st_name
&f_memcmp   #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
00  # st_other (default)
0100    # st_shndx

%ELF_str__memcmp_loop1>ELF_str  # st_name
&_memcmp_loop1  #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
02  # st_other (hidden)
0100    # st_shndx

%ELF_str__memcmp_else2>ELF_str  # st_name
&_memcmp_else2  #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
02  # st_other (hidden)
0100    # st_shndx

%ELF_str__memcmp_else3>ELF_str  # st_name
&_memcmp_else3  #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
02  # st_other (hidden)
0100    # st_shndx

%ELF_str__memcmp_loop_end1>ELF_str  # st_name
&_memcmp_loop_end1  #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
02  # st_other (hidden)
0100    # st_shndx

%ELF_str_f_strlen>ELF_str   # st_name
&f_strlen   #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
00  # st_other (default)
0100    # st_shndx

%ELF_str__strlen_loop1>ELF_str  # st_name
&_strlen_loop1  #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
02  # st_other (hidden)
0100    # st_shndx

%ELF_str__strlen_else2>ELF_str  # st_name
&_strlen_else2  #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
02  # st_other (hidden)
0100    # st_shndx

%ELF_str__strlen_loop_end1>ELF_str  # st_name
&_strlen_loop_end1  #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
02  # st_other (hidden)
0100    # st_shndx

%ELF_str_f_strcpy>ELF_str   # st_name
&f_strcpy   #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
00  # st_other (default)
0100    # st_shndx

%ELF_str__strcpy_loop1>ELF_str  # st_name
&_strcpy_loop1  #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
02  # st_other (hidden)
0100    # st_shndx

%ELF_str__strcpy_else2>ELF_str  # st_name
&_strcpy_else2  #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
02  # st_other (hidden)
0100    # st_shndx

%ELF_str__strcpy_loop_end1>ELF_str  # st_name
&_strcpy_loop_end1  #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
02  # st_other (hidden)
0100    # st_shndx

%ELF_str_f_strncpy>ELF_str  # st_name
&f_strncpy  #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
00  # st_other (default)
0100    # st_shndx

%ELF_str__strncpy_loop1>ELF_str # st_name
&_strncpy_loop1 #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
02  # st_other (hidden)
0100    # st_shndx

%ELF_str__strncpy_else2>ELF_str # st_name
&_strncpy_else2 #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
02  # st_other (hidden)
0100    # st_shndx

%ELF_str__strncpy_else3>ELF_str # st_name
&_strncpy_else3 #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
02  # st_other (hidden)
0100    # st_shndx

%ELF_str__strncpy_loop_end1>ELF_str # st_name
&_strncpy_loop_end1 #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
02  # st_other (hidden)
0100    # st_shndx

%ELF_str_f_strcat>ELF_str   # st_name
&f_strcat   #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
00  # st_other (default)
0100    # st_shndx

%ELF_str_f_strchr>ELF_str   # st_name
&f_strchr   #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
00  # st_other (default)
0100    # st_shndx

%ELF_str__strchr_loop1>ELF_str  # st_name
&_strchr_loop1  #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
02  # st_other (hidden)
0100    # st_shndx

%ELF_str__strchr_else2>ELF_str  # st_name
&_strchr_else2  #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
02  # st_other (hidden)
0100    # st_shndx

%ELF_str__strchr_else3>ELF_str  # st_name
&_strchr_else3  #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
02  # st_other (hidden)
0100    # st_shndx

%ELF_str__strchr_loop_end1>ELF_str  # st_name
&_strchr_loop_end1  #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
02  # st_other (hidden)
0100    # st_shndx

%ELF_str__strchr_else4>ELF_str  # st_name
&_strchr_else4  #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
02  # st_other (hidden)
0100    # st_shndx

%ELF_str__strchr_else_end4>ELF_str  # st_name
&_strchr_else_end4  #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
02  # st_other (hidden)
0100    # st_shndx

%ELF_str_f_strrchr>ELF_str  # st_name
&f_strrchr  #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
00  # st_other (default)
0100    # st_shndx

%ELF_str__strrchr_loop1>ELF_str # st_name
&_strrchr_loop1 #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
02  # st_other (hidden)
0100    # st_shndx

%ELF_str__strrchr_else2>ELF_str # st_name
&_strrchr_else2 #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
02  # st_other (hidden)
0100    # st_shndx

%ELF_str__strrchr_else3>ELF_str # st_name
&_strrchr_else3 #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
02  # st_other (hidden)
0100    # st_shndx

%ELF_str__strrchr_loop_end1>ELF_str # st_name
&_strrchr_loop_end1 #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
02  # st_other (hidden)
0100    # st_shndx

%ELF_str_f_strcmp>ELF_str   # st_name
&f_strcmp   #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
00  # st_other (default)
0100    # st_shndx

%ELF_str__strcmp_loop1>ELF_str  # st_name
&_strcmp_loop1  #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
02  # st_other (hidden)
0100    # st_shndx

%ELF_str__strcmp_or_end2>ELF_str    # st_name
&_strcmp_or_end2    #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
02  # st_other (hidden)
0100    # st_shndx

%ELF_str__strcmp_else3>ELF_str  # st_name
&_strcmp_else3  #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
02  # st_other (hidden)
0100    # st_shndx

%ELF_str__strcmp_loop_end1>ELF_str  # st_name
&_strcmp_loop_end1  #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
02  # st_other (hidden)
0100    # st_shndx

%ELF_str_f_strncmp>ELF_str  # st_name
&f_strncmp  #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
00  # st_other (default)
0100    # st_shndx

%ELF_str__strncmp_loop1>ELF_str # st_name
&_strncmp_loop1 #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
02  # st_other (hidden)
0100    # st_shndx

%ELF_str__strncmp_else2>ELF_str # st_name
&_strncmp_else2 #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
02  # st_other (hidden)
0100    # st_shndx

%ELF_str__strncmp_or_end3>ELF_str   # st_name
&_strncmp_or_end3   #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
02  # st_other (hidden)
0100    # st_shndx

%ELF_str__strncmp_else4>ELF_str # st_name
&_strncmp_else4 #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
02  # st_other (hidden)
0100    # st_shndx

%ELF_str__strncmp_loop_end1>ELF_str # st_name
&_strncmp_loop_end1 #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
02  # st_other (hidden)
0100    # st_shndx

%ELF_str_f_strstr>ELF_str   # st_name
&f_strstr   #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
00  # st_other (default)
0100    # st_shndx

%ELF_str__strstr_loop1>ELF_str  # st_name
&_strstr_loop1  #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
02  # st_other (hidden)
0100    # st_shndx

%ELF_str__strstr_else2>ELF_str  # st_name
&_strstr_else2  #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
02  # st_other (hidden)
0100    # st_shndx

%ELF_str__strstr_else3>ELF_str  # st_name
&_strstr_else3  #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
02  # st_other (hidden)
0100    # st_shndx

%ELF_str__strstr_loop_end1>ELF_str  # st_name
&_strstr_loop_end1  #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
02  # st_other (hidden)
0100    # st_shndx

%ELF_str_f_strtoul>ELF_str  # st_name
&f_strtoul  #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
00  # st_other (default)
0100    # st_shndx

%ELF_str__strtoul_or_end3>ELF_str   # st_name
&_strtoul_or_end3   #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
02  # st_other (hidden)
0100    # st_shndx

%ELF_str__strtoul_else4>ELF_str # st_name
&_strtoul_else4 #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
02  # st_other (hidden)
0100    # st_shndx

%ELF_str__strtoul_else2>ELF_str # st_name
&_strtoul_else2 #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
02  # st_other (hidden)
0100    # st_shndx

%ELF_str__strtoul_else1>ELF_str # st_name
&_strtoul_else1 #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
02  # st_other (hidden)
0100    # st_shndx

%ELF_str__strtoul_else5>ELF_str # st_name
&_strtoul_else5 #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
02  # st_other (hidden)
0100    # st_shndx

%ELF_str__strtoul_else_end5>ELF_str # st_name
&_strtoul_else_end5 #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
02  # st_other (hidden)
0100    # st_shndx

%ELF_str__strtoul_loop6>ELF_str # st_name
&_strtoul_loop6 #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
02  # st_other (hidden)
0100    # st_shndx

%ELF_str__strtoul_and_end7>ELF_str  # st_name
&_strtoul_and_end7  #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
02  # st_other (hidden)
0100    # st_shndx

%ELF_str__strtoul_else8>ELF_str # st_name
&_strtoul_else8 #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
02  # st_other (hidden)
0100    # st_shndx

%ELF_str__strtoul_and_end9>ELF_str  # st_name
&_strtoul_and_end9  #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
02  # st_other (hidden)
0100    # st_shndx

%ELF_str__strtoul_else10>ELF_str    # st_name
&_strtoul_else10    #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
02  # st_other (hidden)
0100    # st_shndx

%ELF_str__strtoul_and_end11>ELF_str # st_name
&_strtoul_and_end11 #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
02  # st_other (hidden)
0100    # st_shndx

%ELF_str__strtoul_else12>ELF_str    # st_name
&_strtoul_else12    #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
02  # st_other (hidden)
0100    # st_shndx

%ELF_str__strtoul_else_end12>ELF_str    # st_name
&_strtoul_else_end12    #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
02  # st_other (hidden)
0100    # st_shndx

%ELF_str__strtoul_else_end10>ELF_str    # st_name
&_strtoul_else_end10    #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
02  # st_other (hidden)
0100    # st_shndx

%ELF_str__strtoul_else_end8>ELF_str # st_name
&_strtoul_else_end8 #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
02  # st_other (hidden)
0100    # st_shndx

%ELF_str__strtoul_loop_end6>ELF_str # st_name
&_strtoul_loop_end6 #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
02  # st_other (hidden)
0100    # st_shndx

%ELF_str__strtoul_else13>ELF_str    # st_name
&_strtoul_else13    #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
02  # st_other (hidden)
0100    # st_shndx

%ELF_str_f_strtol>ELF_str   # st_name
&f_strtol   #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
00  # st_other (default)
0100    # st_shndx

%ELF_str__strtol_else1>ELF_str  # st_name
&_strtol_else1  #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
02  # st_other (hidden)
0100    # st_shndx

%ELF_str_f_strtoll>ELF_str  # st_name
&f_strtoll  #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
00  # st_other (default)
0100    # st_shndx

%ELF_str_f_strtoull>ELF_str # st_name
&f_strtoull #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
00  # st_other (default)
0100    # st_shndx

%ELF_str_f_strtof>ELF_str   # st_name
&f_strtof   #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
00  # st_other (default)
0100    # st_shndx

%ELF_str_f_malloc>ELF_str   # st_name
&f_malloc   #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
00  # st_other (default)
0100    # st_shndx

%ELF_str_f_realloc>ELF_str  # st_name
&f_realloc  #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
00  # st_other (default)
0100    # st_shndx

%ELF_str__realloc_loop2>ELF_str # st_name
&_realloc_loop2 #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
02  # st_other (hidden)
0100    # st_shndx

%ELF_str__realloc_else3>ELF_str # st_name
&_realloc_else3 #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
02  # st_other (hidden)
0100    # st_shndx

%ELF_str__realloc_loop_end2>ELF_str # st_name
&_realloc_loop_end2 #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
02  # st_other (hidden)
0100    # st_shndx

%ELF_str__realloc_else1>ELF_str # st_name
&_realloc_else1 #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
02  # st_other (hidden)
0100    # st_shndx

%ELF_str_f_calloc>ELF_str   # st_name
&f_calloc   #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
00  # st_other (default)
0100    # st_shndx

%ELF_str__calloc_loop1>ELF_str  # st_name
&_calloc_loop1  #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
02  # st_other (hidden)
0100    # st_shndx

%ELF_str__calloc_else2>ELF_str  # st_name
&_calloc_else2  #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
02  # st_other (hidden)
0100    # st_shndx

%ELF_str__calloc_loop_end1>ELF_str  # st_name
&_calloc_loop_end1  #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
02  # st_other (hidden)
0100    # st_shndx

%ELF_str_f_free>ELF_str # st_name
&f_free #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
00  # st_other (default)
0100    # st_shndx

%ELF_str_f_fwrite>ELF_str   # st_name
&f_fwrite   #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
00  # st_other (default)
0100    # st_shndx

%ELF_str_f_fputc>ELF_str    # st_name
&f_fputc    #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
00  # st_other (default)
0100    # st_shndx

%ELF_str_f_fputs>ELF_str    # st_name
&f_fputs    #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
00  # st_other (default)
0100    # st_shndx

%ELF_str_f___sys_printf>ELF_str # st_name
&f___sys_printf #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
00  # st_other (default)
0100    # st_shndx

%ELF_str____sys_printf_loop1>ELF_str    # st_name
&___sys_printf_loop1    #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
02  # st_other (hidden)
0100    # st_shndx

%ELF_str____sys_printf_else2>ELF_str    # st_name
&___sys_printf_else2    #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
02  # st_other (hidden)
0100    # st_shndx

%ELF_str____sys_printf_else4>ELF_str    # st_name
&___sys_printf_else4    #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
02  # st_other (hidden)
0100    # st_shndx

%ELF_str____sys_printf_else5>ELF_str    # st_name
&___sys_printf_else5    #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
02  # st_other (hidden)
0100    # st_shndx

%ELF_str____sys_printf_else_end4>ELF_str    # st_name
&___sys_printf_else_end4    #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
02  # st_other (hidden)
0100    # st_shndx

%ELF_str____sys_printf_else6>ELF_str    # st_name
&___sys_printf_else6    #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
02  # st_other (hidden)
0100    # st_shndx

%ELF_str____sys_printf_else3>ELF_str    # st_name
&___sys_printf_else3    #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
02  # st_other (hidden)
0100    # st_shndx

%ELF_str____sys_printf_else8>ELF_str    # st_name
&___sys_printf_else8    #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
02  # st_other (hidden)
0100    # st_shndx

%ELF_str____sys_printf_else10>ELF_str   # st_name
&___sys_printf_else10   #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
02  # st_other (hidden)
0100    # st_shndx

%ELF_str____sys_printf_else11>ELF_str   # st_name
&___sys_printf_else11   #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
02  # st_other (hidden)
0100    # st_shndx

%ELF_str____sys_printf_loop12>ELF_str   # st_name
&___sys_printf_loop12   #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
02  # st_other (hidden)
0100    # st_shndx

%ELF_str____sys_printf_and_end13>ELF_str    # st_name
&___sys_printf_and_end13    #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
02  # st_other (hidden)
0100    # st_shndx

%ELF_str____sys_printf_else14>ELF_str   # st_name
&___sys_printf_else14   #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
02  # st_other (hidden)
0100    # st_shndx

%ELF_str____sys_printf_loop_end12>ELF_str   # st_name
&___sys_printf_loop_end12   #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
02  # st_other (hidden)
0100    # st_shndx

%ELF_str____sys_printf_else15>ELF_str   # st_name
&___sys_printf_else15   #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
02  # st_other (hidden)
0100    # st_shndx

%ELF_str____sys_printf_else17>ELF_str   # st_name
&___sys_printf_else17   #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
02  # st_other (hidden)
0100    # st_shndx

%ELF_str____sys_printf_else18>ELF_str   # st_name
&___sys_printf_else18   #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
02  # st_other (hidden)
0100    # st_shndx

%ELF_str____sys_printf_loop19>ELF_str   # st_name
&___sys_printf_loop19   #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
02  # st_other (hidden)
0100    # st_shndx

%ELF_str____sys_printf_else20>ELF_str   # st_name
&___sys_printf_else20   #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
02  # st_other (hidden)
0100    # st_shndx

%ELF_str____sys_printf_loop_end19>ELF_str   # st_name
&___sys_printf_loop_end19   #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
02  # st_other (hidden)
0100    # st_shndx

%ELF_str____sys_printf_else21>ELF_str   # st_name
&___sys_printf_else21   #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
02  # st_other (hidden)
0100    # st_shndx

%ELF_str____sys_printf_else_end17>ELF_str   # st_name
&___sys_printf_else_end17   #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
02  # st_other (hidden)
0100    # st_shndx

%ELF_str____sys_printf_loop25>ELF_str   # st_name
&___sys_printf_loop25   #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
02  # st_other (hidden)
0100    # st_shndx

%ELF_str____sys_printf_else26>ELF_str   # st_name
&___sys_printf_else26   #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
02  # st_other (hidden)
0100    # st_shndx

%ELF_str____sys_printf_else27>ELF_str   # st_name
&___sys_printf_else27   #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
02  # st_other (hidden)
0100    # st_shndx

%ELF_str____sys_printf_else_end27>ELF_str   # st_name
&___sys_printf_else_end27   #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
02  # st_other (hidden)
0100    # st_shndx

%ELF_str____sys_printf_loop_end25>ELF_str   # st_name
&___sys_printf_loop_end25   #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
02  # st_other (hidden)
0100    # st_shndx

%ELF_str____sys_printf_else24>ELF_str   # st_name
&___sys_printf_else24   #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
02  # st_other (hidden)
0100    # st_shndx

%ELF_str____sys_printf_loop28>ELF_str   # st_name
&___sys_printf_loop28   #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
02  # st_other (hidden)
0100    # st_shndx

%ELF_str____sys_printf_else29>ELF_str   # st_name
&___sys_printf_else29   #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
02  # st_other (hidden)
0100    # st_shndx

%ELF_str____sys_printf_loop_end28>ELF_str   # st_name
&___sys_printf_loop_end28   #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
02  # st_other (hidden)
0100    # st_shndx

%ELF_str____sys_printf_else_end24>ELF_str   # st_name
&___sys_printf_else_end24   #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
02  # st_other (hidden)
0100    # st_shndx

%ELF_str____sys_printf_else23>ELF_str   # st_name
&___sys_printf_else23   #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
02  # st_other (hidden)
0100    # st_shndx

%ELF_str____sys_printf_else22>ELF_str   # st_name
&___sys_printf_else22   #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
02  # st_other (hidden)
0100    # st_shndx

%ELF_str____sys_printf_else16>ELF_str   # st_name
&___sys_printf_else16   #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
02  # st_other (hidden)
0100    # st_shndx

%ELF_str____sys_printf_else31>ELF_str   # st_name
&___sys_printf_else31   #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
02  # st_other (hidden)
0100    # st_shndx

%ELF_str____sys_printf_loop32>ELF_str   # st_name
&___sys_printf_loop32   #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
02  # st_other (hidden)
0100    # st_shndx

%ELF_str____sys_printf_else33>ELF_str   # st_name
&___sys_printf_else33   #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
02  # st_other (hidden)
0100    # st_shndx

%ELF_str____sys_printf_loop_end32>ELF_str   # st_name
&___sys_printf_loop_end32   #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
02  # st_other (hidden)
0100    # st_shndx

%ELF_str____sys_printf_else_end31>ELF_str   # st_name
&___sys_printf_else_end31   #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
02  # st_other (hidden)
0100    # st_shndx

%ELF_str____sys_printf_else30>ELF_str   # st_name
&___sys_printf_else30   #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
02  # st_other (hidden)
0100    # st_shndx

%ELF_str____sys_printf_or_end34>ELF_str # st_name
&___sys_printf_or_end34 #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
02  # st_other (hidden)
0100    # st_shndx

%ELF_str____sys_printf_else36>ELF_str   # st_name
&___sys_printf_else36   #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
02  # st_other (hidden)
0100    # st_shndx

%ELF_str____sys_printf_loop37>ELF_str   # st_name
&___sys_printf_loop37   #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
02  # st_other (hidden)
0100    # st_shndx

%ELF_str____sys_printf_else38>ELF_str   # st_name
&___sys_printf_else38   #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
02  # st_other (hidden)
0100    # st_shndx

%ELF_str____sys_printf_else39>ELF_str   # st_name
&___sys_printf_else39   #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
02  # st_other (hidden)
0100    # st_shndx

%ELF_str____sys_printf_else_end39>ELF_str   # st_name
&___sys_printf_else_end39   #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
02  # st_other (hidden)
0100    # st_shndx

%ELF_str____sys_printf_loop_end37>ELF_str   # st_name
&___sys_printf_loop_end37   #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
02  # st_other (hidden)
0100    # st_shndx

%ELF_str____sys_printf_else_end36>ELF_str   # st_name
&___sys_printf_else_end36   #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
02  # st_other (hidden)
0100    # st_shndx

%ELF_str____sys_printf_else35>ELF_str   # st_name
&___sys_printf_else35   #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
02  # st_other (hidden)
0100    # st_shndx

%ELF_str____sys_printf_else40>ELF_str   # st_name
&___sys_printf_else40   #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
02  # st_other (hidden)
0100    # st_shndx

%ELF_str____sys_printf_else_end40>ELF_str   # st_name
&___sys_printf_else_end40   #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
02  # st_other (hidden)
0100    # st_shndx

%ELF_str____sys_printf_else_end35>ELF_str   # st_name
&___sys_printf_else_end35   #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
02  # st_other (hidden)
0100    # st_shndx

%ELF_str____sys_printf_else_end30>ELF_str   # st_name
&___sys_printf_else_end30   #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
02  # st_other (hidden)
0100    # st_shndx

%ELF_str____sys_printf_else_end16>ELF_str   # st_name
&___sys_printf_else_end16   #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
02  # st_other (hidden)
0100    # st_shndx

%ELF_str____sys_printf_else_end15>ELF_str   # st_name
&___sys_printf_else_end15   #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
02  # st_other (hidden)
0100    # st_shndx

%ELF_str____sys_printf_else_end10>ELF_str   # st_name
&___sys_printf_else_end10   #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
02  # st_other (hidden)
0100    # st_shndx

%ELF_str____sys_printf_else9>ELF_str    # st_name
&___sys_printf_else9    #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
02  # st_other (hidden)
0100    # st_shndx

%ELF_str____sys_printf_else_end9>ELF_str    # st_name
&___sys_printf_else_end9    #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
02  # st_other (hidden)
0100    # st_shndx

%ELF_str____sys_printf_else7>ELF_str    # st_name
&___sys_printf_else7    #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
02  # st_other (hidden)
0100    # st_shndx

%ELF_str____sys_printf_loop_end1>ELF_str    # st_name
&___sys_printf_loop_end1    #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
02  # st_other (hidden)
0100    # st_shndx

%ELF_str____sys_printf_and_end41>ELF_str    # st_name
&___sys_printf_and_end41    #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
02  # st_other (hidden)
0100    # st_shndx

%ELF_str____sys_printf_else42>ELF_str   # st_name
&___sys_printf_else42   #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
02  # st_other (hidden)
0100    # st_shndx

%ELF_str_f_va_end>ELF_str   # st_name
&f_va_end   #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
00  # st_other (default)
0100    # st_shndx

%ELF_str_f_fprintf>ELF_str  # st_name
&f_fprintf  #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
00  # st_other (default)
0100    # st_shndx

%ELF_str_f_printf>ELF_str   # st_name
&f_printf   #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
00  # st_other (default)
0100    # st_shndx

%ELF_str_f_sprintf>ELF_str  # st_name
&f_sprintf  #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
00  # st_other (default)
0100    # st_shndx

%ELF_str_f_snprintf>ELF_str # st_name
&f_snprintf #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
00  # st_other (default)
0100    # st_shndx

%ELF_str_f_vsnprintf>ELF_str    # st_name
&f_vsnprintf    #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
00  # st_other (default)
0100    # st_shndx

%ELF_str_f_open>ELF_str # st_name
&f_open #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
00  # st_other (default)
0100    # st_shndx

%ELF_str__open_else1>ELF_str    # st_name
&_open_else1    #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
02  # st_other (hidden)
0100    # st_shndx

%ELF_str_f_close>ELF_str    # st_name
&f_close    #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
00  # st_other (default)
0100    # st_shndx

%ELF_str_f_read>ELF_str # st_name
&f_read #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
00  # st_other (default)
0100    # st_shndx

%ELF_str_f_lseek>ELF_str    # st_name
&f_lseek    #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
00  # st_other (default)
0100    # st_shndx

%ELF_str_f_fopen>ELF_str    # st_name
&f_fopen    #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
00  # st_other (default)
0100    # st_shndx

%ELF_str__fopen_or_end1>ELF_str # st_name
&_fopen_or_end1 #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
02  # st_other (hidden)
0100    # st_shndx

%ELF_str__fopen_else2>ELF_str   # st_name
&_fopen_else2   #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
02  # st_other (hidden)
0100    # st_shndx

%ELF_str__fopen_else3>ELF_str   # st_name
&_fopen_else3   #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
02  # st_other (hidden)
0100    # st_shndx

%ELF_str__fopen_else4>ELF_str   # st_name
&_fopen_else4   #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
02  # st_other (hidden)
0100    # st_shndx

%ELF_str__fopen_else5>ELF_str   # st_name
&_fopen_else5   #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
02  # st_other (hidden)
0100    # st_shndx

%ELF_str__fopen_else7>ELF_str   # st_name
&_fopen_else7   #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
02  # st_other (hidden)
0100    # st_shndx

%ELF_str__fopen_else_end7>ELF_str   # st_name
&_fopen_else_end7   #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
02  # st_other (hidden)
0100    # st_shndx

%ELF_str__fopen_else6>ELF_str   # st_name
&_fopen_else6   #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
02  # st_other (hidden)
0100    # st_shndx

%ELF_str__fopen_else8>ELF_str   # st_name
&_fopen_else8   #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
02  # st_other (hidden)
0100    # st_shndx

%ELF_str__fopen_else_end8>ELF_str   # st_name
&_fopen_else_end8   #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
02  # st_other (hidden)
0100    # st_shndx

%ELF_str__fopen_else_end6>ELF_str   # st_name
&_fopen_else_end6   #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
02  # st_other (hidden)
0100    # st_shndx

%ELF_str__fopen_else9>ELF_str   # st_name
&_fopen_else9   #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
02  # st_other (hidden)
0100    # st_shndx

%ELF_str_f_fdopen>ELF_str   # st_name
&f_fdopen   #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
00  # st_other (default)
0100    # st_shndx

%ELF_str_f_fclose>ELF_str   # st_name
&f_fclose   #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
00  # st_other (default)
0100    # st_shndx

%ELF_str_f_fflush>ELF_str   # st_name
&f_fflush   #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
00  # st_other (default)
0100    # st_shndx

%ELF_str_f_fseek>ELF_str    # st_name
&f_fseek    #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
00  # st_other (default)
0100    # st_shndx

%ELF_str_f_ftell>ELF_str    # st_name
&f_ftell    #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
00  # st_other (default)
0100    # st_shndx

%ELF_str_f_fread>ELF_str    # st_name
&f_fread    #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
00  # st_other (default)
0100    # st_shndx

%ELF_str__fread_loop1>ELF_str   # st_name
&_fread_loop1   #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
02  # st_other (hidden)
0100    # st_shndx

%ELF_str__fread_else2>ELF_str   # st_name
&_fread_else2   #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
02  # st_other (hidden)
0100    # st_shndx

%ELF_str__fread_else3>ELF_str   # st_name
&_fread_else3   #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
02  # st_other (hidden)
0100    # st_shndx

%ELF_str__fread_loop_end1>ELF_str   # st_name
&_fread_loop_end1   #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
02  # st_other (hidden)
0100    # st_shndx

%ELF_str_f_lseek>ELF_str    # st_name
&f_lseek    #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
00  # st_other (default)
0100    # st_shndx

%ELF_str_f_feof>ELF_str # st_name
&f_feof #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
00  # st_other (default)
0100    # st_shndx

%ELF_str_f_fgetc>ELF_str    # st_name
&f_fgetc    #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
00  # st_other (default)
0100    # st_shndx

%ELF_str__fgetc_else1>ELF_str   # st_name
&_fgetc_else1   #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
02  # st_other (hidden)
0100    # st_shndx

%ELF_str__fgetc_else2>ELF_str   # st_name
&_fgetc_else2   #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
02  # st_other (hidden)
0100    # st_shndx

%ELF_str_f_ldexp>ELF_str    # st_name
&f_ldexp    #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
00  # st_other (default)
0100    # st_shndx

%ELF_str__ldexp_loop1>ELF_str   # st_name
&_ldexp_loop1   #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
02  # st_other (hidden)
0100    # st_shndx

%ELF_str__ldexp_else2>ELF_str   # st_name
&_ldexp_else2   #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
02  # st_other (hidden)
0100    # st_shndx

%ELF_str__ldexp_loop_end1>ELF_str   # st_name
&_ldexp_loop_end1   #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
02  # st_other (hidden)
0100    # st_shndx

%ELF_str_f_time>ELF_str # st_name
&f_time #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
00  # st_other (default)
0100    # st_shndx

%ELF_str_f_localtime>ELF_str    # st_name
&f_localtime    #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
00  # st_other (default)
0100    # st_shndx

%ELF_str_f_gettimeofday>ELF_str # st_name
&f_gettimeofday #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
00  # st_other (default)
0100    # st_shndx

%ELF_str_f_write>ELF_str    # st_name
&f_write    #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
00  # st_other (default)
0100    # st_shndx

%ELF_str_f_fileno>ELF_str   # st_name
&f_fileno   #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
00  # st_other (default)
0100    # st_shndx

%ELF_str_f_getcwd>ELF_str   # st_name
&f_getcwd   #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
00  # st_other (default)
0100    # st_shndx

%ELF_str_f_getenv>ELF_str   # st_name
&f_getenv   #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
00  # st_other (default)
0100    # st_shndx

%ELF_str__getenv_loop1>ELF_str  # st_name
&_getenv_loop1  #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
02  # st_other (hidden)
0100    # st_shndx

%ELF_str__getenv_else2>ELF_str  # st_name
&_getenv_else2  #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
02  # st_other (hidden)
0100    # st_shndx

%ELF_str__getenv_and_end3>ELF_str   # st_name
&_getenv_and_end3   #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
02  # st_other (hidden)
0100    # st_shndx

%ELF_str__getenv_else4>ELF_str  # st_name
&_getenv_else4  #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
02  # st_other (hidden)
0100    # st_shndx

%ELF_str__getenv_loop_end1>ELF_str  # st_name
&_getenv_loop_end1  #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
02  # st_other (hidden)
0100    # st_shndx

%ELF_str_f_qsort>ELF_str    # st_name
&f_qsort    #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
00  # st_other (default)
0100    # st_shndx

%ELF_str__qsort_loop1>ELF_str   # st_name
&_qsort_loop1   #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
02  # st_other (hidden)
0100    # st_shndx

%ELF_str__qsort_else2>ELF_str   # st_name
&_qsort_else2   #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
02  # st_other (hidden)
0100    # st_shndx

%ELF_str__qsort_loop3>ELF_str   # st_name
&_qsort_loop3   #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
02  # st_other (hidden)
0100    # st_shndx

%ELF_str__qsort_else4>ELF_str   # st_name
&_qsort_else4   #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
02  # st_other (hidden)
0100    # st_shndx

%ELF_str__qsort_loop6>ELF_str   # st_name
&_qsort_loop6   #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
02  # st_other (hidden)
0100    # st_shndx

%ELF_str__qsort_else7>ELF_str   # st_name
&_qsort_else7   #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
02  # st_other (hidden)
0100    # st_shndx

%ELF_str__qsort_else8>ELF_str   # st_name
&_qsort_else8   #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
02  # st_other (hidden)
0100    # st_shndx

%ELF_str__qsort_else_end8>ELF_str   # st_name
&_qsort_else_end8   #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
02  # st_other (hidden)
0100    # st_shndx

%ELF_str__qsort_loop_end6>ELF_str   # st_name
&_qsort_loop_end6   #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
02  # st_other (hidden)
0100    # st_shndx

%ELF_str__qsort_else5>ELF_str   # st_name
&_qsort_else5   #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
02  # st_other (hidden)
0100    # st_shndx

%ELF_str__qsort_loop_end3>ELF_str   # st_name
&_qsort_loop_end3   #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
02  # st_other (hidden)
0100    # st_shndx

%ELF_str__qsort_loop_end1>ELF_str   # st_name
&_qsort_loop_end1   #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
02  # st_other (hidden)
0100    # st_shndx

%ELF_str_f_time>ELF_str # st_name
&f_time #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
00  # st_other (default)
0100    # st_shndx

%ELF_str_f_setjmp>ELF_str   # st_name
&f_setjmp   #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
00  # st_other (default)
0100    # st_shndx

%ELF_str_f_longjmp>ELF_str  # st_name
&f_longjmp  #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
00  # st_other (default)
0100    # st_shndx

%ELF_str_f_unlink>ELF_str   # st_name
&f_unlink   #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
00  # st_other (default)
0100    # st_shndx

%ELF_str_f_sscanf>ELF_str   # st_name
&f_sscanf   #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
00  # st_other (default)
0100    # st_shndx

%ELF_str__sscanf_loop1>ELF_str  # st_name
&_sscanf_loop1  #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
02  # st_other (hidden)
0100    # st_shndx

%ELF_str__sscanf_else2>ELF_str  # st_name
&_sscanf_else2  #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
02  # st_other (hidden)
0100    # st_shndx

%ELF_str__sscanf_else3>ELF_str  # st_name
&_sscanf_else3  #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
02  # st_other (hidden)
0100    # st_shndx

%ELF_str__sscanf_loop6>ELF_str  # st_name
&_sscanf_loop6  #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
02  # st_other (hidden)
0100    # st_shndx

%ELF_str__sscanf_and_end7>ELF_str   # st_name
&_sscanf_and_end7   #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
02  # st_other (hidden)
0100    # st_shndx

%ELF_str__sscanf_else8>ELF_str  # st_name
&_sscanf_else8  #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
02  # st_other (hidden)
0100    # st_shndx

%ELF_str__sscanf_loop_end6>ELF_str  # st_name
&_sscanf_loop_end6  #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
02  # st_other (hidden)
0100    # st_shndx

%ELF_str__sscanf_else5>ELF_str  # st_name
&_sscanf_else5  #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
02  # st_other (hidden)
0100    # st_shndx

%ELF_str__sscanf_else_end5>ELF_str  # st_name
&_sscanf_else_end5  #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
02  # st_other (hidden)
0100    # st_shndx

%ELF_str__sscanf_else4>ELF_str  # st_name
&_sscanf_else4  #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
02  # st_other (hidden)
0100    # st_shndx

%ELF_str__sscanf_else9>ELF_str  # st_name
&_sscanf_else9  #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
02  # st_other (hidden)
0100    # st_shndx

%ELF_str__sscanf_else_end4>ELF_str  # st_name
&_sscanf_else_end4  #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
02  # st_other (hidden)
0100    # st_shndx

%ELF_str__sscanf_else_end3>ELF_str  # st_name
&_sscanf_else_end3  #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
02  # st_other (hidden)
0100    # st_shndx

%ELF_str__sscanf_loop_end1>ELF_str  # st_name
&_sscanf_loop_end1  #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
02  # st_other (hidden)
0100    # st_shndx

%ELF_str_f_atoi>ELF_str # st_name
&f_atoi #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
00  # st_other (default)
0100    # st_shndx

%ELF_str_f_remove>ELF_str   # st_name
&f_remove   #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
00  # st_other (default)
0100    # st_shndx

%ELF_str_f_execvp>ELF_str   # st_name
&f_execvp   #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
00  # st_other (default)
0100    # st_shndx

%ELF_str_f_mkdir>ELF_str    # st_name
&f_mkdir    #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
00  # st_other (default)
0100    # st_shndx

%ELF_str_f_chdir>ELF_str    # st_name
&f_chdir    #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
00  # st_other (default)
0100    # st_shndx

%ELF_str_f_access>ELF_str   # st_name
&f_access   #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
00  # st_other (default)
0100    # st_shndx

%ELF_str_f_chmod>ELF_str    # st_name
&f_chmod    #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
00  # st_other (default)
0100    # st_shndx

%ELF_str_f_symlink>ELF_str  # st_name
&f_symlink  #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
00  # st_other (default)
0100    # st_shndx

%ELF_str_f_uname>ELF_str    # st_name
&f_uname    #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
00  # st_other (default)
0100    # st_shndx

%ELF_str_f_execve>ELF_str   # st_name
&f_execve   #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
00  # st_other (default)
0100    # st_shndx

%ELF_str_f_fgets>ELF_str    # st_name
&f_fgets    #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
00  # st_other (default)
0100    # st_shndx

%ELF_str__fgets_else1>ELF_str   # st_name
&_fgets_else1   #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
02  # st_other (hidden)
0100    # st_shndx

%ELF_str__fgets_loop2>ELF_str   # st_name
&_fgets_loop2   #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
02  # st_other (hidden)
0100    # st_shndx

%ELF_str__fgets_else3>ELF_str   # st_name
&_fgets_else3   #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
02  # st_other (hidden)
0100    # st_shndx

%ELF_str__fgets_else4>ELF_str   # st_name
&_fgets_else4   #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
02  # st_other (hidden)
0100    # st_shndx

%ELF_str__fgets_else5>ELF_str   # st_name
&_fgets_else5   #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
02  # st_other (hidden)
0100    # st_shndx

%ELF_str__fgets_loop_end2>ELF_str   # st_name
&_fgets_loop_end2   #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
02  # st_other (hidden)
0100    # st_shndx

%ELF_str_f_require>ELF_str  # st_name
&f_require  #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
00  # st_other (default)
0100    # st_shndx

%ELF_str__require_else1>ELF_str # st_name
&_require_else1 #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
02  # st_other (hidden)
0100    # st_shndx

%ELF_str_f_match>ELF_str    # st_name
&f_match    #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
00  # st_other (default)
0100    # st_shndx

%ELF_str__match_and_end1>ELF_str    # st_name
&_match_and_end1    #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
02  # st_other (hidden)
0100    # st_shndx

%ELF_str__match_else2>ELF_str   # st_name
&_match_else2   #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
02  # st_other (hidden)
0100    # st_shndx

%ELF_str__match_else3>ELF_str   # st_name
&_match_else3   #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
02  # st_other (hidden)
0100    # st_shndx

%ELF_str__match_else4>ELF_str   # st_name
&_match_else4   #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
02  # st_other (hidden)
0100    # st_shndx

%ELF_str__match_loop5>ELF_str   # st_name
&_match_loop5   #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
02  # st_other (hidden)
0100    # st_shndx

%ELF_str__match_else6>ELF_str   # st_name
&_match_else6   #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
02  # st_other (hidden)
0100    # st_shndx

%ELF_str__match_and_end7>ELF_str    # st_name
&_match_and_end7    #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
02  # st_other (hidden)
0100    # st_shndx

%ELF_str__match_else8>ELF_str   # st_name
&_match_else8   #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
02  # st_other (hidden)
0100    # st_shndx

%ELF_str__match_loop_end5>ELF_str   # st_name
&_match_loop_end5   #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
02  # st_other (hidden)
0100    # st_shndx

%ELF_str_f_in_set>ELF_str   # st_name
&f_in_set   #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
00  # st_other (default)
0100    # st_shndx

%ELF_str__in_set_else1>ELF_str  # st_name
&_in_set_else1  #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
02  # st_other (hidden)
0100    # st_shndx

%ELF_str__in_set_loop2>ELF_str  # st_name
&_in_set_loop2  #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
02  # st_other (hidden)
0100    # st_shndx

%ELF_str__in_set_else3>ELF_str  # st_name
&_in_set_else3  #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
02  # st_other (hidden)
0100    # st_shndx

%ELF_str__in_set_else4>ELF_str  # st_name
&_in_set_else4  #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
02  # st_other (hidden)
0100    # st_shndx

%ELF_str__in_set_loop_end2>ELF_str  # st_name
&_in_set_loop_end2  #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
02  # st_other (hidden)
0100    # st_shndx

%ELF_str_f___index_number>ELF_str   # st_name
&f___index_number   #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
00  # st_other (default)
0100    # st_shndx

%ELF_str____index_number_loop1>ELF_str  # st_name
&___index_number_loop1  #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
02  # st_other (hidden)
0100    # st_shndx

%ELF_str____index_number_else2>ELF_str  # st_name
&___index_number_else2  #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
02  # st_other (hidden)
0100    # st_shndx

%ELF_str____index_number_else3>ELF_str  # st_name
&___index_number_else3  #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
02  # st_other (hidden)
0100    # st_shndx

%ELF_str____index_number_loop_end1>ELF_str  # st_name
&___index_number_loop_end1  #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
02  # st_other (hidden)
0100    # st_shndx

%ELF_str_f___toupper>ELF_str    # st_name
&f___toupper    #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
00  # st_other (default)
0100    # st_shndx

%ELF_str____toupper_else1>ELF_str   # st_name
&___toupper_else1   #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
02  # st_other (hidden)
0100    # st_shndx

%ELF_str_f___set_reader>ELF_str # st_name
&f___set_reader #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
00  # st_other (default)
0100    # st_shndx

%ELF_str____set_reader_else1>ELF_str    # st_name
&___set_reader_else1    #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
02  # st_other (hidden)
0100    # st_shndx

%ELF_str____set_reader_loop2>ELF_str    # st_name
&___set_reader_loop2    #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
02  # st_other (hidden)
0100    # st_shndx

%ELF_str____set_reader_else3>ELF_str    # st_name
&___set_reader_else3    #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
02  # st_other (hidden)
0100    # st_shndx

%ELF_str____set_reader_else4>ELF_str    # st_name
&___set_reader_else4    #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
02  # st_other (hidden)
0100    # st_shndx

%ELF_str____set_reader_else5>ELF_str    # st_name
&___set_reader_else5    #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
02  # st_other (hidden)
0100    # st_shndx

%ELF_str____set_reader_loop_end2>ELF_str    # st_name
&___set_reader_loop_end2    #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
02  # st_other (hidden)
0100    # st_shndx

%ELF_str____set_reader_else6>ELF_str    # st_name
&___set_reader_else6    #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
02  # st_other (hidden)
0100    # st_shndx

%ELF_str____set_reader_else7>ELF_str    # st_name
&___set_reader_else7    #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
02  # st_other (hidden)
0100    # st_shndx

%ELF_str_f_strtoint>ELF_str # st_name
&f_strtoint #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
00  # st_other (default)
0100    # st_shndx

%ELF_str__strtoint_else1>ELF_str    # st_name
&_strtoint_else1    #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
02  # st_other (hidden)
0100    # st_shndx

%ELF_str__strtoint_and_end2>ELF_str # st_name
&_strtoint_and_end2 #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
02  # st_other (hidden)
0100    # st_shndx

%ELF_str__strtoint_else3>ELF_str    # st_name
&_strtoint_else3    #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
02  # st_other (hidden)
0100    # st_shndx

%ELF_str__strtoint_and_end4>ELF_str # st_name
&_strtoint_and_end4 #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
02  # st_other (hidden)
0100    # st_shndx

%ELF_str__strtoint_else5>ELF_str    # st_name
&_strtoint_else5    #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
02  # st_other (hidden)
0100    # st_shndx

%ELF_str__strtoint_else6>ELF_str    # st_name
&_strtoint_else6    #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
02  # st_other (hidden)
0100    # st_shndx

%ELF_str__strtoint_else_end6>ELF_str    # st_name
&_strtoint_else_end6    #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
02  # st_other (hidden)
0100    # st_shndx

%ELF_str__strtoint_else_end5>ELF_str    # st_name
&_strtoint_else_end5    #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
02  # st_other (hidden)
0100    # st_shndx

%ELF_str__strtoint_else_end3>ELF_str    # st_name
&_strtoint_else_end3    #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
02  # st_other (hidden)
0100    # st_shndx

%ELF_str__strtoint_else_end1>ELF_str    # st_name
&_strtoint_else_end1    #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
02  # st_other (hidden)
0100    # st_shndx

%ELF_str__strtoint_else7>ELF_str    # st_name
&_strtoint_else7    #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
02  # st_other (hidden)
0100    # st_shndx

%ELF_str_f_int2str>ELF_str  # st_name
&f_int2str  #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
00  # st_other (default)
0100    # st_shndx

%ELF_str__int2str_else1>ELF_str # st_name
&_int2str_else1 #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
02  # st_other (hidden)
0100    # st_shndx

%ELF_str__int2str_and_end2>ELF_str  # st_name
&_int2str_and_end2  #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
02  # st_other (hidden)
0100    # st_shndx

%ELF_str__int2str_and_end3>ELF_str  # st_name
&_int2str_and_end3  #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
02  # st_other (hidden)
0100    # st_shndx

%ELF_str__int2str_else5>ELF_str # st_name
&_int2str_else5 #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
02  # st_other (hidden)
0100    # st_shndx

%ELF_str__int2str_else4>ELF_str # st_name
&_int2str_else4 #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
02  # st_other (hidden)
0100    # st_shndx

%ELF_str__int2str_else_end4>ELF_str # st_name
&_int2str_else_end4 #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
02  # st_other (hidden)
0100    # st_shndx

%ELF_str__int2str_loop6>ELF_str # st_name
&_int2str_loop6 #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
02  # st_other (hidden)
0100    # st_shndx

%ELF_str__int2str_else7>ELF_str # st_name
&_int2str_else7 #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
02  # st_other (hidden)
0100    # st_shndx

%ELF_str__int2str_loop_end6>ELF_str # st_name
&_int2str_loop_end6 #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
02  # st_other (hidden)
0100    # st_shndx

%ELF_str__int2str_else8>ELF_str # st_name
&_int2str_else8 #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
02  # st_other (hidden)
0100    # st_shndx

%ELF_str_f_consume_token>ELF_str    # st_name
&f_consume_token    #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
00  # st_other (default)
0100    # st_shndx

%ELF_str__consume_token_loop1>ELF_str   # st_name
&_consume_token_loop1   #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
02  # st_other (hidden)
0100    # st_shndx

%ELF_str__consume_token_else2>ELF_str   # st_name
&_consume_token_else2   #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
02  # st_other (hidden)
0100    # st_shndx

%ELF_str__consume_token_else3>ELF_str   # st_name
&_consume_token_else3   #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
02  # st_other (hidden)
0100    # st_shndx

%ELF_str__consume_token_loop_end1>ELF_str   # st_name
&_consume_token_loop_end1   #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
02  # st_other (hidden)
0100    # st_shndx

%ELF_str_f_storeLabel>ELF_str   # st_name
&f_storeLabel   #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
00  # st_other (default)
0100    # st_shndx

%ELF_str_f_line_Comment>ELF_str # st_name
&f_line_Comment #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
00  # st_other (default)
0100    # st_shndx

%ELF_str__line_Comment_loop1>ELF_str    # st_name
&_line_Comment_loop1    #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
02  # st_other (hidden)
0100    # st_shndx

%ELF_str__line_Comment_else2>ELF_str    # st_name
&_line_Comment_else2    #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
02  # st_other (hidden)
0100    # st_shndx

%ELF_str__line_Comment_else3>ELF_str    # st_name
&_line_Comment_else3    #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
02  # st_other (hidden)
0100    # st_shndx

%ELF_str__line_Comment_loop_end1>ELF_str    # st_name
&_line_Comment_loop_end1    #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
02  # st_other (hidden)
0100    # st_shndx

%ELF_str_f_purge_string>ELF_str # st_name
&f_purge_string #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
00  # st_other (default)
0100    # st_shndx

%ELF_str__purge_string_loop1>ELF_str    # st_name
&_purge_string_loop1    #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
02  # st_other (hidden)
0100    # st_shndx

%ELF_str__purge_string_and_end2>ELF_str # st_name
&_purge_string_and_end2 #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
02  # st_other (hidden)
0100    # st_shndx

%ELF_str__purge_string_else3>ELF_str    # st_name
&_purge_string_else3    #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
02  # st_other (hidden)
0100    # st_shndx

%ELF_str__purge_string_loop_end1>ELF_str    # st_name
&_purge_string_loop_end1    #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
02  # st_other (hidden)
0100    # st_shndx

%ELF_str_f_first_pass>ELF_str   # st_name
&f_first_pass   #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
00  # st_other (default)
0100    # st_shndx

%ELF_str__first_pass_else1>ELF_str  # st_name
&_first_pass_else1  #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
02  # st_other (hidden)
0100    # st_shndx

%ELF_str__first_pass_else2>ELF_str  # st_name
&_first_pass_else2  #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
02  # st_other (hidden)
0100    # st_shndx

%ELF_str__first_pass_loop3>ELF_str  # st_name
&_first_pass_loop3  #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
02  # st_other (hidden)
0100    # st_shndx

%ELF_str__first_pass_else4>ELF_str  # st_name
&_first_pass_else4  #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
02  # st_other (hidden)
0100    # st_shndx

%ELF_str__first_pass_else5>ELF_str  # st_name
&_first_pass_else5  #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
02  # st_other (hidden)
0100    # st_shndx

%ELF_str__first_pass_or_end6>ELF_str    # st_name
&_first_pass_or_end6    #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
02  # st_other (hidden)
0100    # st_shndx

%ELF_str__first_pass_else7>ELF_str  # st_name
&_first_pass_else7  #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
02  # st_other (hidden)
0100    # st_shndx

%ELF_str__first_pass_else8>ELF_str  # st_name
&_first_pass_else8  #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
02  # st_other (hidden)
0100    # st_shndx

%ELF_str__first_pass_else_end7>ELF_str  # st_name
&_first_pass_else_end7  #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
02  # st_other (hidden)
0100    # st_shndx

%ELF_str__first_pass_else_end5>ELF_str  # st_name
&_first_pass_else_end5  #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
02  # st_other (hidden)
0100    # st_shndx

%ELF_str__first_pass_loop_end3>ELF_str  # st_name
&_first_pass_loop_end3  #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
02  # st_other (hidden)
0100    # st_shndx

%ELF_str_f_output_string_table>ELF_str  # st_name
&f_output_string_table  #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
00  # st_other (default)
0100    # st_shndx

%ELF_str__output_string_table_loop1>ELF_str # st_name
&_output_string_table_loop1 #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
02  # st_other (hidden)
0100    # st_shndx

%ELF_str__output_string_table_else2>ELF_str # st_name
&_output_string_table_else2 #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
02  # st_other (hidden)
0100    # st_shndx

%ELF_str__output_string_table_loop3>ELF_str # st_name
&_output_string_table_loop3 #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
02  # st_other (hidden)
0100    # st_shndx

%ELF_str__output_string_table_else4>ELF_str # st_name
&_output_string_table_else4 #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
02  # st_other (hidden)
0100    # st_shndx

%ELF_str__output_string_table_else5>ELF_str # st_name
&_output_string_table_else5 #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
02  # st_other (hidden)
0100    # st_shndx

%ELF_str__output_string_table_else6>ELF_str # st_name
&_output_string_table_else6 #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
02  # st_other (hidden)
0100    # st_shndx

%ELF_str__output_string_table_else7>ELF_str # st_name
&_output_string_table_else7 #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
02  # st_other (hidden)
0100    # st_shndx

%ELF_str__output_string_table_else_end6>ELF_str # st_name
&_output_string_table_else_end6 #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
02  # st_other (hidden)
0100    # st_shndx

%ELF_str__output_string_table_else_end5>ELF_str # st_name
&_output_string_table_else_end5 #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
02  # st_other (hidden)
0100    # st_shndx

%ELF_str__output_string_table_loop_end3>ELF_str # st_name
&_output_string_table_loop_end3 #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
02  # st_other (hidden)
0100    # st_shndx

%ELF_str__output_string_table_loop_end1>ELF_str # st_name
&_output_string_table_loop_end1 #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
02  # st_other (hidden)
0100    # st_shndx

%ELF_str_f_output_symbol_table>ELF_str  # st_name
&f_output_symbol_table  #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
00  # st_other (default)
0100    # st_shndx

%ELF_str__output_symbol_table_else1>ELF_str # st_name
&_output_symbol_table_else1 #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
02  # st_other (hidden)
0100    # st_shndx

%ELF_str__output_symbol_table_else_end1>ELF_str # st_name
&_output_symbol_table_else_end1 #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
02  # st_other (hidden)
0100    # st_shndx

%ELF_str__output_symbol_table_loop2>ELF_str # st_name
&_output_symbol_table_loop2 #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
02  # st_other (hidden)
0100    # st_shndx

%ELF_str__output_symbol_table_else3>ELF_str # st_name
&_output_symbol_table_else3 #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
02  # st_other (hidden)
0100    # st_shndx

%ELF_str__output_symbol_table_and_end5>ELF_str  # st_name
&_output_symbol_table_and_end5  #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
02  # st_other (hidden)
0100    # st_shndx

%ELF_str__output_symbol_table_else6>ELF_str # st_name
&_output_symbol_table_else6 #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
02  # st_other (hidden)
0100    # st_shndx

%ELF_str__output_symbol_table_else_end6>ELF_str # st_name
&_output_symbol_table_else_end6 #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
02  # st_other (hidden)
0100    # st_shndx

%ELF_str__output_symbol_table_else4>ELF_str # st_name
&_output_symbol_table_else4 #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
02  # st_other (hidden)
0100    # st_shndx

%ELF_str__output_symbol_table_and_end7>ELF_str  # st_name
&_output_symbol_table_and_end7  #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
02  # st_other (hidden)
0100    # st_shndx

%ELF_str__output_symbol_table_else8>ELF_str # st_name
&_output_symbol_table_else8 #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
02  # st_other (hidden)
0100    # st_shndx

%ELF_str__output_symbol_table_else_end8>ELF_str # st_name
&_output_symbol_table_else_end8 #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
02  # st_other (hidden)
0100    # st_shndx

%ELF_str__output_symbol_table_else_end4>ELF_str # st_name
&_output_symbol_table_else_end4 #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
02  # st_other (hidden)
0100    # st_shndx

%ELF_str__output_symbol_table_loop_end2>ELF_str # st_name
&_output_symbol_table_loop_end2 #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
02  # st_other (hidden)
0100    # st_shndx

%ELF_str_f_reverse_list>ELF_str # st_name
&f_reverse_list #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
00  # st_other (default)
0100    # st_shndx

%ELF_str__reverse_list_loop1>ELF_str    # st_name
&_reverse_list_loop1    #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
02  # st_other (hidden)
0100    # st_shndx

%ELF_str__reverse_list_else2>ELF_str    # st_name
&_reverse_list_else2    #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
02  # st_other (hidden)
0100    # st_shndx

%ELF_str__reverse_list_loop_end1>ELF_str    # st_name
&_reverse_list_loop_end1    #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
02  # st_other (hidden)
0100    # st_shndx

%ELF_str_f_write_int>ELF_str    # st_name
&f_write_int    #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
00  # st_other (default)
0100    # st_shndx

%ELF_str_f_write_register>ELF_str   # st_name
&f_write_register   #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
00  # st_other (default)
0100    # st_shndx

%ELF_str__write_register_else1>ELF_str  # st_name
&_write_register_else1  #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
02  # st_other (hidden)
0100    # st_shndx

%ELF_str_f_write_section>ELF_str    # st_name
&f_write_section    #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
00  # st_other (default)
0100    # st_shndx

%ELF_str__write_section_else1>ELF_str   # st_name
&_write_section_else1   #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
02  # st_other (hidden)
0100    # st_shndx

%ELF_str__write_section_else_end1>ELF_str   # st_name
&_write_section_else_end1   #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
02  # st_other (hidden)
0100    # st_shndx

%ELF_str_f_nibble_to_hex>ELF_str    # st_name
&f_nibble_to_hex    #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
00  # st_other (default)
0100    # st_shndx

%ELF_str__nibble_to_hex_else1>ELF_str   # st_name
&_nibble_to_hex_else1   #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
02  # st_other (hidden)
0100    # st_shndx

%ELF_str__nibble_to_hex_else_end1>ELF_str   # st_name
&_nibble_to_hex_else_end1   #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
02  # st_other (hidden)
0100    # st_shndx

%ELF_str_f_get_string>ELF_str   # st_name
&f_get_string   #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
00  # st_other (default)
0100    # st_shndx

%ELF_str__get_string_loop1>ELF_str  # st_name
&_get_string_loop1  #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
02  # st_other (hidden)
0100    # st_shndx

%ELF_str__get_string_else2>ELF_str  # st_name
&_get_string_else2  #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
02  # st_other (hidden)
0100    # st_shndx

%ELF_str__get_string_loop_end1>ELF_str  # st_name
&_get_string_loop_end1  #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
02  # st_other (hidden)
0100    # st_shndx

%ELF_str_f_setup_string>ELF_str # st_name
&f_setup_string #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
00  # st_other (default)
0100    # st_shndx

%ELF_str__setup_string_else1>ELF_str    # st_name
&_setup_string_else1    #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
02  # st_other (hidden)
0100    # st_shndx

%ELF_str__setup_string_else2>ELF_str    # st_name
&_setup_string_else2    #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
02  # st_other (hidden)
0100    # st_shndx

%ELF_str__setup_string_else3>ELF_str    # st_name
&_setup_string_else3    #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
02  # st_other (hidden)
0100    # st_shndx

%ELF_str__setup_string_else_end3>ELF_str    # st_name
&_setup_string_else_end3    #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
02  # st_other (hidden)
0100    # st_shndx

%ELF_str__setup_string_else_end2>ELF_str    # st_name
&_setup_string_else_end2    #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
02  # st_other (hidden)
0100    # st_shndx

%ELF_str__setup_string_else_end1>ELF_str    # st_name
&_setup_string_else_end1    #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
02  # st_other (hidden)
0100    # st_shndx

%ELF_str_f_setup_strings>ELF_str    # st_name
&f_setup_strings    #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
00  # st_other (default)
0100    # st_shndx

%ELF_str_f_main>ELF_str # st_name
&f_main #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
00  # st_other (default)
0100    # st_shndx

%ELF_str__main_loop1>ELF_str    # st_name
&_main_loop1    #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
02  # st_other (hidden)
0100    # st_shndx

%ELF_str__main_else2>ELF_str    # st_name
&_main_else2    #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
02  # st_other (hidden)
0100    # st_shndx

%ELF_str__main_else3>ELF_str    # st_name
&_main_else3    #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
02  # st_other (hidden)
0100    # st_shndx

%ELF_str__main_or_end4>ELF_str  # st_name
&_main_or_end4  #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
02  # st_other (hidden)
0100    # st_shndx

%ELF_str__main_else5>ELF_str    # st_name
&_main_else5    #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
02  # st_other (hidden)
0100    # st_shndx

%ELF_str__main_else6>ELF_str    # st_name
&_main_else6    #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
02  # st_other (hidden)
0100    # st_shndx

%ELF_str__main_or_end7>ELF_str  # st_name
&_main_or_end7  #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
02  # st_other (hidden)
0100    # st_shndx

%ELF_str__main_else8>ELF_str    # st_name
&_main_else8    #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
02  # st_other (hidden)
0100    # st_shndx

%ELF_str__main_or_end9>ELF_str  # st_name
&_main_or_end9  #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
02  # st_other (hidden)
0100    # st_shndx

%ELF_str__main_else11>ELF_str   # st_name
&_main_else11   #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
02  # st_other (hidden)
0100    # st_shndx

%ELF_str__main_else10>ELF_str   # st_name
&_main_else10   #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
02  # st_other (hidden)
0100    # st_shndx

%ELF_str__main_or_end12>ELF_str # st_name
&_main_or_end12 #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
02  # st_other (hidden)
0100    # st_shndx

%ELF_str__main_else13>ELF_str   # st_name
&_main_else13   #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
02  # st_other (hidden)
0100    # st_shndx

%ELF_str__main_or_end14>ELF_str # st_name
&_main_or_end14 #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
02  # st_other (hidden)
0100    # st_shndx

%ELF_str__main_else15>ELF_str   # st_name
&_main_else15   #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
02  # st_other (hidden)
0100    # st_shndx

%ELF_str__main_or_end16>ELF_str # st_name
&_main_or_end16 #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
02  # st_other (hidden)
0100    # st_shndx

%ELF_str__main_else17>ELF_str   # st_name
&_main_else17   #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
02  # st_other (hidden)
0100    # st_shndx

%ELF_str__main_else18>ELF_str   # st_name
&_main_else18   #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
02  # st_other (hidden)
0100    # st_shndx

%ELF_str__main_else19>ELF_str   # st_name
&_main_else19   #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
02  # st_other (hidden)
0100    # st_shndx

%ELF_str__main_or_end20>ELF_str # st_name
&_main_or_end20 #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
02  # st_other (hidden)
0100    # st_shndx

%ELF_str__main_else21>ELF_str   # st_name
&_main_else21   #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
02  # st_other (hidden)
0100    # st_shndx

%ELF_str__main_else22>ELF_str   # st_name
&_main_else22   #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
02  # st_other (hidden)
0100    # st_shndx

%ELF_str__main_else_end22>ELF_str   # st_name
&_main_else_end22   #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
02  # st_other (hidden)
0100    # st_shndx

%ELF_str__main_else_end21>ELF_str   # st_name
&_main_else_end21   #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
02  # st_other (hidden)
0100    # st_shndx

%ELF_str__main_else_end19>ELF_str   # st_name
&_main_else_end19   #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
02  # st_other (hidden)
0100    # st_shndx

%ELF_str__main_else_end18>ELF_str   # st_name
&_main_else_end18   #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
02  # st_other (hidden)
0100    # st_shndx

%ELF_str__main_else_end17>ELF_str   # st_name
&_main_else_end17   #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
02  # st_other (hidden)
0100    # st_shndx

%ELF_str__main_else_end15>ELF_str   # st_name
&_main_else_end15   #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
02  # st_other (hidden)
0100    # st_shndx

%ELF_str__main_else_end13>ELF_str   # st_name
&_main_else_end13   #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
02  # st_other (hidden)
0100    # st_shndx

%ELF_str__main_else_end10>ELF_str   # st_name
&_main_else_end10   #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
02  # st_other (hidden)
0100    # st_shndx

%ELF_str__main_else_end8>ELF_str    # st_name
&_main_else_end8    #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
02  # st_other (hidden)
0100    # st_shndx

%ELF_str__main_else_end6>ELF_str    # st_name
&_main_else_end6    #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
02  # st_other (hidden)
0100    # st_shndx

%ELF_str__main_else_end5>ELF_str    # st_name
&_main_else_end5    #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
02  # st_other (hidden)
0100    # st_shndx

%ELF_str__main_else_end3>ELF_str    # st_name
&_main_else_end3    #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
02  # st_other (hidden)
0100    # st_shndx

%ELF_str__main_loop_end1>ELF_str    # st_name
&_main_loop_end1    #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
02  # st_other (hidden)
0100    # st_shndx

%ELF_str__main_else23>ELF_str   # st_name
&_main_else23   #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
02  # st_other (hidden)
0100    # st_shndx

%ELF_str__main_else24>ELF_str   # st_name
&_main_else24   #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
02  # st_other (hidden)
0100    # st_shndx

%ELF_str__main_else25>ELF_str   # st_name
&_main_else25   #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
02  # st_other (hidden)
0100    # st_shndx

%ELF_str__main_else_end25>ELF_str   # st_name
&_main_else_end25   #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
02  # st_other (hidden)
0100    # st_shndx

%ELF_str_f___init_globals__>ELF_str # st_name
&f___init_globals__ #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
00  # st_other (default)
0100    # st_shndx

%ELF_str_ELF_data>ELF_str   # st_name
&ELF_data   #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
00  # st_other (default)
0100    # st_shndx

%ELF_str_SYS_MALLOC>ELF_str # st_name
&SYS_MALLOC #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
00  # st_other (default)
0100    # st_shndx

%ELF_str_string_0>ELF_str   # st_name
&string_0   #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
00  # st_other (default)
0100    # st_shndx

%ELF_str_string_1>ELF_str   # st_name
&string_1   #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
00  # st_other (default)
0100    # st_shndx

%ELF_str_string_2>ELF_str   # st_name
&string_2   #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
00  # st_other (default)
0100    # st_shndx

%ELF_str_string_3>ELF_str   # st_name
&string_3   #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
00  # st_other (default)
0100    # st_shndx

%ELF_str_string_4>ELF_str   # st_name
&string_4   #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
00  # st_other (default)
0100    # st_shndx

%ELF_str_string_5>ELF_str   # st_name
&string_5   #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
00  # st_other (default)
0100    # st_shndx

%ELF_str_string_6>ELF_str   # st_name
&string_6   #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
00  # st_other (default)
0100    # st_shndx

%ELF_str_string_7>ELF_str   # st_name
&string_7   #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
00  # st_other (default)
0100    # st_shndx

%ELF_str_string_8>ELF_str   # st_name
&string_8   #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
00  # st_other (default)
0100    # st_shndx

%ELF_str_string_9>ELF_str   # st_name
&string_9   #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
00  # st_other (default)
0100    # st_shndx

%ELF_str_string_10>ELF_str  # st_name
&string_10  #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
00  # st_other (default)
0100    # st_shndx

%ELF_str_string_11>ELF_str  # st_name
&string_11  #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
00  # st_other (default)
0100    # st_shndx

%ELF_str_string_12>ELF_str  # st_name
&string_12  #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
00  # st_other (default)
0100    # st_shndx

%ELF_str_string_13>ELF_str  # st_name
&string_13  #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
00  # st_other (default)
0100    # st_shndx

%ELF_str_string_14>ELF_str  # st_name
&string_14  #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
00  # st_other (default)
0100    # st_shndx

%ELF_str_string_15>ELF_str  # st_name
&string_15  #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
00  # st_other (default)
0100    # st_shndx

%ELF_str_string_16>ELF_str  # st_name
&string_16  #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
00  # st_other (default)
0100    # st_shndx

%ELF_str_string_17>ELF_str  # st_name
&string_17  #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
00  # st_other (default)
0100    # st_shndx

%ELF_str_string_18>ELF_str  # st_name
&string_18  #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
00  # st_other (default)
0100    # st_shndx

%ELF_str_string_19>ELF_str  # st_name
&string_19  #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
00  # st_other (default)
0100    # st_shndx

%ELF_str_string_20>ELF_str  # st_name
&string_20  #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
00  # st_other (default)
0100    # st_shndx

%ELF_str_string_21>ELF_str  # st_name
&string_21  #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
00  # st_other (default)
0100    # st_shndx

%ELF_str_string_22>ELF_str  # st_name
&string_22  #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
00  # st_other (default)
0100    # st_shndx

%ELF_str_string_23>ELF_str  # st_name
&string_23  #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
00  # st_other (default)
0100    # st_shndx

%ELF_str_string_24>ELF_str  # st_name
&string_24  #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
00  # st_other (default)
0100    # st_shndx

%ELF_str_string_25>ELF_str  # st_name
&string_25  #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
00  # st_other (default)
0100    # st_shndx

%ELF_str_string_26>ELF_str  # st_name
&string_26  #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
00  # st_other (default)
0100    # st_shndx

%ELF_str_string_27>ELF_str  # st_name
&string_27  #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
00  # st_other (default)
0100    # st_shndx

%ELF_str_string_28>ELF_str  # st_name
&string_28  #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
00  # st_other (default)
0100    # st_shndx

%ELF_str_string_29>ELF_str  # st_name
&string_29  #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
00  # st_other (default)
0100    # st_shndx

%ELF_str_string_30>ELF_str  # st_name
&string_30  #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
00  # st_other (default)
0100    # st_shndx

%ELF_str_string_31>ELF_str  # st_name
&string_31  #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
00  # st_other (default)
0100    # st_shndx

%ELF_str_string_32>ELF_str  # st_name
&string_32  #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
00  # st_other (default)
0100    # st_shndx

%ELF_str_string_33>ELF_str  # st_name
&string_33  #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
00  # st_other (default)
0100    # st_shndx

%ELF_str_string_34>ELF_str  # st_name
&string_34  #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
00  # st_other (default)
0100    # st_shndx

%ELF_str_string_35>ELF_str  # st_name
&string_35  #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
00  # st_other (default)
0100    # st_shndx

%ELF_str_string_36>ELF_str  # st_name
&string_36  #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
00  # st_other (default)
0100    # st_shndx

%ELF_str_string_37>ELF_str  # st_name
&string_37  #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
00  # st_other (default)
0100    # st_shndx

%ELF_str_string_38>ELF_str  # st_name
&string_38  #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
00  # st_other (default)
0100    # st_shndx

%ELF_str_string_39>ELF_str  # st_name
&string_39  #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
00  # st_other (default)
0100    # st_shndx

%ELF_str_string_40>ELF_str  # st_name
&string_40  #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
00  # st_other (default)
0100    # st_shndx

%ELF_str_string_41>ELF_str  # st_name
&string_41  #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
00  # st_other (default)
0100    # st_shndx

%ELF_str_string_42>ELF_str  # st_name
&string_42  #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
00  # st_other (default)
0100    # st_shndx

%ELF_str_string_43>ELF_str  # st_name
&string_43  #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
00  # st_other (default)
0100    # st_shndx

%ELF_str_string_44>ELF_str  # st_name
&string_44  #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
00  # st_other (default)
0100    # st_shndx

%ELF_str_string_45>ELF_str  # st_name
&string_45  #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
00  # st_other (default)
0100    # st_shndx

%ELF_str_string_46>ELF_str  # st_name
&string_46  #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
00  # st_other (default)
0100    # st_shndx

%ELF_str_string_47>ELF_str  # st_name
&string_47  #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
00  # st_other (default)
0100    # st_shndx

%ELF_str_string_48>ELF_str  # st_name
&string_48  #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
00  # st_other (default)
0100    # st_shndx

%ELF_str_string_49>ELF_str  # st_name
&string_49  #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
00  # st_other (default)
0100    # st_shndx

%ELF_str_string_50>ELF_str  # st_name
&string_50  #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
00  # st_other (default)
0100    # st_shndx

%ELF_str_string_51>ELF_str  # st_name
&string_51  #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
00  # st_other (default)
0100    # st_shndx

%ELF_str_string_52>ELF_str  # st_name
&string_52  #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
00  # st_other (default)
0100    # st_shndx

%ELF_str_string_53>ELF_str  # st_name
&string_53  #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
00  # st_other (default)
0100    # st_shndx

%ELF_str_string_54>ELF_str  # st_name
&string_54  #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
00  # st_other (default)
0100    # st_shndx

%ELF_str_string_55>ELF_str  # st_name
&string_55  #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
00  # st_other (default)
0100    # st_shndx

%ELF_str_string_56>ELF_str  # st_name
&string_56  #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
00  # st_other (default)
0100    # st_shndx

%ELF_str_string_57>ELF_str  # st_name
&string_57  #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
00  # st_other (default)
0100    # st_shndx

%ELF_str_string_58>ELF_str  # st_name
&string_58  #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
00  # st_other (default)
0100    # st_shndx

%ELF_str_string_59>ELF_str  # st_name
&string_59  #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
00  # st_other (default)
0100    # st_shndx

%ELF_str_string_60>ELF_str  # st_name
&string_60  #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
00  # st_other (default)
0100    # st_shndx

%ELF_str_string_61>ELF_str  # st_name
&string_61  #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
00  # st_other (default)
0100    # st_shndx

%ELF_str_string_62>ELF_str  # st_name
&string_62  #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
00  # st_other (default)
0100    # st_shndx

%ELF_str_string_63>ELF_str  # st_name
&string_63  #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
00  # st_other (default)
0100    # st_shndx

%ELF_str_string_64>ELF_str  # st_name
&string_64  #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
00  # st_other (default)
0100    # st_shndx

%ELF_str_string_65>ELF_str  # st_name
&string_65  #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
00  # st_other (default)
0100    # st_shndx

%ELF_str_string_66>ELF_str  # st_name
&string_66  #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
00  # st_other (default)
0100    # st_shndx

%ELF_str_string_67>ELF_str  # st_name
&string_67  #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
00  # st_other (default)
0100    # st_shndx

%ELF_str_string_68>ELF_str  # st_name
&string_68  #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
00  # st_other (default)
0100    # st_shndx

%ELF_str_string_69>ELF_str  # st_name
&string_69  #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
00  # st_other (default)
0100    # st_shndx

%ELF_str_string_70>ELF_str  # st_name
&string_70  #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
00  # st_other (default)
0100    # st_shndx

%ELF_str_string_71>ELF_str  # st_name
&string_71  #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
00  # st_other (default)
0100    # st_shndx

%ELF_str_string_72>ELF_str  # st_name
&string_72  #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
00  # st_other (default)
0100    # st_shndx

%ELF_str_string_73>ELF_str  # st_name
&string_73  #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
00  # st_other (default)
0100    # st_shndx

%ELF_str_string_74>ELF_str  # st_name
&string_74  #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
00  # st_other (default)
0100    # st_shndx

%ELF_str_string_75>ELF_str  # st_name
&string_75  #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
00  # st_other (default)
0100    # st_shndx

%ELF_str_string_76>ELF_str  # st_name
&string_76  #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
00  # st_other (default)
0100    # st_shndx

%ELF_str_string_77>ELF_str  # st_name
&string_77  #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
00  # st_other (default)
0100    # st_shndx

%ELF_str_string_78>ELF_str  # st_name
&string_78  #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
00  # st_other (default)
0100    # st_shndx

%ELF_str_string_79>ELF_str  # st_name
&string_79  #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
00  # st_other (default)
0100    # st_shndx

%ELF_str_string_80>ELF_str  # st_name
&string_80  #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
00  # st_other (default)
0100    # st_shndx

%ELF_str_string_81>ELF_str  # st_name
&string_81  #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
00  # st_other (default)
0100    # st_shndx

%ELF_str_string_82>ELF_str  # st_name
&string_82  #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
00  # st_other (default)
0100    # st_shndx

%ELF_str_string_83>ELF_str  # st_name
&string_83  #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
00  # st_other (default)
0100    # st_shndx

%ELF_str_string_84>ELF_str  # st_name
&string_84  #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
00  # st_other (default)
0100    # st_shndx

%ELF_str_string_85>ELF_str  # st_name
&string_85  #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
00  # st_other (default)
0100    # st_shndx

%ELF_str_string_86>ELF_str  # st_name
&string_86  #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
00  # st_other (default)
0100    # st_shndx

%ELF_str_string_87>ELF_str  # st_name
&string_87  #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
00  # st_other (default)
0100    # st_shndx

%ELF_str_string_88>ELF_str  # st_name
&string_88  #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
00  # st_other (default)
0100    # st_shndx

%ELF_str_string_89>ELF_str  # st_name
&string_89  #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
00  # st_other (default)
0100    # st_shndx

%ELF_str_string_90>ELF_str  # st_name
&string_90  #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
00  # st_other (default)
0100    # st_shndx

%ELF_str_string_91>ELF_str  # st_name
&string_91  #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
00  # st_other (default)
0100    # st_shndx

%ELF_str_string_92>ELF_str  # st_name
&string_92  #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
00  # st_other (default)
0100    # st_shndx

%ELF_str_string_93>ELF_str  # st_name
&string_93  #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
00  # st_other (default)
0100    # st_shndx

%ELF_str_string_94>ELF_str  # st_name
&string_94  #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
00  # st_other (default)
0100    # st_shndx

%ELF_str_string_95>ELF_str  # st_name
&string_95  #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
00  # st_other (default)
0100    # st_shndx

%ELF_str_string_96>ELF_str  # st_name
&string_96  #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
00  # st_other (default)
0100    # st_shndx

%ELF_str_string_97>ELF_str  # st_name
&string_97  #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
00  # st_other (default)
0100    # st_shndx

%ELF_str_string_98>ELF_str  # st_name
&string_98  #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
00  # st_other (default)
0100    # st_shndx

%ELF_str_string_99>ELF_str  # st_name
&string_99  #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
00  # st_other (default)
0100    # st_shndx

%ELF_str_string_100>ELF_str # st_name
&string_100 #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
00  # st_other (default)
0100    # st_shndx

%ELF_str_string_101>ELF_str # st_name
&string_101 #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
00  # st_other (default)
0100    # st_shndx

%ELF_str_string_102>ELF_str # st_name
&string_102 #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
00  # st_other (default)
0100    # st_shndx

%ELF_str_string_103>ELF_str # st_name
&string_103 #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
00  # st_other (default)
0100    # st_shndx

%ELF_str_string_104>ELF_str # st_name
&string_104 #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
00  # st_other (default)
0100    # st_shndx

%ELF_str_string_105>ELF_str # st_name
&string_105 #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
00  # st_other (default)
0100    # st_shndx

%ELF_str_string_106>ELF_str # st_name
&string_106 #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
00  # st_other (default)
0100    # st_shndx

%ELF_str_string_107>ELF_str # st_name
&string_107 #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
00  # st_other (default)
0100    # st_shndx

%ELF_str_string_108>ELF_str # st_name
&string_108 #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
00  # st_other (default)
0100    # st_shndx

%ELF_str_string_109>ELF_str # st_name
&string_109 #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
00  # st_other (default)
0100    # st_shndx

%ELF_str_string_110>ELF_str # st_name
&string_110 #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
00  # st_other (default)
0100    # st_shndx

%ELF_str_string_111>ELF_str # st_name
&string_111 #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
00  # st_other (default)
0100    # st_shndx

%ELF_str_string_112>ELF_str # st_name
&string_112 #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
00  # st_other (default)
0100    # st_shndx

%ELF_str_string_113>ELF_str # st_name
&string_113 #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
00  # st_other (default)
0100    # st_shndx

%ELF_str_string_114>ELF_str # st_name
&string_114 #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
00  # st_other (default)
0100    # st_shndx

%ELF_str_string_115>ELF_str # st_name
&string_115 #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
00  # st_other (default)
0100    # st_shndx

%ELF_str_string_116>ELF_str # st_name
&string_116 #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
00  # st_other (default)
0100    # st_shndx

%ELF_str_string_117>ELF_str # st_name
&string_117 #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
00  # st_other (default)
0100    # st_shndx

%ELF_str_string_118>ELF_str # st_name
&string_118 #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
00  # st_other (default)
0100    # st_shndx

%ELF_str_string_119>ELF_str # st_name
&string_119 #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
00  # st_other (default)
0100    # st_shndx

%ELF_str_string_120>ELF_str # st_name
&string_120 #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
00  # st_other (default)
0100    # st_shndx

%ELF_str_string_121>ELF_str # st_name
&string_121 #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
00  # st_other (default)
0100    # st_shndx

%ELF_str_string_122>ELF_str # st_name
&string_122 #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
00  # st_other (default)
0100    # st_shndx

%ELF_str_g___sys_stdin>ELF_str  # st_name
&g___sys_stdin  #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
00  # st_other (default)
0100    # st_shndx

%ELF_str_g___sys_stdout>ELF_str # st_name
&g___sys_stdout #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
00  # st_other (default)
0100    # st_shndx

%ELF_str_g___sys_stderr>ELF_str # st_name
&g___sys_stderr #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
00  # st_other (default)
0100    # st_shndx

%ELF_str_g_stdin>ELF_str    # st_name
&g_stdin    #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
00  # st_other (default)
0100    # st_shndx

%ELF_str_g_stdout>ELF_str   # st_name
&g_stdout   #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
00  # st_other (default)
0100    # st_shndx

%ELF_str_g_stderr>ELF_str   # st_name
&g_stderr   #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
00  # st_other (default)
0100    # st_shndx

%ELF_str_g_errno>ELF_str    # st_name
&g_errno    #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
00  # st_other (default)
0100    # st_shndx

%ELF_str_g_LINE_MACRO_OUTPUT_FORMAT_GCC>ELF_str # st_name
&g_LINE_MACRO_OUTPUT_FORMAT_GCC #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
00  # st_other (default)
0100    # st_shndx

%ELF_str_g_LINE_MACRO_OUTPUT_FORMAT_NONE>ELF_str    # st_name
&g_LINE_MACRO_OUTPUT_FORMAT_NONE    #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
00  # st_other (default)
0100    # st_shndx

%ELF_str_g_LINE_MACRO_OUTPUT_FORMAT_STD>ELF_str # st_name
&g_LINE_MACRO_OUTPUT_FORMAT_STD #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
00  # st_other (default)
0100    # st_shndx

%ELF_str_g_LINE_MACRO_OUTPUT_FORMAT_P10>ELF_str # st_name
&g_LINE_MACRO_OUTPUT_FORMAT_P10 #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
00  # st_other (default)
0100    # st_shndx

%ELF_str_g__sys_env>ELF_str # st_name
&g__sys_env #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
00  # st_other (default)
0100    # st_shndx

%ELF_str_g_max_string>ELF_str   # st_name
&g_max_string   #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
00  # st_other (default)
0100    # st_shndx

%ELF_str_g_BITSIZE>ELF_str  # st_name
&g_BITSIZE  #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
00  # st_other (default)
0100    # st_shndx

%ELF_str_g_BigEndian>ELF_str    # st_name
&g_BigEndian    #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
00  # st_other (default)
0100    # st_shndx

%ELF_str_g_BINARY>ELF_str   # st_name
&g_BINARY   #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
00  # st_other (default)
0100    # st_shndx

%ELF_str_g_OCTAL>ELF_str    # st_name
&g_OCTAL    #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
00  # st_other (default)
0100    # st_shndx

%ELF_str_g_HEX>ELF_str  # st_name
&g_HEX  #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
00  # st_other (default)
0100    # st_shndx

%ELF_str_g_zero_8>ELF_str   # st_name
&g_zero_8   #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
00  # st_other (default)
0100    # st_shndx

%ELF_str_g_zero_16>ELF_str  # st_name
&g_zero_16  #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
00  # st_other (default)
0100    # st_shndx

%ELF_str_g_zero_32>ELF_str  # st_name
&g_zero_32  #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
00  # st_other (default)
0100    # st_shndx

%ELF_str_g_one_16>ELF_str   # st_name
&g_one_16   #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
00  # st_other (default)
0100    # st_shndx

%ELF_str_g_one_32>ELF_str   # st_name
&g_one_32   #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
00  # st_other (default)
0100    # st_shndx

%ELF_str_g_two_8>ELF_str    # st_name
&g_two_8    #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
00  # st_other (default)
0100    # st_shndx

%ELF_str_g_two_32>ELF_str   # st_name
&g_two_32   #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
00  # st_other (default)
0100    # st_shndx

%ELF_str_g_three_32>ELF_str # st_name
&g_three_32 #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
00  # st_other (default)
0100    # st_shndx

%ELF_str_g_six_32>ELF_str   # st_name
&g_six_32   #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
00  # st_other (default)
0100    # st_shndx

%ELF_str_g_sixteen_32>ELF_str   # st_name
&g_sixteen_32   #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
00  # st_other (default)
0100    # st_shndx

%ELF_str_g_twentyfour_32>ELF_str    # st_name
&g_twentyfour_32    #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
00  # st_other (default)
0100    # st_shndx

%ELF_str_g_output>ELF_str   # st_name
&g_output   #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
00  # st_other (default)
0100    # st_shndx

%ELF_str_g_jump_table>ELF_str   # st_name
&g_jump_table   #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
00  # st_other (default)
0100    # st_shndx

%ELF_str_g_count>ELF_str    # st_name
&g_count    #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
00  # st_other (default)
0100    # st_shndx

%ELF_str_g_entry>ELF_str    # st_name
&g_entry    #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
00  # st_other (default)
0100    # st_shndx

%ELF_str_ELF_end>ELF_str    # st_name
&ELF_end    #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
00  # st_other (default)
0100    # st_shndx

# END Generated symbol table

:ELF_end

File /x86/M1_s.macro

Source file is 'src/M1_s.macro'.
No URL
 #
:ELF_text #:ELF_text
 #
:_start #:_start
B8 2D000000                                 #    mov_eax, %45                                # the Syscall # for SYS_BRK
BB 00000000                                  #    mov_ebx, %0                                 # Get current brk
CD80                                       #    int_80                                      # Let the kernel do the work
A3 &SYS_MALLOC                  #    mov_[DWORD],eax &SYS_MALLOC                 # Set our malloc pointer
 #
 #    # allocate memory for the second stack
B8 A0860100 #    mov_eax, %100000
50                                     #    push_eax                                    # (sys_malloc assums address)
E8 %f_sys_malloc #    call %f_sys_malloc
89C5 #    mov_ebp,eax
 #    
 #    # setup argc and argv for the main function
89C2 #    mov_edx,eax
58 #    pop_eax
89E3 #    mov_ebx,esp
50 #    push_eax
53 #    push_ebx
89D0 #    mov_eax,edx
 #
 #    #call main
E8 %f_main #    call %f_main
 #    
 #    # program completed Successfully
89C3                                  #    mov_ebx,eax                                 # All is well
B8 01000000                                  #    mov_eax, %1                                 # put the exit syscall number in eax
CD80                                       #    int_80                                      # Call it a good day
 #
 ## These sys_ function follow the same calling conventions
 ## as all the other functions. To access the arguments on the stack
 ## the return address is stored in the edi address (which is only possible
 ## because these functions do not call other function) and the function
 ## address (which is stored in the eax register, the top of the stack)
 ## needs to be popped as well.
 #
:f_sys_int80 #:f_sys_int80
5F                #    pop_edi               # Save return address from the stack
5A                #    pop_edx               # Get the arguments from the stack
59 #    pop_ecx
5B #    pop_ebx
58 #    pop_eax
CD80                 #    int_80                # call the Kernel
57               #    push_edi              # restore return address to the stack
C3 #    ret
 #
:f_sys_malloc #:f_sys_malloc
5F #    pop_edi
58 #    pop_eax
8B1D &SYS_MALLOC                  #    mov_ebx,[DWORD] &SYS_MALLOC                 # Using the current pointer
01C3                                  #    add_ebx,eax                                 # Request the number of desired bytes
B8 2D000000                                 #    mov_eax, %45                                # the Syscall # for SYS_BRK
CD80                                       #    int_80                                      # call the Kernel
8B05 &SYS_MALLOC                  #    mov_eax,[DWORD] &SYS_MALLOC                 # Return pointer
891D &SYS_MALLOC                  #    mov_[DWORD],ebx &SYS_MALLOC                 # Update pointer
57 #    push_edi
C3 #    ret
:SYS_MALLOC #:SYS_MALLOC
00000000 #    NULL
 #
 #    
 #
:f_exit #:f_exit
58 #    pop_eax
894500 #    mov_[ebp],eax
58 #    pop_eax
50               #  push_eax              # result (local)
8D85 04000000 # lea_eax,[ebp+DWORD] %4
5B                # pop_ebx               # =:
8918 #  mov_[eax],ebx
58 #    pop_eax
 ## stdlib.c 8
50               #  push_eax              # 1
B8 01000000 #   mov_eax, %1
50               #  push_eax              # result (local)
8D85 04000000 # lea_eax,[ebp+DWORD] %4
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # 0
B8 00000000 #   mov_eax, %0
50               #  push_eax              # 0
B8 00000000 #   mov_eax, %0
50               #  push_eax              # sys_int80 (function)
B8 &f_sys_int80 #   mov_eax, &f_sys_int80
81C5 08000000          #    add_ebp, %8         # ()
FFD0 #  call_eax
81ED 08000000 # sub_ebp, %8
58                # pop_eax               # ;
50               #  push_eax              # 0
B8 00000000 #   mov_eax, %0
8B5D00          #   mov_ebx,[ebp]         # return
53 #    push_ebx
C3 #    ret
 #
:f_memcpy #:f_memcpy
58 #    pop_eax
894500 #    mov_[ebp],eax
58 #    pop_eax
50               #  push_eax              # n (local)
8D85 04000000 # lea_eax,[ebp+DWORD] %4
5B                # pop_ebx               # =:
8918 #  mov_[eax],ebx
58 #    pop_eax
50               #  push_eax              # src (local)
8D85 08000000 # lea_eax,[ebp+DWORD] %8
5B                # pop_ebx               # =:
8918 #  mov_[eax],ebx
58 #    pop_eax
50               #  push_eax              # dest (local)
8D85 0C000000 # lea_eax,[ebp+DWORD] %12
5B                # pop_ebx               # =:
8918 #  mov_[eax],ebx
58 #    pop_eax
50               #  push_eax              # d (local)
8D85 10000000 # lea_eax,[ebp+DWORD] %16
50               #  push_eax              # dest (local)
8D85 0C000000 # lea_eax,[ebp+DWORD] %12
8B00          # mov_eax,[eax]         # ?
5B                # pop_ebx               # =
8903 #  mov_[ebx],eax
58                # pop_eax               # ;
50               #  push_eax              # s (local)
8D85 14000000 # lea_eax,[ebp+DWORD] %20
50               #  push_eax              # src (local)
8D85 08000000 # lea_eax,[ebp+DWORD] %8
8B00          # mov_eax,[eax]         # ?
5B                # pop_ebx               # =
8903 #  mov_[ebx],eax
58                # pop_eax               # ;
 ## stdlib.c 34
50               #  push_eax              # i (local)
8D85 18000000 # lea_eax,[ebp+DWORD] %24
50               #  push_eax              # 0
B8 00000000 #   mov_eax, %0
5B                # pop_ebx               # =
8903 #  mov_[ebx],eax
58                # pop_eax               # ;
:_memcpy_loop1 #:_memcpy_loop1
50               #  push_eax              # i (local)
8D85 18000000 # lea_eax,[ebp+DWORD] %24
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # n (local)
8D85 04000000 # lea_eax,[ebp+DWORD] %4
8B00          # mov_eax,[eax]         # ?
5B                # pop_ebx               # <s
39C3 #  cmp_eax_ebx
0F9CC0 #    setl_al
0FB6C0 #    movzx_eax,al
85C0           #    test_eax,eax          # !
0F94C0 #    sete_al
0FB6C0 #    movzx_eax,al
85C0           #    test_eax,eax          # if
58 #    pop_eax
0F84 %_memcpy_else2 #   je %_memcpy_else2
E9 %_memcpy_loop_end1 # jmp %_memcpy_loop_end1
 ## stdlib.c 35
:_memcpy_else2  #:_memcpy_else2 # no else
50               #  push_eax              # d (local)
8D85 10000000 # lea_eax,[ebp+DWORD] %16
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # i (local)
8D85 18000000 # lea_eax,[ebp+DWORD] %24
8B00          # mov_eax,[eax]         # ?
5B                # pop_ebx               # +
01D8 #  add_eax,ebx
50               #  push_eax              # s (local)
8D85 14000000 # lea_eax,[ebp+DWORD] %20
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # i (local)
8D85 18000000 # lea_eax,[ebp+DWORD] %24
8B00          # mov_eax,[eax]         # ?
5B                # pop_ebx               # +
01D8 #  add_eax,ebx
8A00           #    mov_al,[eax]          # ?1
0FB6C0 #    movzx_eax,al
0FBEC0           #  movsx_eax,al          # char
5B                # pop_ebx               # =1
8803 #  mov_[ebx],al
58                # pop_eax               # ;
50               #  push_eax              # i (local)
8D85 18000000 # lea_eax,[ebp+DWORD] %24
50               #  push_eax              # $ (dup)
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # 1
B8 01000000 #   mov_eax, %1
5B                # pop_ebx               # +
01D8 #  add_eax,ebx
5B                # pop_ebx               # =
8903 #  mov_[ebx],eax
50               #  push_eax              # 1
B8 01000000 #   mov_eax, %1
5B                # pop_ebx               # -
29C3 #  sub_ebx,eax
89D8 #  mov_eax,ebx
58                # pop_eax               # ;
E9 %_memcpy_loop1 # jmp %_memcpy_loop1
:_memcpy_loop_end1 #:_memcpy_loop_end1
 ## stdlib.c 36
50               #  push_eax              # dest (local)
8D85 0C000000 # lea_eax,[ebp+DWORD] %12
8B00          # mov_eax,[eax]         # ?
8B5D00          #   mov_ebx,[ebp]         # return
53 #    push_ebx
C3 #    ret
50               #  push_eax              # 0
B8 00000000 #   mov_eax, %0
8B5D00          #   mov_ebx,[ebp]         # return
53 #    push_ebx
C3 #    ret
 #
:f_memmove #:f_memmove
58 #    pop_eax
894500 #    mov_[ebp],eax
58 #    pop_eax
50               #  push_eax              # n (local)
8D85 04000000 # lea_eax,[ebp+DWORD] %4
5B                # pop_ebx               # =:
8918 #  mov_[eax],ebx
58 #    pop_eax
50               #  push_eax              # src (local)
8D85 08000000 # lea_eax,[ebp+DWORD] %8
5B                # pop_ebx               # =:
8918 #  mov_[eax],ebx
58 #    pop_eax
50               #  push_eax              # dest (local)
8D85 0C000000 # lea_eax,[ebp+DWORD] %12
5B                # pop_ebx               # =:
8918 #  mov_[eax],ebx
58 #    pop_eax
50               #  push_eax              # d (local)
8D85 10000000 # lea_eax,[ebp+DWORD] %16
50               #  push_eax              # dest (local)
8D85 0C000000 # lea_eax,[ebp+DWORD] %12
8B00          # mov_eax,[eax]         # ?
5B                # pop_ebx               # =
8903 #  mov_[ebx],eax
58                # pop_eax               # ;
50               #  push_eax              # s (local)
8D85 14000000 # lea_eax,[ebp+DWORD] %20
50               #  push_eax              # src (local)
8D85 08000000 # lea_eax,[ebp+DWORD] %8
8B00          # mov_eax,[eax]         # ?
5B                # pop_ebx               # =
8903 #  mov_[ebx],eax
58                # pop_eax               # ;
 ## stdlib.c 43
50               #  push_eax              # 1
B8 01000000 #   mov_eax, %1
85C0           #    test_eax,eax          # if
58 #    pop_eax
0F84 %_memmove_else1 #  je %_memmove_else1
 ## stdlib.c 44
 ## stdlib.c 45
50               #  push_eax              # i (local)
8D85 18000000 # lea_eax,[ebp+DWORD] %24
50               #  push_eax              # 0
B8 00000000 #   mov_eax, %0
5B                # pop_ebx               # =
8903 #  mov_[ebx],eax
58                # pop_eax               # ;
:_memmove_loop2 #:_memmove_loop2
50               #  push_eax              # i (local)
8D85 18000000 # lea_eax,[ebp+DWORD] %24
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # n (local)
8D85 04000000 # lea_eax,[ebp+DWORD] %4
8B00          # mov_eax,[eax]         # ?
5B                # pop_ebx               # <
39C3 #  cmp_eax_ebx
0F92C0 #    setb_al
0FB6C0 #    movzx_eax,al
85C0           #    test_eax,eax          # !
0F94C0 #    sete_al
0FB6C0 #    movzx_eax,al
85C0           #    test_eax,eax          # if
58 #    pop_eax
0F84 %_memmove_else3 #  je %_memmove_else3
E9 %_memmove_loop_end2 #    jmp %_memmove_loop_end2
 ## stdlib.c 46
:_memmove_else3  #:_memmove_else3 # no else
50               #  push_eax              # d (local)
8D85 10000000 # lea_eax,[ebp+DWORD] %16
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # i (local)
8D85 18000000 # lea_eax,[ebp+DWORD] %24
8B00          # mov_eax,[eax]         # ?
5B                # pop_ebx               # +
01D8 #  add_eax,ebx
50               #  push_eax              # s (local)
8D85 14000000 # lea_eax,[ebp+DWORD] %20
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # i (local)
8D85 18000000 # lea_eax,[ebp+DWORD] %24
8B00          # mov_eax,[eax]         # ?
5B                # pop_ebx               # +
01D8 #  add_eax,ebx
8A00           #    mov_al,[eax]          # ?1
0FB6C0 #    movzx_eax,al
0FBEC0           #  movsx_eax,al          # char
5B                # pop_ebx               # =1
8803 #  mov_[ebx],al
58                # pop_eax               # ;
50               #  push_eax              # i (local)
8D85 18000000 # lea_eax,[ebp+DWORD] %24
50               #  push_eax              # $ (dup)
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # 1
B8 01000000 #   mov_eax, %1
5B                # pop_ebx               # +
01D8 #  add_eax,ebx
5B                # pop_ebx               # =
8903 #  mov_[ebx],eax
50               #  push_eax              # 1
B8 01000000 #   mov_eax, %1
5B                # pop_ebx               # -
29C3 #  sub_ebx,eax
89D8 #  mov_eax,ebx
58                # pop_eax               # ;
E9 %_memmove_loop2 #    jmp %_memmove_loop2
:_memmove_loop_end2 #:_memmove_loop_end2
E9 %_memmove_else_end1 #    jmp %_memmove_else_end1
:_memmove_else1 #:_memmove_else1
 ## stdlib.c 48
50               #  push_eax              # src (local)
8D85 08000000 # lea_eax,[ebp+DWORD] %8
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # dest (local)
8D85 0C000000 # lea_eax,[ebp+DWORD] %12
8B00          # mov_eax,[eax]         # ?
5B                # pop_ebx               # <
39C3 #  cmp_eax_ebx
0F92C0 #    setb_al
0FB6C0 #    movzx_eax,al
85C0           #    test_eax,eax          # if
58 #    pop_eax
0F84 %_memmove_else4 #  je %_memmove_else4
 ## stdlib.c 49
50               #  push_eax              # j (local)
8D85 18000000 # lea_eax,[ebp+DWORD] %24
50               #  push_eax              # n (local)
8D85 04000000 # lea_eax,[ebp+DWORD] %4
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # 1
B8 01000000 #   mov_eax, %1
5B                # pop_ebx               # -
29C3 #  sub_ebx,eax
89D8 #  mov_eax,ebx
5B                # pop_ebx               # =
8903 #  mov_[ebx],eax
58                # pop_eax               # ;
 ## stdlib.c 51
50               #  push_eax              # i (local)
8D85 1C000000 # lea_eax,[ebp+DWORD] %28
50               #  push_eax              # 0
B8 00000000 #   mov_eax, %0
5B                # pop_ebx               # =
8903 #  mov_[ebx],eax
58                # pop_eax               # ;
:_memmove_loop5 #:_memmove_loop5
50               #  push_eax              # i (local)
8D85 1C000000 # lea_eax,[ebp+DWORD] %28
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # n (local)
8D85 04000000 # lea_eax,[ebp+DWORD] %4
8B00          # mov_eax,[eax]         # ?
5B                # pop_ebx               # <
39C3 #  cmp_eax_ebx
0F92C0 #    setb_al
0FB6C0 #    movzx_eax,al
85C0           #    test_eax,eax          # !
0F94C0 #    sete_al
0FB6C0 #    movzx_eax,al
85C0           #    test_eax,eax          # if
58 #    pop_eax
0F84 %_memmove_else6 #  je %_memmove_else6
E9 %_memmove_loop_end5 #    jmp %_memmove_loop_end5
 ## stdlib.c 52
:_memmove_else6  #:_memmove_else6 # no else
50               #  push_eax              # d (local)
8D85 10000000 # lea_eax,[ebp+DWORD] %16
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # j (local)
8D85 18000000 # lea_eax,[ebp+DWORD] %24
8B00          # mov_eax,[eax]         # ?
5B                # pop_ebx               # +
01D8 #  add_eax,ebx
50               #  push_eax              # s (local)
8D85 14000000 # lea_eax,[ebp+DWORD] %20
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # j (local)
8D85 18000000 # lea_eax,[ebp+DWORD] %24
8B00          # mov_eax,[eax]         # ?
5B                # pop_ebx               # +
01D8 #  add_eax,ebx
8A00           #    mov_al,[eax]          # ?1
0FB6C0 #    movzx_eax,al
0FBEC0           #  movsx_eax,al          # char
5B                # pop_ebx               # =1
8803 #  mov_[ebx],al
58                # pop_eax               # ;
50               #  push_eax              # i (local)
8D85 1C000000 # lea_eax,[ebp+DWORD] %28
50               #  push_eax              # $ (dup)
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # 1
B8 01000000 #   mov_eax, %1
5B                # pop_ebx               # +
01D8 #  add_eax,ebx
5B                # pop_ebx               # =
8903 #  mov_[ebx],eax
50               #  push_eax              # 1
B8 01000000 #   mov_eax, %1
5B                # pop_ebx               # -
29C3 #  sub_ebx,eax
89D8 #  mov_eax,ebx
58                # pop_eax               # ;
50               #  push_eax              # j (local)
8D85 18000000 # lea_eax,[ebp+DWORD] %24
50               #  push_eax              # $ (dup)
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # 1
B8 01000000 #   mov_eax, %1
5B                # pop_ebx               # -
29C3 #  sub_ebx,eax
89D8 #  mov_eax,ebx
5B                # pop_ebx               # =
8903 #  mov_[ebx],eax
50               #  push_eax              # 1
B8 01000000 #   mov_eax, %1
5B                # pop_ebx               # +
01D8 #  add_eax,ebx
58                # pop_eax               # ;
E9 %_memmove_loop5 #    jmp %_memmove_loop5
:_memmove_loop_end5 #:_memmove_loop_end5
:_memmove_else4  #:_memmove_else4 # no else
:_memmove_else_end1 #:_memmove_else_end1
 ## stdlib.c 54
50               #  push_eax              # dest (local)
8D85 0C000000 # lea_eax,[ebp+DWORD] %12
8B00          # mov_eax,[eax]         # ?
8B5D00          #   mov_ebx,[ebp]         # return
53 #    push_ebx
C3 #    ret
50               #  push_eax              # 0
B8 00000000 #   mov_eax, %0
8B5D00          #   mov_ebx,[ebp]         # return
53 #    push_ebx
C3 #    ret
 #
:f_memset #:f_memset
58 #    pop_eax
894500 #    mov_[ebp],eax
58 #    pop_eax
50               #  push_eax              # n (local)
8D85 04000000 # lea_eax,[ebp+DWORD] %4
5B                # pop_ebx               # =:
8918 #  mov_[eax],ebx
58 #    pop_eax
50               #  push_eax              # c (local)
8D85 08000000 # lea_eax,[ebp+DWORD] %8
5B                # pop_ebx               # =:
8918 #  mov_[eax],ebx
58 #    pop_eax
50               #  push_eax              # s (local)
8D85 0C000000 # lea_eax,[ebp+DWORD] %12
5B                # pop_ebx               # =:
8918 #  mov_[eax],ebx
58 #    pop_eax
50               #  push_eax              # p (local)
8D85 10000000 # lea_eax,[ebp+DWORD] %16
50               #  push_eax              # s (local)
8D85 0C000000 # lea_eax,[ebp+DWORD] %12
8B00          # mov_eax,[eax]         # ?
5B                # pop_ebx               # =
8903 #  mov_[ebx],eax
58                # pop_eax               # ;
 ## stdlib.c 60
50               #  push_eax              # i (local)
8D85 14000000 # lea_eax,[ebp+DWORD] %20
50               #  push_eax              # 0
B8 00000000 #   mov_eax, %0
5B                # pop_ebx               # =
8903 #  mov_[ebx],eax
58                # pop_eax               # ;
:_memset_loop1 #:_memset_loop1
50               #  push_eax              # i (local)
8D85 14000000 # lea_eax,[ebp+DWORD] %20
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # n (local)
8D85 04000000 # lea_eax,[ebp+DWORD] %4
8B00          # mov_eax,[eax]         # ?
5B                # pop_ebx               # <
39C3 #  cmp_eax_ebx
0F92C0 #    setb_al
0FB6C0 #    movzx_eax,al
85C0           #    test_eax,eax          # !
0F94C0 #    sete_al
0FB6C0 #    movzx_eax,al
85C0           #    test_eax,eax          # if
58 #    pop_eax
0F84 %_memset_else2 #   je %_memset_else2
E9 %_memset_loop_end1 # jmp %_memset_loop_end1
 ## stdlib.c 61
:_memset_else2  #:_memset_else2 # no else
50               #  push_eax              # p (local)
8D85 10000000 # lea_eax,[ebp+DWORD] %16
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # i (local)
8D85 14000000 # lea_eax,[ebp+DWORD] %20
8B00          # mov_eax,[eax]         # ?
5B                # pop_ebx               # +
01D8 #  add_eax,ebx
50               #  push_eax              # c (local)
8D85 08000000 # lea_eax,[ebp+DWORD] %8
8B00          # mov_eax,[eax]         # ?
5B                # pop_ebx               # =1
8803 #  mov_[ebx],al
58                # pop_eax               # ;
50               #  push_eax              # i (local)
8D85 14000000 # lea_eax,[ebp+DWORD] %20
50               #  push_eax              # $ (dup)
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # 1
B8 01000000 #   mov_eax, %1
5B                # pop_ebx               # +
01D8 #  add_eax,ebx
5B                # pop_ebx               # =
8903 #  mov_[ebx],eax
50               #  push_eax              # 1
B8 01000000 #   mov_eax, %1
5B                # pop_ebx               # -
29C3 #  sub_ebx,eax
89D8 #  mov_eax,ebx
58                # pop_eax               # ;
E9 %_memset_loop1 # jmp %_memset_loop1
:_memset_loop_end1 #:_memset_loop_end1
 ## stdlib.c 62
50               #  push_eax              # s (local)
8D85 0C000000 # lea_eax,[ebp+DWORD] %12
8B00          # mov_eax,[eax]         # ?
8B5D00          #   mov_ebx,[ebp]         # return
53 #    push_ebx
C3 #    ret
50               #  push_eax              # 0
B8 00000000 #   mov_eax, %0
8B5D00          #   mov_ebx,[ebp]         # return
53 #    push_ebx
C3 #    ret
 #
:f_memcmp #:f_memcmp
58 #    pop_eax
894500 #    mov_[ebp],eax
58 #    pop_eax
50               #  push_eax              # n (local)
8D85 04000000 # lea_eax,[ebp+DWORD] %4
5B                # pop_ebx               # =:
8918 #  mov_[eax],ebx
58 #    pop_eax
50               #  push_eax              # s2 (local)
8D85 08000000 # lea_eax,[ebp+DWORD] %8
5B                # pop_ebx               # =:
8918 #  mov_[eax],ebx
58 #    pop_eax
50               #  push_eax              # s1 (local)
8D85 0C000000 # lea_eax,[ebp+DWORD] %12
5B                # pop_ebx               # =:
8918 #  mov_[eax],ebx
58 #    pop_eax
50               #  push_eax              # p1 (local)
8D85 10000000 # lea_eax,[ebp+DWORD] %16
50               #  push_eax              # s1 (local)
8D85 0C000000 # lea_eax,[ebp+DWORD] %12
8B00          # mov_eax,[eax]         # ?
5B                # pop_ebx               # =
8903 #  mov_[ebx],eax
58                # pop_eax               # ;
50               #  push_eax              # p2 (local)
8D85 14000000 # lea_eax,[ebp+DWORD] %20
50               #  push_eax              # s2 (local)
8D85 08000000 # lea_eax,[ebp+DWORD] %8
8B00          # mov_eax,[eax]         # ?
5B                # pop_ebx               # =
8903 #  mov_[ebx],eax
58                # pop_eax               # ;
 ## stdlib.c 69
50               #  push_eax              # i (local)
8D85 18000000 # lea_eax,[ebp+DWORD] %24
50               #  push_eax              # 0
B8 00000000 #   mov_eax, %0
5B                # pop_ebx               # =
8903 #  mov_[ebx],eax
58                # pop_eax               # ;
:_memcmp_loop1 #:_memcmp_loop1
50               #  push_eax              # i (local)
8D85 18000000 # lea_eax,[ebp+DWORD] %24
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # n (local)
8D85 04000000 # lea_eax,[ebp+DWORD] %4
8B00          # mov_eax,[eax]         # ?
5B                # pop_ebx               # <
39C3 #  cmp_eax_ebx
0F92C0 #    setb_al
0FB6C0 #    movzx_eax,al
85C0           #    test_eax,eax          # !
0F94C0 #    sete_al
0FB6C0 #    movzx_eax,al
85C0           #    test_eax,eax          # if
58 #    pop_eax
0F84 %_memcmp_else2 #   je %_memcmp_else2
E9 %_memcmp_loop_end1 # jmp %_memcmp_loop_end1
 ## stdlib.c 70
:_memcmp_else2  #:_memcmp_else2 # no else
50               #  push_eax              # result (local)
8D85 1C000000 # lea_eax,[ebp+DWORD] %28
50               #  push_eax              # p1 (local)
8D85 10000000 # lea_eax,[ebp+DWORD] %16
8B00          # mov_eax,[eax]         # ?
8A00           #    mov_al,[eax]          # ?1
0FB6C0 #    movzx_eax,al
0FBEC0           #  movsx_eax,al          # char
50               #  push_eax              # p2 (local)
8D85 14000000 # lea_eax,[ebp+DWORD] %20
8B00          # mov_eax,[eax]         # ?
8A00           #    mov_al,[eax]          # ?1
0FB6C0 #    movzx_eax,al
0FBEC0           #  movsx_eax,al          # char
5B                # pop_ebx               # -
29C3 #  sub_ebx,eax
89D8 #  mov_eax,ebx
5B                # pop_ebx               # =
8903 #  mov_[ebx],eax
58                # pop_eax               # ;
 ## stdlib.c 72
50               #  push_eax              # result (local)
8D85 1C000000 # lea_eax,[ebp+DWORD] %28
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # 0
B8 00000000 #   mov_eax, %0
5B                # pop_ebx               # !=
39C3 #  cmp_eax_ebx
0F95C0 #    setne_al
0FB6C0 #    movzx_eax,al
85C0           #    test_eax,eax          # if
58 #    pop_eax
0F84 %_memcmp_else3 #   je %_memcmp_else3
 ## stdlib.c 73
50               #  push_eax              # result (local)
8D85 1C000000 # lea_eax,[ebp+DWORD] %28
8B00          # mov_eax,[eax]         # ?
8B5D00          #   mov_ebx,[ebp]         # return
53 #    push_ebx
C3 #    ret
:_memcmp_else3  #:_memcmp_else3 # no else
50               #  push_eax              # i (local)
8D85 18000000 # lea_eax,[ebp+DWORD] %24
50               #  push_eax              # $ (dup)
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # 1
B8 01000000 #   mov_eax, %1
5B                # pop_ebx               # +
01D8 #  add_eax,ebx
5B                # pop_ebx               # =
8903 #  mov_[ebx],eax
50               #  push_eax              # 1
B8 01000000 #   mov_eax, %1
5B                # pop_ebx               # -
29C3 #  sub_ebx,eax
89D8 #  mov_eax,ebx
58                # pop_eax               # ;
50               #  push_eax              # p1 (local)
8D85 10000000 # lea_eax,[ebp+DWORD] %16
50               #  push_eax              # $ (dup)
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # 1
B8 01000000 #   mov_eax, %1
5B                # pop_ebx               # +
01D8 #  add_eax,ebx
5B                # pop_ebx               # =
8903 #  mov_[ebx],eax
50               #  push_eax              # 1
B8 01000000 #   mov_eax, %1
5B                # pop_ebx               # -
29C3 #  sub_ebx,eax
89D8 #  mov_eax,ebx
58                # pop_eax               # ;
50               #  push_eax              # p2 (local)
8D85 14000000 # lea_eax,[ebp+DWORD] %20
50               #  push_eax              # $ (dup)
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # 1
B8 01000000 #   mov_eax, %1
5B                # pop_ebx               # +
01D8 #  add_eax,ebx
5B                # pop_ebx               # =
8903 #  mov_[ebx],eax
50               #  push_eax              # 1
B8 01000000 #   mov_eax, %1
5B                # pop_ebx               # -
29C3 #  sub_ebx,eax
89D8 #  mov_eax,ebx
58                # pop_eax               # ;
E9 %_memcmp_loop1 # jmp %_memcmp_loop1
:_memcmp_loop_end1 #:_memcmp_loop_end1
 ## stdlib.c 75
50               #  push_eax              # 0
B8 00000000 #   mov_eax, %0
8B5D00          #   mov_ebx,[ebp]         # return
53 #    push_ebx
C3 #    ret
50               #  push_eax              # 0
B8 00000000 #   mov_eax, %0
8B5D00          #   mov_ebx,[ebp]         # return
53 #    push_ebx
C3 #    ret
 #
:f_strlen #:f_strlen
58 #    pop_eax
894500 #    mov_[ebp],eax
58 #    pop_eax
50               #  push_eax              # s (local)
8D85 04000000 # lea_eax,[ebp+DWORD] %4
5B                # pop_ebx               # =:
8918 #  mov_[eax],ebx
58 #    pop_eax
50               #  push_eax              # len (local)
8D85 08000000 # lea_eax,[ebp+DWORD] %8
50               #  push_eax              # 0
B8 00000000 #   mov_eax, %0
5B                # pop_ebx               # =
8903 #  mov_[ebx],eax
58                # pop_eax               # ;
 ## stdlib.c 81
:_strlen_loop1 #:_strlen_loop1
50               #  push_eax              # s (local)
8D85 04000000 # lea_eax,[ebp+DWORD] %4
8B00          # mov_eax,[eax]         # ?
8A00           #    mov_al,[eax]          # ?1
0FB6C0 #    movzx_eax,al
0FBEC0           #  movsx_eax,al          # char
50               #  push_eax              # 0
B8 00000000 #   mov_eax, %0
5B                # pop_ebx               # !=
39C3 #  cmp_eax_ebx
0F95C0 #    setne_al
0FB6C0 #    movzx_eax,al
85C0           #    test_eax,eax          # !
0F94C0 #    sete_al
0FB6C0 #    movzx_eax,al
85C0           #    test_eax,eax          # if
58 #    pop_eax
0F84 %_strlen_else2 #   je %_strlen_else2
E9 %_strlen_loop_end1 # jmp %_strlen_loop_end1
 ## stdlib.c 82
:_strlen_else2  #:_strlen_else2 # no else
50               #  push_eax              # len (local)
8D85 08000000 # lea_eax,[ebp+DWORD] %8
50               #  push_eax              # $ (dup)
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # 1
B8 01000000 #   mov_eax, %1
5B                # pop_ebx               # +
01D8 #  add_eax,ebx
5B                # pop_ebx               # =
8903 #  mov_[ebx],eax
50               #  push_eax              # 1
B8 01000000 #   mov_eax, %1
5B                # pop_ebx               # -
29C3 #  sub_ebx,eax
89D8 #  mov_eax,ebx
58                # pop_eax               # ;
50               #  push_eax              # s (local)
8D85 04000000 # lea_eax,[ebp+DWORD] %4
50               #  push_eax              # $ (dup)
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # 1
B8 01000000 #   mov_eax, %1
5B                # pop_ebx               # +
01D8 #  add_eax,ebx
5B                # pop_ebx               # =
8903 #  mov_[ebx],eax
50               #  push_eax              # 1
B8 01000000 #   mov_eax, %1
5B                # pop_ebx               # -
29C3 #  sub_ebx,eax
89D8 #  mov_eax,ebx
58                # pop_eax               # ;
E9 %_strlen_loop1 # jmp %_strlen_loop1
:_strlen_loop_end1 #:_strlen_loop_end1
 ## stdlib.c 83
50               #  push_eax              # len (local)
8D85 08000000 # lea_eax,[ebp+DWORD] %8
8B00          # mov_eax,[eax]         # ?
8B5D00          #   mov_ebx,[ebp]         # return
53 #    push_ebx
C3 #    ret
50               #  push_eax              # 0
B8 00000000 #   mov_eax, %0
8B5D00          #   mov_ebx,[ebp]         # return
53 #    push_ebx
C3 #    ret
 #
:f_strcpy #:f_strcpy
58 #    pop_eax
894500 #    mov_[ebp],eax
58 #    pop_eax
50               #  push_eax              # src (local)
8D85 04000000 # lea_eax,[ebp+DWORD] %4
5B                # pop_ebx               # =:
8918 #  mov_[eax],ebx
58 #    pop_eax
50               #  push_eax              # dest (local)
8D85 08000000 # lea_eax,[ebp+DWORD] %8
5B                # pop_ebx               # =:
8918 #  mov_[eax],ebx
58 #    pop_eax
50               #  push_eax              # result (local)
8D85 0C000000 # lea_eax,[ebp+DWORD] %12
50               #  push_eax              # dest (local)
8D85 08000000 # lea_eax,[ebp+DWORD] %8
8B00          # mov_eax,[eax]         # ?
5B                # pop_ebx               # =
8903 #  mov_[ebx],eax
58                # pop_eax               # ;
 ## stdlib.c 89
:_strcpy_loop1 #:_strcpy_loop1
50               #  push_eax              # src (local)
8D85 04000000 # lea_eax,[ebp+DWORD] %4
8B00          # mov_eax,[eax]         # ?
8A00           #    mov_al,[eax]          # ?1
0FB6C0 #    movzx_eax,al
0FBEC0           #  movsx_eax,al          # char
50               #  push_eax              # 0
B8 00000000 #   mov_eax, %0
5B                # pop_ebx               # !=
39C3 #  cmp_eax_ebx
0F95C0 #    setne_al
0FB6C0 #    movzx_eax,al
85C0           #    test_eax,eax          # !
0F94C0 #    sete_al
0FB6C0 #    movzx_eax,al
85C0           #    test_eax,eax          # if
58 #    pop_eax
0F84 %_strcpy_else2 #   je %_strcpy_else2
E9 %_strcpy_loop_end1 # jmp %_strcpy_loop_end1
 ## stdlib.c 90
:_strcpy_else2  #:_strcpy_else2 # no else
50               #  push_eax              # dest (local)
8D85 08000000 # lea_eax,[ebp+DWORD] %8
50               #  push_eax              # $ (dup)
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # 1
B8 01000000 #   mov_eax, %1
5B                # pop_ebx               # +
01D8 #  add_eax,ebx
5B                # pop_ebx               # =
8903 #  mov_[ebx],eax
50               #  push_eax              # 1
B8 01000000 #   mov_eax, %1
5B                # pop_ebx               # -
29C3 #  sub_ebx,eax
89D8 #  mov_eax,ebx
50               #  push_eax              # src (local)
8D85 04000000 # lea_eax,[ebp+DWORD] %4
50               #  push_eax              # $ (dup)
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # 1
B8 01000000 #   mov_eax, %1
5B                # pop_ebx               # +
01D8 #  add_eax,ebx
5B                # pop_ebx               # =
8903 #  mov_[ebx],eax
50               #  push_eax              # 1
B8 01000000 #   mov_eax, %1
5B                # pop_ebx               # -
29C3 #  sub_ebx,eax
89D8 #  mov_eax,ebx
8A00           #    mov_al,[eax]          # ?1
0FB6C0 #    movzx_eax,al
0FBEC0           #  movsx_eax,al          # char
5B                # pop_ebx               # =1
8803 #  mov_[ebx],al
58                # pop_eax               # ;
E9 %_strcpy_loop1 # jmp %_strcpy_loop1
:_strcpy_loop_end1 #:_strcpy_loop_end1
 ## stdlib.c 91
50               #  push_eax              # dest (local)
8D85 08000000 # lea_eax,[ebp+DWORD] %8
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # 0
B8 00000000 #   mov_eax, %0
5B                # pop_ebx               # =1
8803 #  mov_[ebx],al
58                # pop_eax               # ;
 ## stdlib.c 92
50               #  push_eax              # result (local)
8D85 0C000000 # lea_eax,[ebp+DWORD] %12
8B00          # mov_eax,[eax]         # ?
8B5D00          #   mov_ebx,[ebp]         # return
53 #    push_ebx
C3 #    ret
50               #  push_eax              # 0
B8 00000000 #   mov_eax, %0
8B5D00          #   mov_ebx,[ebp]         # return
53 #    push_ebx
C3 #    ret
 #
:f_strncpy #:f_strncpy
58 #    pop_eax
894500 #    mov_[ebp],eax
58 #    pop_eax
50               #  push_eax              # n (local)
8D85 04000000 # lea_eax,[ebp+DWORD] %4
5B                # pop_ebx               # =:
8918 #  mov_[eax],ebx
58 #    pop_eax
50               #  push_eax              # src (local)
8D85 08000000 # lea_eax,[ebp+DWORD] %8
5B                # pop_ebx               # =:
8918 #  mov_[eax],ebx
58 #    pop_eax
50               #  push_eax              # dest (local)
8D85 0C000000 # lea_eax,[ebp+DWORD] %12
5B                # pop_ebx               # =:
8918 #  mov_[eax],ebx
58 #    pop_eax
50               #  push_eax              # d (local)
8D85 10000000 # lea_eax,[ebp+DWORD] %16
50               #  push_eax              # dest (local)
8D85 0C000000 # lea_eax,[ebp+DWORD] %12
8B00          # mov_eax,[eax]         # ?
5B                # pop_ebx               # =
8903 #  mov_[ebx],eax
58                # pop_eax               # ;
50               #  push_eax              # s (local)
8D85 14000000 # lea_eax,[ebp+DWORD] %20
50               #  push_eax              # src (local)
8D85 08000000 # lea_eax,[ebp+DWORD] %8
8B00          # mov_eax,[eax]         # ?
5B                # pop_ebx               # =
8903 #  mov_[ebx],eax
58                # pop_eax               # ;
 ## stdlib.c 99
50               #  push_eax              # i (local)
8D85 18000000 # lea_eax,[ebp+DWORD] %24
50               #  push_eax              # 0
B8 00000000 #   mov_eax, %0
5B                # pop_ebx               # =
8903 #  mov_[ebx],eax
58                # pop_eax               # ;
:_strncpy_loop1 #:_strncpy_loop1
50               #  push_eax              # i (local)
8D85 18000000 # lea_eax,[ebp+DWORD] %24
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # n (local)
8D85 04000000 # lea_eax,[ebp+DWORD] %4
8B00          # mov_eax,[eax]         # ?
5B                # pop_ebx               # <s
39C3 #  cmp_eax_ebx
0F9CC0 #    setl_al
0FB6C0 #    movzx_eax,al
85C0           #    test_eax,eax          # !
0F94C0 #    sete_al
0FB6C0 #    movzx_eax,al
85C0           #    test_eax,eax          # if
58 #    pop_eax
0F84 %_strncpy_else2 #  je %_strncpy_else2
E9 %_strncpy_loop_end1 #    jmp %_strncpy_loop_end1
 ## stdlib.c 100
 ## stdlib.c 101
:_strncpy_else2  #:_strncpy_else2 # no else
50               #  push_eax              # d (local)
8D85 10000000 # lea_eax,[ebp+DWORD] %16
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # i (local)
8D85 18000000 # lea_eax,[ebp+DWORD] %24
8B00          # mov_eax,[eax]         # ?
5B                # pop_ebx               # +
01D8 #  add_eax,ebx
50               #  push_eax              # s (local)
8D85 14000000 # lea_eax,[ebp+DWORD] %20
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # i (local)
8D85 18000000 # lea_eax,[ebp+DWORD] %24
8B00          # mov_eax,[eax]         # ?
5B                # pop_ebx               # +
01D8 #  add_eax,ebx
8A00           #    mov_al,[eax]          # ?1
0FB6C0 #    movzx_eax,al
0FBEC0           #  movsx_eax,al          # char
5B                # pop_ebx               # =1
8803 #  mov_[ebx],al
58                # pop_eax               # ;
 ## stdlib.c 102
50               #  push_eax              # s (local)
8D85 14000000 # lea_eax,[ebp+DWORD] %20
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # i (local)
8D85 18000000 # lea_eax,[ebp+DWORD] %24
8B00          # mov_eax,[eax]         # ?
5B                # pop_ebx               # +
01D8 #  add_eax,ebx
8A00           #    mov_al,[eax]          # ?1
0FB6C0 #    movzx_eax,al
0FBEC0           #  movsx_eax,al          # char
50               #  push_eax              # 0
B8 00000000 #   mov_eax, %0
5B                # pop_ebx               # ==
39C3 #  cmp_eax_ebx
0F94C0 #    sete_al
0FB6C0 #    movzx_eax,al
85C0           #    test_eax,eax          # if
58 #    pop_eax
0F84 %_strncpy_else3 #  je %_strncpy_else3
 ## stdlib.c 103
E9 %_strncpy_loop_end1 #    jmp %_strncpy_loop_end1
:_strncpy_else3  #:_strncpy_else3 # no else
50               #  push_eax              # i (local)
8D85 18000000 # lea_eax,[ebp+DWORD] %24
50               #  push_eax              # $ (dup)
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # 1
B8 01000000 #   mov_eax, %1
5B                # pop_ebx               # +
01D8 #  add_eax,ebx
5B                # pop_ebx               # =
8903 #  mov_[ebx],eax
50               #  push_eax              # 1
B8 01000000 #   mov_eax, %1
5B                # pop_ebx               # -
29C3 #  sub_ebx,eax
89D8 #  mov_eax,ebx
58                # pop_eax               # ;
E9 %_strncpy_loop1 #    jmp %_strncpy_loop1
:_strncpy_loop_end1 #:_strncpy_loop_end1
 ## stdlib.c 105
50               #  push_eax              # dest (local)
8D85 0C000000 # lea_eax,[ebp+DWORD] %12
8B00          # mov_eax,[eax]         # ?
8B5D00          #   mov_ebx,[ebp]         # return
53 #    push_ebx
C3 #    ret
50               #  push_eax              # 0
B8 00000000 #   mov_eax, %0
8B5D00          #   mov_ebx,[ebp]         # return
53 #    push_ebx
C3 #    ret
 #
:f_strcat #:f_strcat
58 #    pop_eax
894500 #    mov_[ebp],eax
58 #    pop_eax
50               #  push_eax              # src (local)
8D85 04000000 # lea_eax,[ebp+DWORD] %4
5B                # pop_ebx               # =:
8918 #  mov_[eax],ebx
58 #    pop_eax
50               #  push_eax              # dest (local)
8D85 08000000 # lea_eax,[ebp+DWORD] %8
5B                # pop_ebx               # =:
8918 #  mov_[eax],ebx
58 #    pop_eax
 ## stdlib.c 110
50               #  push_eax              # dest (local)
8D85 08000000 # lea_eax,[ebp+DWORD] %8
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # dest (local)
8D85 08000000 # lea_eax,[ebp+DWORD] %8
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # strlen (function)
B8 &f_strlen #  mov_eax, &f_strlen
81C5 0C000000          #    add_ebp, %12         # ()
FFD0 #  call_eax
81ED 0C000000 # sub_ebp, %12
5B                # pop_ebx               # +
01D8 #  add_eax,ebx
50               #  push_eax              # src (local)
8D85 04000000 # lea_eax,[ebp+DWORD] %4
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # strcpy (function)
B8 &f_strcpy #  mov_eax, &f_strcpy
81C5 0C000000          #    add_ebp, %12         # ()
FFD0 #  call_eax
81ED 0C000000 # sub_ebp, %12
58                # pop_eax               # ;
 ## stdlib.c 111
50               #  push_eax              # dest (local)
8D85 08000000 # lea_eax,[ebp+DWORD] %8
8B00          # mov_eax,[eax]         # ?
8B5D00          #   mov_ebx,[ebp]         # return
53 #    push_ebx
C3 #    ret
50               #  push_eax              # 0
B8 00000000 #   mov_eax, %0
8B5D00          #   mov_ebx,[ebp]         # return
53 #    push_ebx
C3 #    ret
 #
:f_strchr #:f_strchr
58 #    pop_eax
894500 #    mov_[ebp],eax
58 #    pop_eax
50               #  push_eax              # c (local)
8D85 04000000 # lea_eax,[ebp+DWORD] %4
5B                # pop_ebx               # =:
8918 #  mov_[eax],ebx
58 #    pop_eax
50               #  push_eax              # s (local)
8D85 08000000 # lea_eax,[ebp+DWORD] %8
5B                # pop_ebx               # =:
8918 #  mov_[eax],ebx
58 #    pop_eax
 ## stdlib.c 116
:_strchr_loop1 #:_strchr_loop1
50               #  push_eax              # s (local)
8D85 08000000 # lea_eax,[ebp+DWORD] %8
8B00          # mov_eax,[eax]         # ?
8A00           #    mov_al,[eax]          # ?1
0FB6C0 #    movzx_eax,al
0FBEC0           #  movsx_eax,al          # char
50               #  push_eax              # 0
B8 00000000 #   mov_eax, %0
5B                # pop_ebx               # !=
39C3 #  cmp_eax_ebx
0F95C0 #    setne_al
0FB6C0 #    movzx_eax,al
85C0           #    test_eax,eax          # !
0F94C0 #    sete_al
0FB6C0 #    movzx_eax,al
85C0           #    test_eax,eax          # if
58 #    pop_eax
0F84 %_strchr_else2 #   je %_strchr_else2
E9 %_strchr_loop_end1 # jmp %_strchr_loop_end1
 ## stdlib.c 117
:_strchr_else2  #:_strchr_else2 # no else
50               #  push_eax              # s (local)
8D85 08000000 # lea_eax,[ebp+DWORD] %8
8B00          # mov_eax,[eax]         # ?
8A00           #    mov_al,[eax]          # ?1
0FB6C0 #    movzx_eax,al
0FBEC0           #  movsx_eax,al          # char
50               #  push_eax              # c (local)
8D85 04000000 # lea_eax,[ebp+DWORD] %4
8B00          # mov_eax,[eax]         # ?
5B                # pop_ebx               # ==
39C3 #  cmp_eax_ebx
0F94C0 #    sete_al
0FB6C0 #    movzx_eax,al
85C0           #    test_eax,eax          # if
58 #    pop_eax
0F84 %_strchr_else3 #   je %_strchr_else3
 ## stdlib.c 118
50               #  push_eax              # s (local)
8D85 08000000 # lea_eax,[ebp+DWORD] %8
8B00          # mov_eax,[eax]         # ?
8B5D00          #   mov_ebx,[ebp]         # return
53 #    push_ebx
C3 #    ret
:_strchr_else3  #:_strchr_else3 # no else
50               #  push_eax              # s (local)
8D85 08000000 # lea_eax,[ebp+DWORD] %8
50               #  push_eax              # $ (dup)
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # 1
B8 01000000 #   mov_eax, %1
5B                # pop_ebx               # +
01D8 #  add_eax,ebx
5B                # pop_ebx               # =
8903 #  mov_[ebx],eax
50               #  push_eax              # 1
B8 01000000 #   mov_eax, %1
5B                # pop_ebx               # -
29C3 #  sub_ebx,eax
89D8 #  mov_eax,ebx
58                # pop_eax               # ;
E9 %_strchr_loop1 # jmp %_strchr_loop1
:_strchr_loop_end1 #:_strchr_loop_end1
 ## stdlib.c 119
50               #  push_eax              # c (local)
8D85 04000000 # lea_eax,[ebp+DWORD] %4
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # 0
B8 00000000 #   mov_eax, %0
5B                # pop_ebx               # ==
39C3 #  cmp_eax_ebx
0F94C0 #    sete_al
0FB6C0 #    movzx_eax,al
85C0           #    test_eax,eax          # if
58 #    pop_eax
0F84 %_strchr_else4 #   je %_strchr_else4
50               #  push_eax              # s (local)
8D85 08000000 # lea_eax,[ebp+DWORD] %8
8B00          # mov_eax,[eax]         # ?
E9 %_strchr_else_end4 # jmp %_strchr_else_end4
:_strchr_else4 #:_strchr_else4
50               #  push_eax              # 0
B8 00000000 #   mov_eax, %0
:_strchr_else_end4 #:_strchr_else_end4
8B5D00          #   mov_ebx,[ebp]         # return
53 #    push_ebx
C3 #    ret
50               #  push_eax              # 0
B8 00000000 #   mov_eax, %0
8B5D00          #   mov_ebx,[ebp]         # return
53 #    push_ebx
C3 #    ret
 #
:f_strrchr #:f_strrchr
58 #    pop_eax
894500 #    mov_[ebp],eax
58 #    pop_eax
50               #  push_eax              # c (local)
8D85 04000000 # lea_eax,[ebp+DWORD] %4
5B                # pop_ebx               # =:
8918 #  mov_[eax],ebx
58 #    pop_eax
50               #  push_eax              # s (local)
8D85 08000000 # lea_eax,[ebp+DWORD] %8
5B                # pop_ebx               # =:
8918 #  mov_[eax],ebx
58 #    pop_eax
50               #  push_eax              # n (local)
8D85 0C000000 # lea_eax,[ebp+DWORD] %12
50               #  push_eax              # s (local)
8D85 08000000 # lea_eax,[ebp+DWORD] %8
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # strlen (function)
B8 &f_strlen #  mov_eax, &f_strlen
81C5 10000000          #    add_ebp, %16         # ()
FFD0 #  call_eax
81ED 10000000 # sub_ebp, %16
5B                # pop_ebx               # =
8903 #  mov_[ebx],eax
58                # pop_eax               # ;
 ## stdlib.c 125
50               #  push_eax              # i (local)
8D85 10000000 # lea_eax,[ebp+DWORD] %16
50               #  push_eax              # n (local)
8D85 0C000000 # lea_eax,[ebp+DWORD] %12
8B00          # mov_eax,[eax]         # ?
5B                # pop_ebx               # =
8903 #  mov_[ebx],eax
58                # pop_eax               # ;
:_strrchr_loop1 #:_strrchr_loop1
50               #  push_eax              # i (local)
8D85 10000000 # lea_eax,[ebp+DWORD] %16
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # 0
B8 00000000 #   mov_eax, %0
5B                # pop_ebx               # >=sfv
39C3 #  cmp_eax_ebx
0F9DC0 #    setge_al
0FB6C0 #    movzx_eax,al
85C0           #    test_eax,eax          # !
0F94C0 #    sete_al
0FB6C0 #    movzx_eax,al
85C0           #    test_eax,eax          # if
58 #    pop_eax
0F84 %_strrchr_else2 #  je %_strrchr_else2
E9 %_strrchr_loop_end1 #    jmp %_strrchr_loop_end1
 ## stdlib.c 126
:_strrchr_else2  #:_strrchr_else2 # no else
50               #  push_eax              # s (local)
8D85 08000000 # lea_eax,[ebp+DWORD] %8
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # i (local)
8D85 10000000 # lea_eax,[ebp+DWORD] %16
8B00          # mov_eax,[eax]         # ?
5B                # pop_ebx               # +
01D8 #  add_eax,ebx
8A00           #    mov_al,[eax]          # ?1
0FB6C0 #    movzx_eax,al
0FBEC0           #  movsx_eax,al          # char
50               #  push_eax              # c (local)
8D85 04000000 # lea_eax,[ebp+DWORD] %4
8B00          # mov_eax,[eax]         # ?
5B                # pop_ebx               # ==
39C3 #  cmp_eax_ebx
0F94C0 #    sete_al
0FB6C0 #    movzx_eax,al
85C0           #    test_eax,eax          # if
58 #    pop_eax
0F84 %_strrchr_else3 #  je %_strrchr_else3
 ## stdlib.c 127
50               #  push_eax              # s (local)
8D85 08000000 # lea_eax,[ebp+DWORD] %8
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # i (local)
8D85 10000000 # lea_eax,[ebp+DWORD] %16
8B00          # mov_eax,[eax]         # ?
5B                # pop_ebx               # +
01D8 #  add_eax,ebx
8B5D00          #   mov_ebx,[ebp]         # return
53 #    push_ebx
C3 #    ret
:_strrchr_else3  #:_strrchr_else3 # no else
50               #  push_eax              # i (local)
8D85 10000000 # lea_eax,[ebp+DWORD] %16
50               #  push_eax              # $ (dup)
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # 1
B8 01000000 #   mov_eax, %1
5B                # pop_ebx               # -
29C3 #  sub_ebx,eax
89D8 #  mov_eax,ebx
5B                # pop_ebx               # =
8903 #  mov_[ebx],eax
50               #  push_eax              # 1
B8 01000000 #   mov_eax, %1
5B                # pop_ebx               # +
01D8 #  add_eax,ebx
58                # pop_eax               # ;
E9 %_strrchr_loop1 #    jmp %_strrchr_loop1
:_strrchr_loop_end1 #:_strrchr_loop_end1
 ## stdlib.c 128
50               #  push_eax              # 0
B8 00000000 #   mov_eax, %0
8B5D00          #   mov_ebx,[ebp]         # return
53 #    push_ebx
C3 #    ret
50               #  push_eax              # 0
B8 00000000 #   mov_eax, %0
8B5D00          #   mov_ebx,[ebp]         # return
53 #    push_ebx
C3 #    ret
 #
:f_strcmp #:f_strcmp
58 #    pop_eax
894500 #    mov_[ebp],eax
58 #    pop_eax
50               #  push_eax              # s2 (local)
8D85 04000000 # lea_eax,[ebp+DWORD] %4
5B                # pop_ebx               # =:
8918 #  mov_[eax],ebx
58 #    pop_eax
50               #  push_eax              # s1 (local)
8D85 08000000 # lea_eax,[ebp+DWORD] %8
5B                # pop_ebx               # =:
8918 #  mov_[eax],ebx
58 #    pop_eax
 ## stdlib.c 133
:_strcmp_loop1 #:_strcmp_loop1
 ## stdlib.c 134
50               #  push_eax              # result (local)
8D85 0C000000 # lea_eax,[ebp+DWORD] %12
50               #  push_eax              # s1 (local)
8D85 08000000 # lea_eax,[ebp+DWORD] %8
8B00          # mov_eax,[eax]         # ?
8A00           #    mov_al,[eax]          # ?1
0FB6C0 #    movzx_eax,al
0FBEC0           #  movsx_eax,al          # char
50               #  push_eax              # s2 (local)
8D85 04000000 # lea_eax,[ebp+DWORD] %4
8B00          # mov_eax,[eax]         # ?
8A00           #    mov_al,[eax]          # ?1
0FB6C0 #    movzx_eax,al
0FBEC0           #  movsx_eax,al          # char
5B                # pop_ebx               # -
29C3 #  sub_ebx,eax
89D8 #  mov_eax,ebx
5B                # pop_ebx               # =
8903 #  mov_[ebx],eax
58                # pop_eax               # ;
 ## stdlib.c 136
50               #  push_eax              # result (local)
8D85 0C000000 # lea_eax,[ebp+DWORD] %12
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # 0
B8 00000000 #   mov_eax, %0
5B                # pop_ebx               # !=
39C3 #  cmp_eax_ebx
0F95C0 #    setne_al
0FB6C0 #    movzx_eax,al
85C0           #    test_eax,eax          # ||
0F85 %_strcmp_or_end2 # jne %_strcmp_or_end2
58 #    pop_eax
50               #  push_eax              # s1 (local)
8D85 08000000 # lea_eax,[ebp+DWORD] %8
8B00          # mov_eax,[eax]         # ?
8A00           #    mov_al,[eax]          # ?1
0FB6C0 #    movzx_eax,al
0FBEC0           #  movsx_eax,al          # char
50               #  push_eax              # 0
B8 00000000 #   mov_eax, %0
5B                # pop_ebx               # ==
39C3 #  cmp_eax_ebx
0F94C0 #    sete_al
0FB6C0 #    movzx_eax,al
:_strcmp_or_end2 #:_strcmp_or_end2
85C0           #    test_eax,eax          # if
58 #    pop_eax
0F84 %_strcmp_else3 #   je %_strcmp_else3
 ## stdlib.c 137
50               #  push_eax              # result (local)
8D85 0C000000 # lea_eax,[ebp+DWORD] %12
8B00          # mov_eax,[eax]         # ?
8B5D00          #   mov_ebx,[ebp]         # return
53 #    push_ebx
C3 #    ret
 ## stdlib.c 138
:_strcmp_else3  #:_strcmp_else3 # no else
50               #  push_eax              # s1 (local)
8D85 08000000 # lea_eax,[ebp+DWORD] %8
50               #  push_eax              # $ (dup)
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # 1
B8 01000000 #   mov_eax, %1
5B                # pop_ebx               # +
01D8 #  add_eax,ebx
5B                # pop_ebx               # =
8903 #  mov_[ebx],eax
50               #  push_eax              # 1
B8 01000000 #   mov_eax, %1
5B                # pop_ebx               # -
29C3 #  sub_ebx,eax
89D8 #  mov_eax,ebx
58                # pop_eax               # ;
 ## stdlib.c 139
50               #  push_eax              # s2 (local)
8D85 04000000 # lea_eax,[ebp+DWORD] %4
50               #  push_eax              # $ (dup)
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # 1
B8 01000000 #   mov_eax, %1
5B                # pop_ebx               # +
01D8 #  add_eax,ebx
5B                # pop_ebx               # =
8903 #  mov_[ebx],eax
50               #  push_eax              # 1
B8 01000000 #   mov_eax, %1
5B                # pop_ebx               # -
29C3 #  sub_ebx,eax
89D8 #  mov_eax,ebx
58                # pop_eax               # ;
E9 %_strcmp_loop1 # jmp %_strcmp_loop1
:_strcmp_loop_end1 #:_strcmp_loop_end1
 ## stdlib.c 141
50               #  push_eax              # 0
B8 00000000 #   mov_eax, %0
8B5D00          #   mov_ebx,[ebp]         # return
53 #    push_ebx
C3 #    ret
50               #  push_eax              # 0
B8 00000000 #   mov_eax, %0
8B5D00          #   mov_ebx,[ebp]         # return
53 #    push_ebx
C3 #    ret
 #
:f_strncmp #:f_strncmp
58 #    pop_eax
894500 #    mov_[ebp],eax
58 #    pop_eax
50               #  push_eax              # n (local)
8D85 04000000 # lea_eax,[ebp+DWORD] %4
5B                # pop_ebx               # =:
8918 #  mov_[eax],ebx
58 #    pop_eax
50               #  push_eax              # s2 (local)
8D85 08000000 # lea_eax,[ebp+DWORD] %8
5B                # pop_ebx               # =:
8918 #  mov_[eax],ebx
58 #    pop_eax
50               #  push_eax              # s1 (local)
8D85 0C000000 # lea_eax,[ebp+DWORD] %12
5B                # pop_ebx               # =:
8918 #  mov_[eax],ebx
58 #    pop_eax
 ## stdlib.c 146
:_strncmp_loop1 #:_strncmp_loop1
50               #  push_eax              # n (local)
8D85 04000000 # lea_eax,[ebp+DWORD] %4
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # 0
B8 00000000 #   mov_eax, %0
5B                # pop_ebx               # >
39C3 #  cmp_eax_ebx
0F97C0 #    seta_al
0FB6C0 #    movzx_eax,al
85C0           #    test_eax,eax          # !
0F94C0 #    sete_al
0FB6C0 #    movzx_eax,al
85C0           #    test_eax,eax          # if
58 #    pop_eax
0F84 %_strncmp_else2 #  je %_strncmp_else2
E9 %_strncmp_loop_end1 #    jmp %_strncmp_loop_end1
 ## stdlib.c 147
:_strncmp_else2  #:_strncmp_else2 # no else
50               #  push_eax              # result (local)
8D85 10000000 # lea_eax,[ebp+DWORD] %16
50               #  push_eax              # s1 (local)
8D85 0C000000 # lea_eax,[ebp+DWORD] %12
8B00          # mov_eax,[eax]         # ?
8A00           #    mov_al,[eax]          # ?1
0FB6C0 #    movzx_eax,al
0FBEC0           #  movsx_eax,al          # char
50               #  push_eax              # s2 (local)
8D85 08000000 # lea_eax,[ebp+DWORD] %8
8B00          # mov_eax,[eax]         # ?
8A00           #    mov_al,[eax]          # ?1
0FB6C0 #    movzx_eax,al
0FBEC0           #  movsx_eax,al          # char
5B                # pop_ebx               # -
29C3 #  sub_ebx,eax
89D8 #  mov_eax,ebx
5B                # pop_ebx               # =
8903 #  mov_[ebx],eax
58                # pop_eax               # ;
 ## stdlib.c 149
50               #  push_eax              # result (local)
8D85 10000000 # lea_eax,[ebp+DWORD] %16
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # 0
B8 00000000 #   mov_eax, %0
5B                # pop_ebx               # !=
39C3 #  cmp_eax_ebx
0F95C0 #    setne_al
0FB6C0 #    movzx_eax,al
85C0           #    test_eax,eax          # ||
0F85 %_strncmp_or_end3 #    jne %_strncmp_or_end3
58 #    pop_eax
50               #  push_eax              # s1 (local)
8D85 0C000000 # lea_eax,[ebp+DWORD] %12
8B00          # mov_eax,[eax]         # ?
8A00           #    mov_al,[eax]          # ?1
0FB6C0 #    movzx_eax,al
0FBEC0           #  movsx_eax,al          # char
50               #  push_eax              # 0
B8 00000000 #   mov_eax, %0
5B                # pop_ebx               # ==
39C3 #  cmp_eax_ebx
0F94C0 #    sete_al
0FB6C0 #    movzx_eax,al
:_strncmp_or_end3 #:_strncmp_or_end3
85C0           #    test_eax,eax          # if
58 #    pop_eax
0F84 %_strncmp_else4 #  je %_strncmp_else4
 ## stdlib.c 150
50               #  push_eax              # result (local)
8D85 10000000 # lea_eax,[ebp+DWORD] %16
8B00          # mov_eax,[eax]         # ?
8B5D00          #   mov_ebx,[ebp]         # return
53 #    push_ebx
C3 #    ret
 ## stdlib.c 151
:_strncmp_else4  #:_strncmp_else4 # no else
50               #  push_eax              # s1 (local)
8D85 0C000000 # lea_eax,[ebp+DWORD] %12
50               #  push_eax              # $ (dup)
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # 1
B8 01000000 #   mov_eax, %1
5B                # pop_ebx               # +
01D8 #  add_eax,ebx
5B                # pop_ebx               # =
8903 #  mov_[ebx],eax
50               #  push_eax              # 1
B8 01000000 #   mov_eax, %1
5B                # pop_ebx               # -
29C3 #  sub_ebx,eax
89D8 #  mov_eax,ebx
58                # pop_eax               # ;
 ## stdlib.c 152
50               #  push_eax              # s2 (local)
8D85 08000000 # lea_eax,[ebp+DWORD] %8
50               #  push_eax              # $ (dup)
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # 1
B8 01000000 #   mov_eax, %1
5B                # pop_ebx               # +
01D8 #  add_eax,ebx
5B                # pop_ebx               # =
8903 #  mov_[ebx],eax
50               #  push_eax              # 1
B8 01000000 #   mov_eax, %1
5B                # pop_ebx               # -
29C3 #  sub_ebx,eax
89D8 #  mov_eax,ebx
58                # pop_eax               # ;
50               #  push_eax              # n (local)
8D85 04000000 # lea_eax,[ebp+DWORD] %4
50               #  push_eax              # $ (dup)
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # 1
B8 01000000 #   mov_eax, %1
5B                # pop_ebx               # -
29C3 #  sub_ebx,eax
89D8 #  mov_eax,ebx
5B                # pop_ebx               # =
8903 #  mov_[ebx],eax
50               #  push_eax              # 1
B8 01000000 #   mov_eax, %1
5B                # pop_ebx               # +
01D8 #  add_eax,ebx
58                # pop_eax               # ;
E9 %_strncmp_loop1 #    jmp %_strncmp_loop1
:_strncmp_loop_end1 #:_strncmp_loop_end1
 ## stdlib.c 154
50               #  push_eax              # 0
B8 00000000 #   mov_eax, %0
8B5D00          #   mov_ebx,[ebp]         # return
53 #    push_ebx
C3 #    ret
50               #  push_eax              # 0
B8 00000000 #   mov_eax, %0
8B5D00          #   mov_ebx,[ebp]         # return
53 #    push_ebx
C3 #    ret
 #
:f_strstr #:f_strstr
58 #    pop_eax
894500 #    mov_[ebp],eax
58 #    pop_eax
50               #  push_eax              # needle (local)
8D85 04000000 # lea_eax,[ebp+DWORD] %4
5B                # pop_ebx               # =:
8918 #  mov_[eax],ebx
58 #    pop_eax
50               #  push_eax              # haystack (local)
8D85 08000000 # lea_eax,[ebp+DWORD] %8
5B                # pop_ebx               # =:
8918 #  mov_[eax],ebx
58 #    pop_eax
50               #  push_eax              # n (local)
8D85 0C000000 # lea_eax,[ebp+DWORD] %12
50               #  push_eax              # needle (local)
8D85 04000000 # lea_eax,[ebp+DWORD] %4
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # strlen (function)
B8 &f_strlen #  mov_eax, &f_strlen
81C5 10000000          #    add_ebp, %16         # ()
FFD0 #  call_eax
81ED 10000000 # sub_ebp, %16
5B                # pop_ebx               # =
8903 #  mov_[ebx],eax
58                # pop_eax               # ;
 ## stdlib.c 160
:_strstr_loop1 #:_strstr_loop1
50               #  push_eax              # haystack (local)
8D85 08000000 # lea_eax,[ebp+DWORD] %8
8B00          # mov_eax,[eax]         # ?
8A00           #    mov_al,[eax]          # ?1
0FB6C0 #    movzx_eax,al
0FBEC0           #  movsx_eax,al          # char
50               #  push_eax              # 0
B8 00000000 #   mov_eax, %0
5B                # pop_ebx               # !=
39C3 #  cmp_eax_ebx
0F95C0 #    setne_al
0FB6C0 #    movzx_eax,al
85C0           #    test_eax,eax          # !
0F94C0 #    sete_al
0FB6C0 #    movzx_eax,al
85C0           #    test_eax,eax          # if
58 #    pop_eax
0F84 %_strstr_else2 #   je %_strstr_else2
E9 %_strstr_loop_end1 # jmp %_strstr_loop_end1
 ## stdlib.c 161
:_strstr_else2  #:_strstr_else2 # no else
50               #  push_eax              # haystack (local)
8D85 08000000 # lea_eax,[ebp+DWORD] %8
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # needle (local)
8D85 04000000 # lea_eax,[ebp+DWORD] %4
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # n (local)
8D85 0C000000 # lea_eax,[ebp+DWORD] %12
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # strncmp (function)
B8 &f_strncmp # mov_eax, &f_strncmp
81C5 10000000          #    add_ebp, %16         # ()
FFD0 #  call_eax
81ED 10000000 # sub_ebp, %16
50               #  push_eax              # 0
B8 00000000 #   mov_eax, %0
5B                # pop_ebx               # ==
39C3 #  cmp_eax_ebx
0F94C0 #    sete_al
0FB6C0 #    movzx_eax,al
85C0           #    test_eax,eax          # if
58 #    pop_eax
0F84 %_strstr_else3 #   je %_strstr_else3
 ## stdlib.c 162
50               #  push_eax              # haystack (local)
8D85 08000000 # lea_eax,[ebp+DWORD] %8
8B00          # mov_eax,[eax]         # ?
8B5D00          #   mov_ebx,[ebp]         # return
53 #    push_ebx
C3 #    ret
:_strstr_else3  #:_strstr_else3 # no else
50               #  push_eax              # haystack (local)
8D85 08000000 # lea_eax,[ebp+DWORD] %8
50               #  push_eax              # $ (dup)
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # 1
B8 01000000 #   mov_eax, %1
5B                # pop_ebx               # +
01D8 #  add_eax,ebx
5B                # pop_ebx               # =
8903 #  mov_[ebx],eax
50               #  push_eax              # 1
B8 01000000 #   mov_eax, %1
5B                # pop_ebx               # -
29C3 #  sub_ebx,eax
89D8 #  mov_eax,ebx
58                # pop_eax               # ;
E9 %_strstr_loop1 # jmp %_strstr_loop1
:_strstr_loop_end1 #:_strstr_loop_end1
 ## stdlib.c 163
50               #  push_eax              # 0
B8 00000000 #   mov_eax, %0
8B5D00          #   mov_ebx,[ebp]         # return
53 #    push_ebx
C3 #    ret
50               #  push_eax              # 0
B8 00000000 #   mov_eax, %0
8B5D00          #   mov_ebx,[ebp]         # return
53 #    push_ebx
C3 #    ret
 #
:f_strtoul #:f_strtoul
58 #    pop_eax
894500 #    mov_[ebp],eax
58 #    pop_eax
50               #  push_eax              # base (local)
8D85 04000000 # lea_eax,[ebp+DWORD] %4
5B                # pop_ebx               # =:
8918 #  mov_[eax],ebx
58 #    pop_eax
50               #  push_eax              # endptr (local)
8D85 08000000 # lea_eax,[ebp+DWORD] %8
5B                # pop_ebx               # =:
8918 #  mov_[eax],ebx
58 #    pop_eax
50               #  push_eax              # nptr (local)
8D85 0C000000 # lea_eax,[ebp+DWORD] %12
5B                # pop_ebx               # =:
8918 #  mov_[eax],ebx
58 #    pop_eax
 ## stdlib.c 169
50               #  push_eax              # base (local)
8D85 04000000 # lea_eax,[ebp+DWORD] %4
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # 0
B8 00000000 #   mov_eax, %0
5B                # pop_ebx               # ==
39C3 #  cmp_eax_ebx
0F94C0 #    sete_al
0FB6C0 #    movzx_eax,al
85C0           #    test_eax,eax          # if
58 #    pop_eax
0F84 %_strtoul_else1 #  je %_strtoul_else1
 ## stdlib.c 170
 ## stdlib.c 171
50               #  push_eax              # base (local)
8D85 04000000 # lea_eax,[ebp+DWORD] %4
50               #  push_eax              # 10
B8 0A000000 #   mov_eax, %10
5B                # pop_ebx               # =
8903 #  mov_[ebx],eax
58                # pop_eax               # ;
 ## stdlib.c 172
50               #  push_eax              # nptr (local)
8D85 0C000000 # lea_eax,[ebp+DWORD] %12
8B00          # mov_eax,[eax]         # ?
8A00           #    mov_al,[eax]          # ?1
0FB6C0 #    movzx_eax,al
0FBEC0           #  movsx_eax,al          # char
50               #  push_eax              # 48
B8 30000000 #   mov_eax, %48
5B                # pop_ebx               # ==
39C3 #  cmp_eax_ebx
0F94C0 #    sete_al
0FB6C0 #    movzx_eax,al
85C0           #    test_eax,eax          # if
58 #    pop_eax
0F84 %_strtoul_else2 #  je %_strtoul_else2
 ## stdlib.c 173
 ## stdlib.c 174
50               #  push_eax              # base (local)
8D85 04000000 # lea_eax,[ebp+DWORD] %4
50               #  push_eax              # 8
B8 08000000 #   mov_eax, %8
5B                # pop_ebx               # =
8903 #  mov_[ebx],eax
58                # pop_eax               # ;
 ## stdlib.c 175
50               #  push_eax              # nptr (local)
8D85 0C000000 # lea_eax,[ebp+DWORD] %12
50               #  push_eax              # $ (dup)
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # 1
B8 01000000 #   mov_eax, %1
5B                # pop_ebx               # +
01D8 #  add_eax,ebx
5B                # pop_ebx               # =
8903 #  mov_[ebx],eax
50               #  push_eax              # 1
B8 01000000 #   mov_eax, %1
5B                # pop_ebx               # -
29C3 #  sub_ebx,eax
89D8 #  mov_eax,ebx
58                # pop_eax               # ;
 ## stdlib.c 176
50               #  push_eax              # nptr (local)
8D85 0C000000 # lea_eax,[ebp+DWORD] %12
8B00          # mov_eax,[eax]         # ?
8A00           #    mov_al,[eax]          # ?1
0FB6C0 #    movzx_eax,al
0FBEC0           #  movsx_eax,al          # char
50               #  push_eax              # 120
B8 78000000 #   mov_eax, %120
5B                # pop_ebx               # ==
39C3 #  cmp_eax_ebx
0F94C0 #    sete_al
0FB6C0 #    movzx_eax,al
85C0           #    test_eax,eax          # ||
0F85 %_strtoul_or_end3 #    jne %_strtoul_or_end3
58 #    pop_eax
50               #  push_eax              # nptr (local)
8D85 0C000000 # lea_eax,[ebp+DWORD] %12
8B00          # mov_eax,[eax]         # ?
8A00           #    mov_al,[eax]          # ?1
0FB6C0 #    movzx_eax,al
0FBEC0           #  movsx_eax,al          # char
50               #  push_eax              # 88
B8 58000000 #   mov_eax, %88
5B                # pop_ebx               # ==
39C3 #  cmp_eax_ebx
0F94C0 #    sete_al
0FB6C0 #    movzx_eax,al
:_strtoul_or_end3 #:_strtoul_or_end3
85C0           #    test_eax,eax          # if
58 #    pop_eax
0F84 %_strtoul_else4 #  je %_strtoul_else4
 ## stdlib.c 177
 ## stdlib.c 178
50               #  push_eax              # base (local)
8D85 04000000 # lea_eax,[ebp+DWORD] %4
50               #  push_eax              # 16
B8 10000000 #   mov_eax, %16
5B                # pop_ebx               # =
8903 #  mov_[ebx],eax
58                # pop_eax               # ;
 ## stdlib.c 179
50               #  push_eax              # nptr (local)
8D85 0C000000 # lea_eax,[ebp+DWORD] %12
50               #  push_eax              # $ (dup)
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # 1
B8 01000000 #   mov_eax, %1
5B                # pop_ebx               # +
01D8 #  add_eax,ebx
5B                # pop_ebx               # =
8903 #  mov_[ebx],eax
50               #  push_eax              # 1
B8 01000000 #   mov_eax, %1
5B                # pop_ebx               # -
29C3 #  sub_ebx,eax
89D8 #  mov_eax,ebx
58                # pop_eax               # ;
:_strtoul_else4  #:_strtoul_else4 # no else
:_strtoul_else2  #:_strtoul_else2 # no else
:_strtoul_else1  #:_strtoul_else1 # no else
50               #  push_eax              # result (local)
8D85 10000000 # lea_eax,[ebp+DWORD] %16
50               #  push_eax              # 0
B8 00000000 #   mov_eax, %0
5B                # pop_ebx               # =
8903 #  mov_[ebx],eax
58                # pop_eax               # ;
50               #  push_eax              # sub_10 (local)
8D85 14000000 # lea_eax,[ebp+DWORD] %20
50               #  push_eax              # 48
B8 30000000 #   mov_eax, %48
50               #  push_eax              # base (local)
8D85 04000000 # lea_eax,[ebp+DWORD] %4
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # 10
B8 0A000000 #   mov_eax, %10
5B                # pop_ebx               # <s
39C3 #  cmp_eax_ebx
0F9CC0 #    setl_al
0FB6C0 #    movzx_eax,al
85C0           #    test_eax,eax          # if
58 #    pop_eax
0F84 %_strtoul_else5 #  je %_strtoul_else5
50               #  push_eax              # base (local)
8D85 04000000 # lea_eax,[ebp+DWORD] %4
8B00          # mov_eax,[eax]         # ?
E9 %_strtoul_else_end5 #    jmp %_strtoul_else_end5
:_strtoul_else5 #:_strtoul_else5
50               #  push_eax              # 10
B8 0A000000 #   mov_eax, %10
:_strtoul_else_end5 #:_strtoul_else_end5
5B                # pop_ebx               # +
01D8 #  add_eax,ebx
5B                # pop_ebx               # =1
8803 #  mov_[ebx],al
58                # pop_eax               # ;
 ## stdlib.c 185
:_strtoul_loop6 #:_strtoul_loop6
 ## stdlib.c 186
 ## stdlib.c 187
50               #  push_eax              # 48
B8 30000000 #   mov_eax, %48
50               #  push_eax              # nptr (local)
8D85 0C000000 # lea_eax,[ebp+DWORD] %12
8B00          # mov_eax,[eax]         # ?
8A00           #    mov_al,[eax]          # ?1
0FB6C0 #    movzx_eax,al
0FBEC0           #  movsx_eax,al          # char
5B                # pop_ebx               # <=s
39C3 #  cmp_eax_ebx
0F9EC0 #    setle_al
0FB6C0 #    movzx_eax,al
85C0           #    test_eax,eax          # &&
0F84 %_strtoul_and_end7 #   je %_strtoul_and_end7
58 #    pop_eax
50               #  push_eax              # nptr (local)
8D85 0C000000 # lea_eax,[ebp+DWORD] %12
8B00          # mov_eax,[eax]         # ?
8A00           #    mov_al,[eax]          # ?1
0FB6C0 #    movzx_eax,al
0FBEC0           #  movsx_eax,al          # char
50               #  push_eax              # sub_10 (local)
8D85 14000000 # lea_eax,[ebp+DWORD] %20
8A00           #    mov_al,[eax]          # ?1
0FB6C0 #    movzx_eax,al
0FBEC0           #  movsx_eax,al          # char
5B                # pop_ebx               # <s
39C3 #  cmp_eax_ebx
0F9CC0 #    setl_al
0FB6C0 #    movzx_eax,al
:_strtoul_and_end7 #:_strtoul_and_end7
85C0           #    test_eax,eax          # if
58 #    pop_eax
0F84 %_strtoul_else8 #  je %_strtoul_else8
 ## stdlib.c 188
50               #  push_eax              # result (local)
8D85 10000000 # lea_eax,[ebp+DWORD] %16
50               #  push_eax              # base (local)
8D85 04000000 # lea_eax,[ebp+DWORD] %4
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # result (local)
8D85 10000000 # lea_eax,[ebp+DWORD] %16
8B00          # mov_eax,[eax]         # ?
5B                # pop_ebx               # *
F7E3 #  mul_ebx
50               #  push_eax              # nptr (local)
8D85 0C000000 # lea_eax,[ebp+DWORD] %12
8B00          # mov_eax,[eax]         # ?
8A00           #    mov_al,[eax]          # ?1
0FB6C0 #    movzx_eax,al
0FBEC0           #  movsx_eax,al          # char
5B                # pop_ebx               # +
01D8 #  add_eax,ebx
50               #  push_eax              # 48
B8 30000000 #   mov_eax, %48
5B                # pop_ebx               # -
29C3 #  sub_ebx,eax
89D8 #  mov_eax,ebx
5B                # pop_ebx               # =
8903 #  mov_[ebx],eax
58                # pop_eax               # ;
E9 %_strtoul_else_end8 #    jmp %_strtoul_else_end8
:_strtoul_else8 #:_strtoul_else8
 ## stdlib.c 189
50               #  push_eax              # 97
B8 61000000 #   mov_eax, %97
50               #  push_eax              # nptr (local)
8D85 0C000000 # lea_eax,[ebp+DWORD] %12
8B00          # mov_eax,[eax]         # ?
8A00           #    mov_al,[eax]          # ?1
0FB6C0 #    movzx_eax,al
0FBEC0           #  movsx_eax,al          # char
5B                # pop_ebx               # <=s
39C3 #  cmp_eax_ebx
0F9EC0 #    setle_al
0FB6C0 #    movzx_eax,al
85C0           #    test_eax,eax          # &&
0F84 %_strtoul_and_end9 #   je %_strtoul_and_end9
58 #    pop_eax
50               #  push_eax              # nptr (local)
8D85 0C000000 # lea_eax,[ebp+DWORD] %12
8B00          # mov_eax,[eax]         # ?
8A00           #    mov_al,[eax]          # ?1
0FB6C0 #    movzx_eax,al
0FBEC0           #  movsx_eax,al          # char
50               #  push_eax              # 97
B8 61000000 #   mov_eax, %97
50               #  push_eax              # base (local)
8D85 04000000 # lea_eax,[ebp+DWORD] %4
8B00          # mov_eax,[eax]         # ?
5B                # pop_ebx               # +
01D8 #  add_eax,ebx
50               #  push_eax              # 10
B8 0A000000 #   mov_eax, %10
5B                # pop_ebx               # -
29C3 #  sub_ebx,eax
89D8 #  mov_eax,ebx
5B                # pop_ebx               # <s
39C3 #  cmp_eax_ebx
0F9CC0 #    setl_al
0FB6C0 #    movzx_eax,al
:_strtoul_and_end9 #:_strtoul_and_end9
85C0           #    test_eax,eax          # if
58 #    pop_eax
0F84 %_strtoul_else10 # je %_strtoul_else10
 ## stdlib.c 190
50               #  push_eax              # result (local)
8D85 10000000 # lea_eax,[ebp+DWORD] %16
50               #  push_eax              # base (local)
8D85 04000000 # lea_eax,[ebp+DWORD] %4
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # result (local)
8D85 10000000 # lea_eax,[ebp+DWORD] %16
8B00          # mov_eax,[eax]         # ?
5B                # pop_ebx               # *
F7E3 #  mul_ebx
50               #  push_eax              # nptr (local)
8D85 0C000000 # lea_eax,[ebp+DWORD] %12
8B00          # mov_eax,[eax]         # ?
8A00           #    mov_al,[eax]          # ?1
0FB6C0 #    movzx_eax,al
0FBEC0           #  movsx_eax,al          # char
5B                # pop_ebx               # +
01D8 #  add_eax,ebx
50               #  push_eax              # 97
B8 61000000 #   mov_eax, %97
5B                # pop_ebx               # -
29C3 #  sub_ebx,eax
89D8 #  mov_eax,ebx
50               #  push_eax              # 10
B8 0A000000 #   mov_eax, %10
5B                # pop_ebx               # +
01D8 #  add_eax,ebx
5B                # pop_ebx               # =
8903 #  mov_[ebx],eax
58                # pop_eax               # ;
E9 %_strtoul_else_end10 #   jmp %_strtoul_else_end10
:_strtoul_else10 #:_strtoul_else10
 ## stdlib.c 191
50               #  push_eax              # 65
B8 41000000 #   mov_eax, %65
50               #  push_eax              # nptr (local)
8D85 0C000000 # lea_eax,[ebp+DWORD] %12
8B00          # mov_eax,[eax]         # ?
8A00           #    mov_al,[eax]          # ?1
0FB6C0 #    movzx_eax,al
0FBEC0           #  movsx_eax,al          # char
5B                # pop_ebx               # <=s
39C3 #  cmp_eax_ebx
0F9EC0 #    setle_al
0FB6C0 #    movzx_eax,al
85C0           #    test_eax,eax          # &&
0F84 %_strtoul_and_end11 #  je %_strtoul_and_end11
58 #    pop_eax
50               #  push_eax              # nptr (local)
8D85 0C000000 # lea_eax,[ebp+DWORD] %12
8B00          # mov_eax,[eax]         # ?
8A00           #    mov_al,[eax]          # ?1
0FB6C0 #    movzx_eax,al
0FBEC0           #  movsx_eax,al          # char
50               #  push_eax              # 65
B8 41000000 #   mov_eax, %65
50               #  push_eax              # base (local)
8D85 04000000 # lea_eax,[ebp+DWORD] %4
8B00          # mov_eax,[eax]         # ?
5B                # pop_ebx               # +
01D8 #  add_eax,ebx
50               #  push_eax              # 10
B8 0A000000 #   mov_eax, %10
5B                # pop_ebx               # -
29C3 #  sub_ebx,eax
89D8 #  mov_eax,ebx
5B                # pop_ebx               # <s
39C3 #  cmp_eax_ebx
0F9CC0 #    setl_al
0FB6C0 #    movzx_eax,al
:_strtoul_and_end11 #:_strtoul_and_end11
85C0           #    test_eax,eax          # if
58 #    pop_eax
0F84 %_strtoul_else12 # je %_strtoul_else12
 ## stdlib.c 192
50               #  push_eax              # result (local)
8D85 10000000 # lea_eax,[ebp+DWORD] %16
50               #  push_eax              # base (local)
8D85 04000000 # lea_eax,[ebp+DWORD] %4
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # result (local)
8D85 10000000 # lea_eax,[ebp+DWORD] %16
8B00          # mov_eax,[eax]         # ?
5B                # pop_ebx               # *
F7E3 #  mul_ebx
50               #  push_eax              # nptr (local)
8D85 0C000000 # lea_eax,[ebp+DWORD] %12
8B00          # mov_eax,[eax]         # ?
8A00           #    mov_al,[eax]          # ?1
0FB6C0 #    movzx_eax,al
0FBEC0           #  movsx_eax,al          # char
5B                # pop_ebx               # +
01D8 #  add_eax,ebx
50               #  push_eax              # 65
B8 41000000 #   mov_eax, %65
5B                # pop_ebx               # -
29C3 #  sub_ebx,eax
89D8 #  mov_eax,ebx
50               #  push_eax              # 10
B8 0A000000 #   mov_eax, %10
5B                # pop_ebx               # +
01D8 #  add_eax,ebx
5B                # pop_ebx               # =
8903 #  mov_[ebx],eax
58                # pop_eax               # ;
E9 %_strtoul_else_end12 #   jmp %_strtoul_else_end12
:_strtoul_else12 #:_strtoul_else12
 ## stdlib.c 194
E9 %_strtoul_loop_end6 #    jmp %_strtoul_loop_end6
:_strtoul_else_end12 #:_strtoul_else_end12
:_strtoul_else_end10 #:_strtoul_else_end10
:_strtoul_else_end8 #:_strtoul_else_end8
50               #  push_eax              # nptr (local)
8D85 0C000000 # lea_eax,[ebp+DWORD] %12
50               #  push_eax              # $ (dup)
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # 1
B8 01000000 #   mov_eax, %1
5B                # pop_ebx               # +
01D8 #  add_eax,ebx
5B                # pop_ebx               # =
8903 #  mov_[ebx],eax
50               #  push_eax              # 1
B8 01000000 #   mov_eax, %1
5B                # pop_ebx               # -
29C3 #  sub_ebx,eax
89D8 #  mov_eax,ebx
58                # pop_eax               # ;
E9 %_strtoul_loop6 #    jmp %_strtoul_loop6
:_strtoul_loop_end6 #:_strtoul_loop_end6
 ## stdlib.c 196
50               #  push_eax              # endptr (local)
8D85 08000000 # lea_eax,[ebp+DWORD] %8
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # 0
B8 00000000 #   mov_eax, %0
5B                # pop_ebx               # !=
39C3 #  cmp_eax_ebx
0F95C0 #    setne_al
0FB6C0 #    movzx_eax,al
85C0           #    test_eax,eax          # if
58 #    pop_eax
0F84 %_strtoul_else13 # je %_strtoul_else13
 ## stdlib.c 197
50               #  push_eax              # endptr (local)
8D85 08000000 # lea_eax,[ebp+DWORD] %8
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # nptr (local)
8D85 0C000000 # lea_eax,[ebp+DWORD] %12
8B00          # mov_eax,[eax]         # ?
5B                # pop_ebx               # =
8903 #  mov_[ebx],eax
58                # pop_eax               # ;
 ## stdlib.c 198
:_strtoul_else13  #:_strtoul_else13 # no else
50               #  push_eax              # result (local)
8D85 10000000 # lea_eax,[ebp+DWORD] %16
8B00          # mov_eax,[eax]         # ?
8B5D00          #   mov_ebx,[ebp]         # return
53 #    push_ebx
C3 #    ret
50               #  push_eax              # 0
B8 00000000 #   mov_eax, %0
8B5D00          #   mov_ebx,[ebp]         # return
53 #    push_ebx
C3 #    ret
 #
:f_strtol #:f_strtol
58 #    pop_eax
894500 #    mov_[ebp],eax
58 #    pop_eax
50               #  push_eax              # base (local)
8D85 04000000 # lea_eax,[ebp+DWORD] %4
5B                # pop_ebx               # =:
8918 #  mov_[eax],ebx
58 #    pop_eax
50               #  push_eax              # endptr (local)
8D85 08000000 # lea_eax,[ebp+DWORD] %8
5B                # pop_ebx               # =:
8918 #  mov_[eax],ebx
58 #    pop_eax
50               #  push_eax              # nptr (local)
8D85 0C000000 # lea_eax,[ebp+DWORD] %12
5B                # pop_ebx               # =:
8918 #  mov_[eax],ebx
58 #    pop_eax
50               #  push_eax              # sign (local)
8D85 10000000 # lea_eax,[ebp+DWORD] %16
50               #  push_eax              # 1
B8 01000000 #   mov_eax, %1
5B                # pop_ebx               # =
8903 #  mov_[ebx],eax
58                # pop_eax               # ;
 ## stdlib.c 204
50               #  push_eax              # nptr (local)
8D85 0C000000 # lea_eax,[ebp+DWORD] %12
8B00          # mov_eax,[eax]         # ?
8A00           #    mov_al,[eax]          # ?1
0FB6C0 #    movzx_eax,al
0FBEC0           #  movsx_eax,al          # char
50               #  push_eax              # 45
B8 2D000000 #   mov_eax, %45
5B                # pop_ebx               # ==
39C3 #  cmp_eax_ebx
0F94C0 #    sete_al
0FB6C0 #    movzx_eax,al
85C0           #    test_eax,eax          # if
58 #    pop_eax
0F84 %_strtol_else1 #   je %_strtol_else1
 ## stdlib.c 205
 ## stdlib.c 206
50               #  push_eax              # sign (local)
8D85 10000000 # lea_eax,[ebp+DWORD] %16
50               #  push_eax              # 4294967295
B8 FFFFFFFF #   mov_eax, %4294967295
5B                # pop_ebx               # =
8903 #  mov_[ebx],eax
58                # pop_eax               # ;
 ## stdlib.c 207
50               #  push_eax              # nptr (local)
8D85 0C000000 # lea_eax,[ebp+DWORD] %12
50               #  push_eax              # $ (dup)
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # 1
B8 01000000 #   mov_eax, %1
5B                # pop_ebx               # +
01D8 #  add_eax,ebx
5B                # pop_ebx               # =
8903 #  mov_[ebx],eax
50               #  push_eax              # 1
B8 01000000 #   mov_eax, %1
5B                # pop_ebx               # -
29C3 #  sub_ebx,eax
89D8 #  mov_eax,ebx
58                # pop_eax               # ;
 ## stdlib.c 209
:_strtol_else1  #:_strtol_else1 # no else
50               #  push_eax              # sign (local)
8D85 10000000 # lea_eax,[ebp+DWORD] %16
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # nptr (local)
8D85 0C000000 # lea_eax,[ebp+DWORD] %12
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # endptr (local)
8D85 08000000 # lea_eax,[ebp+DWORD] %8
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # base (local)
8D85 04000000 # lea_eax,[ebp+DWORD] %4
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # strtoul (function)
B8 &f_strtoul # mov_eax, &f_strtoul
81C5 14000000          #    add_ebp, %20         # ()
FFD0 #  call_eax
81ED 14000000 # sub_ebp, %20
5B                # pop_ebx               # *
F7E3 #  mul_ebx
8B5D00          #   mov_ebx,[ebp]         # return
53 #    push_ebx
C3 #    ret
50               #  push_eax              # 0
B8 00000000 #   mov_eax, %0
8B5D00          #   mov_ebx,[ebp]         # return
53 #    push_ebx
C3 #    ret
 #
:f_strtoll #:f_strtoll
58 #    pop_eax
894500 #    mov_[ebp],eax
58 #    pop_eax
50               #  push_eax              # base (local)
8D85 04000000 # lea_eax,[ebp+DWORD] %4
5B                # pop_ebx               # =:
8918 #  mov_[eax],ebx
58 #    pop_eax
50               #  push_eax              # endptr (local)
8D85 08000000 # lea_eax,[ebp+DWORD] %8
5B                # pop_ebx               # =:
8918 #  mov_[eax],ebx
58 #    pop_eax
50               #  push_eax              # nptr (local)
8D85 0C000000 # lea_eax,[ebp+DWORD] %12
5B                # pop_ebx               # =:
8918 #  mov_[eax],ebx
58 #    pop_eax
 ## stdlib.c 214
50               #  push_eax              # nptr (local)
8D85 0C000000 # lea_eax,[ebp+DWORD] %12
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # endptr (local)
8D85 08000000 # lea_eax,[ebp+DWORD] %8
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # base (local)
8D85 04000000 # lea_eax,[ebp+DWORD] %4
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # strtol (function)
B8 &f_strtol #  mov_eax, &f_strtol
81C5 10000000          #    add_ebp, %16         # ()
FFD0 #  call_eax
81ED 10000000 # sub_ebp, %16
8B5D00          #   mov_ebx,[ebp]         # return
53 #    push_ebx
C3 #    ret
50               #  push_eax              # 0
B8 00000000 #   mov_eax, %0
8B5D00          #   mov_ebx,[ebp]         # return
53 #    push_ebx
C3 #    ret
 #
:f_strtoull #:f_strtoull
58 #    pop_eax
894500 #    mov_[ebp],eax
58 #    pop_eax
50               #  push_eax              # base (local)
8D85 04000000 # lea_eax,[ebp+DWORD] %4
5B                # pop_ebx               # =:
8918 #  mov_[eax],ebx
58 #    pop_eax
50               #  push_eax              # endptr (local)
8D85 08000000 # lea_eax,[ebp+DWORD] %8
5B                # pop_ebx               # =:
8918 #  mov_[eax],ebx
58 #    pop_eax
50               #  push_eax              # nptr (local)
8D85 0C000000 # lea_eax,[ebp+DWORD] %12
5B                # pop_ebx               # =:
8918 #  mov_[eax],ebx
58 #    pop_eax
 ## stdlib.c 219
50               #  push_eax              # nptr (local)
8D85 0C000000 # lea_eax,[ebp+DWORD] %12
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # endptr (local)
8D85 08000000 # lea_eax,[ebp+DWORD] %8
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # base (local)
8D85 04000000 # lea_eax,[ebp+DWORD] %4
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # strtoul (function)
B8 &f_strtoul # mov_eax, &f_strtoul
81C5 10000000          #    add_ebp, %16         # ()
FFD0 #  call_eax
81ED 10000000 # sub_ebp, %16
8B5D00          #   mov_ebx,[ebp]         # return
53 #    push_ebx
C3 #    ret
50               #  push_eax              # 0
B8 00000000 #   mov_eax, %0
8B5D00          #   mov_ebx,[ebp]         # return
53 #    push_ebx
C3 #    ret
 #
:f_strtof #:f_strtof
58 #    pop_eax
894500 #    mov_[ebp],eax
58 #    pop_eax
50               #  push_eax              # endptr (local)
8D85 04000000 # lea_eax,[ebp+DWORD] %4
5B                # pop_ebx               # =:
8918 #  mov_[eax],ebx
58 #    pop_eax
50               #  push_eax              # str (local)
8D85 08000000 # lea_eax,[ebp+DWORD] %8
5B                # pop_ebx               # =:
8918 #  mov_[eax],ebx
58 #    pop_eax
 ## stdlib.c 225
50               #  push_eax              # endptr (local)
8D85 04000000 # lea_eax,[ebp+DWORD] %4
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # str (local)
8D85 08000000 # lea_eax,[ebp+DWORD] %8
8B00          # mov_eax,[eax]         # ?
5B                # pop_ebx               # =
8903 #  mov_[ebx],eax
58                # pop_eax               # ;
 ## stdlib.c 226
50               #  push_eax              # 0
B8 00000000 #   mov_eax, %0
8B5D00          #   mov_ebx,[ebp]         # return
53 #    push_ebx
C3 #    ret
50               #  push_eax              # 0
B8 00000000 #   mov_eax, %0
8B5D00          #   mov_ebx,[ebp]         # return
53 #    push_ebx
C3 #    ret
 #
:f_malloc #:f_malloc
58 #    pop_eax
894500 #    mov_[ebp],eax
58 #    pop_eax
50               #  push_eax              # size (local)
8D85 04000000 # lea_eax,[ebp+DWORD] %4
5B                # pop_ebx               # =:
8918 #  mov_[eax],ebx
58 #    pop_eax
 ## stdlib.c 231
50               #  push_eax              # size (local)
8D85 04000000 # lea_eax,[ebp+DWORD] %4
50               #  push_eax              # size (local)
8D85 04000000 # lea_eax,[ebp+DWORD] %4
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # 3
B8 03000000 #   mov_eax, %3
5B                # pop_ebx               # +
01D8 #  add_eax,ebx
50               #  push_eax              # 3
B8 03000000 #   mov_eax, %3
F7D0                #   not_eax               # ~
5B                # pop_ebx               # &
21D8 #  and_eax,ebx
5B                # pop_ebx               # =
8903 #  mov_[ebx],eax
58                # pop_eax               # ;
50               #  push_eax              # result (local)
8D85 08000000 # lea_eax,[ebp+DWORD] %8
50               #  push_eax              # size (local)
8D85 04000000 # lea_eax,[ebp+DWORD] %4
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # 4
B8 04000000 #   mov_eax, %4
5B                # pop_ebx               # +
01D8 #  add_eax,ebx
50               #  push_eax              # sys_malloc (function)
B8 &f_sys_malloc #  mov_eax, &f_sys_malloc
81C5 0C000000          #    add_ebp, %12         # ()
FFD0 #  call_eax
81ED 0C000000 # sub_ebp, %12
5B                # pop_ebx               # =
8903 #  mov_[ebx],eax
58                # pop_eax               # ;
 ## stdlib.c 233
50               #  push_eax              # result (local)
8D85 08000000 # lea_eax,[ebp+DWORD] %8
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # size (local)
8D85 04000000 # lea_eax,[ebp+DWORD] %4
8B00          # mov_eax,[eax]         # ?
5B                # pop_ebx               # =
8903 #  mov_[ebx],eax
58                # pop_eax               # ;
 ## stdlib.c 234
50               #  push_eax              # result (local)
8D85 08000000 # lea_eax,[ebp+DWORD] %8
50               #  push_eax              # $ (dup)
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # 4
B8 04000000 #   mov_eax, %4
5B                # pop_ebx               # +
01D8 #  add_eax,ebx
5B                # pop_ebx               # =
8903 #  mov_[ebx],eax
50               #  push_eax              # 4
B8 04000000 #   mov_eax, %4
5B                # pop_ebx               # -
29C3 #  sub_ebx,eax
89D8 #  mov_eax,ebx
58                # pop_eax               # ;
 ## stdlib.c 235
50               #  push_eax              # result (local)
8D85 08000000 # lea_eax,[ebp+DWORD] %8
8B00          # mov_eax,[eax]         # ?
8B5D00          #   mov_ebx,[ebp]         # return
53 #    push_ebx
C3 #    ret
50               #  push_eax              # 0
B8 00000000 #   mov_eax, %0
8B5D00          #   mov_ebx,[ebp]         # return
53 #    push_ebx
C3 #    ret
 #
:f_realloc #:f_realloc
58 #    pop_eax
894500 #    mov_[ebp],eax
58 #    pop_eax
50               #  push_eax              # size (local)
8D85 04000000 # lea_eax,[ebp+DWORD] %4
5B                # pop_ebx               # =:
8918 #  mov_[eax],ebx
58 #    pop_eax
50               #  push_eax              # ptr (local)
8D85 08000000 # lea_eax,[ebp+DWORD] %8
5B                # pop_ebx               # =:
8918 #  mov_[eax],ebx
58 #    pop_eax
50               #  push_eax              # result (local)
8D85 0C000000 # lea_eax,[ebp+DWORD] %12
50               #  push_eax              # size (local)
8D85 04000000 # lea_eax,[ebp+DWORD] %4
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # malloc (function)
B8 &f_malloc #  mov_eax, &f_malloc
81C5 10000000          #    add_ebp, %16         # ()
FFD0 #  call_eax
81ED 10000000 # sub_ebp, %16
5B                # pop_ebx               # =
8903 #  mov_[ebx],eax
58                # pop_eax               # ;
 ## stdlib.c 241
50               #  push_eax              # ptr (local)
8D85 08000000 # lea_eax,[ebp+DWORD] %8
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # 0
B8 00000000 #   mov_eax, %0
5B                # pop_ebx               # !=
39C3 #  cmp_eax_ebx
0F95C0 #    setne_al
0FB6C0 #    movzx_eax,al
85C0           #    test_eax,eax          # if
58 #    pop_eax
0F84 %_realloc_else1 #  je %_realloc_else1
 ## stdlib.c 242
50               #  push_eax              # old_ptr (local)
8D85 10000000 # lea_eax,[ebp+DWORD] %16
50               #  push_eax              # ptr (local)
8D85 08000000 # lea_eax,[ebp+DWORD] %8
8B00          # mov_eax,[eax]         # ?
5B                # pop_ebx               # =
8903 #  mov_[ebx],eax
58                # pop_eax               # ;
50               #  push_eax              # old_size (local)
8D85 14000000 # lea_eax,[ebp+DWORD] %20
50               #  push_eax              # old_ptr (local)
8D85 10000000 # lea_eax,[ebp+DWORD] %16
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # 4294967295
B8 FFFFFFFF #   mov_eax, %4294967295
50               #  push_eax              # 4
B8 04000000 #   mov_eax, %4
5B                # pop_ebx               # *
F7E3 #  mul_ebx
5B                # pop_ebx               # +
01D8 #  add_eax,ebx
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # 4
B8 04000000 #   mov_eax, %4
89C3            #   mov_ebx,eax           # /s
58 #    pop_eax
99 #    cdq
F7FB #  idiv_ebx
5B                # pop_ebx               # =
8903 #  mov_[ebx],eax
58                # pop_eax               # ;
 ## stdlib.c 245
50               #  push_eax              # i (local)
8D85 18000000 # lea_eax,[ebp+DWORD] %24
50               #  push_eax              # 0
B8 00000000 #   mov_eax, %0
5B                # pop_ebx               # =
8903 #  mov_[ebx],eax
58                # pop_eax               # ;
:_realloc_loop2 #:_realloc_loop2
50               #  push_eax              # i (local)
8D85 18000000 # lea_eax,[ebp+DWORD] %24
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # old_size (local)
8D85 14000000 # lea_eax,[ebp+DWORD] %20
8B00          # mov_eax,[eax]         # ?
5B                # pop_ebx               # <s
39C3 #  cmp_eax_ebx
0F9CC0 #    setl_al
0FB6C0 #    movzx_eax,al
85C0           #    test_eax,eax          # !
0F94C0 #    sete_al
0FB6C0 #    movzx_eax,al
85C0           #    test_eax,eax          # if
58 #    pop_eax
0F84 %_realloc_else3 #  je %_realloc_else3
E9 %_realloc_loop_end2 #    jmp %_realloc_loop_end2
 ## stdlib.c 246
:_realloc_else3  #:_realloc_else3 # no else
50               #  push_eax              # result (local)
8D85 0C000000 # lea_eax,[ebp+DWORD] %12
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # i (local)
8D85 18000000 # lea_eax,[ebp+DWORD] %24
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # 4
B8 04000000 #   mov_eax, %4
5B                # pop_ebx               # *
F7E3 #  mul_ebx
5B                # pop_ebx               # +
01D8 #  add_eax,ebx
50               #  push_eax              # old_ptr (local)
8D85 10000000 # lea_eax,[ebp+DWORD] %16
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # i (local)
8D85 18000000 # lea_eax,[ebp+DWORD] %24
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # 4
B8 04000000 #   mov_eax, %4
5B                # pop_ebx               # *
F7E3 #  mul_ebx
5B                # pop_ebx               # +
01D8 #  add_eax,ebx
8B00          # mov_eax,[eax]         # ?
5B                # pop_ebx               # =
8903 #  mov_[ebx],eax
58                # pop_eax               # ;
50               #  push_eax              # i (local)
8D85 18000000 # lea_eax,[ebp+DWORD] %24
50               #  push_eax              # $ (dup)
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # 1
B8 01000000 #   mov_eax, %1
5B                # pop_ebx               # +
01D8 #  add_eax,ebx
5B                # pop_ebx               # =
8903 #  mov_[ebx],eax
50               #  push_eax              # 1
B8 01000000 #   mov_eax, %1
5B                # pop_ebx               # -
29C3 #  sub_ebx,eax
89D8 #  mov_eax,ebx
58                # pop_eax               # ;
E9 %_realloc_loop2 #    jmp %_realloc_loop2
:_realloc_loop_end2 #:_realloc_loop_end2
 ## stdlib.c 248
:_realloc_else1  #:_realloc_else1 # no else
50               #  push_eax              # result (local)
8D85 0C000000 # lea_eax,[ebp+DWORD] %12
8B00          # mov_eax,[eax]         # ?
8B5D00          #   mov_ebx,[ebp]         # return
53 #    push_ebx
C3 #    ret
50               #  push_eax              # 0
B8 00000000 #   mov_eax, %0
8B5D00          #   mov_ebx,[ebp]         # return
53 #    push_ebx
C3 #    ret
 #
:f_calloc #:f_calloc
58 #    pop_eax
894500 #    mov_[ebp],eax
58 #    pop_eax
50               #  push_eax              # S (local)
8D85 04000000 # lea_eax,[ebp+DWORD] %4
5B                # pop_ebx               # =:
8918 #  mov_[eax],ebx
58 #    pop_eax
50               #  push_eax              # N (local)
8D85 08000000 # lea_eax,[ebp+DWORD] %8
5B                # pop_ebx               # =:
8918 #  mov_[eax],ebx
58 #    pop_eax
50               #  push_eax              # len (local)
8D85 0C000000 # lea_eax,[ebp+DWORD] %12
50               #  push_eax              # N (local)
8D85 08000000 # lea_eax,[ebp+DWORD] %8
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # S (local)
8D85 04000000 # lea_eax,[ebp+DWORD] %4
8B00          # mov_eax,[eax]         # ?
5B                # pop_ebx               # *
F7E3 #  mul_ebx
5B                # pop_ebx               # =
8903 #  mov_[ebx],eax
58                # pop_eax               # ;
50               #  push_eax              # r (local)
8D85 10000000 # lea_eax,[ebp+DWORD] %16
50               #  push_eax              # len (local)
8D85 0C000000 # lea_eax,[ebp+DWORD] %12
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # malloc (function)
B8 &f_malloc #  mov_eax, &f_malloc
81C5 14000000          #    add_ebp, %20         # ()
FFD0 #  call_eax
81ED 14000000 # sub_ebp, %20
5B                # pop_ebx               # =
8903 #  mov_[ebx],eax
58                # pop_eax               # ;
 ## stdlib.c 255
50               #  push_eax              # i (local)
8D85 14000000 # lea_eax,[ebp+DWORD] %20
50               #  push_eax              # 0
B8 00000000 #   mov_eax, %0
5B                # pop_ebx               # =
8903 #  mov_[ebx],eax
58                # pop_eax               # ;
:_calloc_loop1 #:_calloc_loop1
50               #  push_eax              # i (local)
8D85 14000000 # lea_eax,[ebp+DWORD] %20
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # len (local)
8D85 0C000000 # lea_eax,[ebp+DWORD] %12
8B00          # mov_eax,[eax]         # ?
5B                # pop_ebx               # <s
39C3 #  cmp_eax_ebx
0F9CC0 #    setl_al
0FB6C0 #    movzx_eax,al
85C0           #    test_eax,eax          # !
0F94C0 #    sete_al
0FB6C0 #    movzx_eax,al
85C0           #    test_eax,eax          # if
58 #    pop_eax
0F84 %_calloc_else2 #   je %_calloc_else2
E9 %_calloc_loop_end1 # jmp %_calloc_loop_end1
 ## stdlib.c 256
:_calloc_else2  #:_calloc_else2 # no else
50               #  push_eax              # r (local)
8D85 10000000 # lea_eax,[ebp+DWORD] %16
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # i (local)
8D85 14000000 # lea_eax,[ebp+DWORD] %20
8B00          # mov_eax,[eax]         # ?
5B                # pop_ebx               # +
01D8 #  add_eax,ebx
50               #  push_eax              # 0
B8 00000000 #   mov_eax, %0
5B                # pop_ebx               # =1
8803 #  mov_[ebx],al
58                # pop_eax               # ;
50               #  push_eax              # i (local)
8D85 14000000 # lea_eax,[ebp+DWORD] %20
50               #  push_eax              # $ (dup)
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # 1
B8 01000000 #   mov_eax, %1
5B                # pop_ebx               # +
01D8 #  add_eax,ebx
5B                # pop_ebx               # =
8903 #  mov_[ebx],eax
50               #  push_eax              # 1
B8 01000000 #   mov_eax, %1
5B                # pop_ebx               # -
29C3 #  sub_ebx,eax
89D8 #  mov_eax,ebx
58                # pop_eax               # ;
E9 %_calloc_loop1 # jmp %_calloc_loop1
:_calloc_loop_end1 #:_calloc_loop_end1
 ## stdlib.c 257
50               #  push_eax              # r (local)
8D85 10000000 # lea_eax,[ebp+DWORD] %16
8B00          # mov_eax,[eax]         # ?
8B5D00          #   mov_ebx,[ebp]         # return
53 #    push_ebx
C3 #    ret
50               #  push_eax              # 0
B8 00000000 #   mov_eax, %0
8B5D00          #   mov_ebx,[ebp]         # return
53 #    push_ebx
C3 #    ret
 #
:f_free #:f_free
58 #    pop_eax
894500 #    mov_[ebp],eax
58 #    pop_eax
50               #  push_eax              # ptr (local)
8D85 04000000 # lea_eax,[ebp+DWORD] %4
5B                # pop_ebx               # =:
8918 #  mov_[eax],ebx
58 #    pop_eax
 ## stdlib.c 263
50               #  push_eax              # 0
B8 00000000 #   mov_eax, %0
8B5D00          #   mov_ebx,[ebp]         # return
53 #    push_ebx
C3 #    ret
50               #  push_eax              # 0
B8 00000000 #   mov_eax, %0
8B5D00          #   mov_ebx,[ebp]         # return
53 #    push_ebx
C3 #    ret
 #
:f_fwrite #:f_fwrite
58 #    pop_eax
894500 #    mov_[ebp],eax
58 #    pop_eax
50               #  push_eax              # stream (local)
8D85 04000000 # lea_eax,[ebp+DWORD] %4
5B                # pop_ebx               # =:
8918 #  mov_[eax],ebx
58 #    pop_eax
50               #  push_eax              # nmemb (local)
8D85 08000000 # lea_eax,[ebp+DWORD] %8
5B                # pop_ebx               # =:
8918 #  mov_[eax],ebx
58 #    pop_eax
50               #  push_eax              # size (local)
8D85 0C000000 # lea_eax,[ebp+DWORD] %12
5B                # pop_ebx               # =:
8918 #  mov_[eax],ebx
58 #    pop_eax
50               #  push_eax              # ptr (local)
8D85 10000000 # lea_eax,[ebp+DWORD] %16
5B                # pop_ebx               # =:
8918 #  mov_[eax],ebx
58 #    pop_eax
 ## stdlib.c 268
50               #  push_eax              # 4
B8 04000000 #   mov_eax, %4
50               #  push_eax              # stream (local)
8D85 04000000 # lea_eax,[ebp+DWORD] %4
8B00          # mov_eax,[eax]         # ->
81C0 00000000 # add_eax, %0
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # ptr (local)
8D85 10000000 # lea_eax,[ebp+DWORD] %16
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # size (local)
8D85 0C000000 # lea_eax,[ebp+DWORD] %12
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # nmemb (local)
8D85 08000000 # lea_eax,[ebp+DWORD] %8
8B00          # mov_eax,[eax]         # ?
5B                # pop_ebx               # *
F7E3 #  mul_ebx
50               #  push_eax              # sys_int80 (function)
B8 &f_sys_int80 #   mov_eax, &f_sys_int80
81C5 14000000          #    add_ebp, %20         # ()
FFD0 #  call_eax
81ED 14000000 # sub_ebp, %20
8B5D00          #   mov_ebx,[ebp]         # return
53 #    push_ebx
C3 #    ret
50               #  push_eax              # 0
B8 00000000 #   mov_eax, %0
8B5D00          #   mov_ebx,[ebp]         # return
53 #    push_ebx
C3 #    ret
 #
:f_fputc #:f_fputc
58 #    pop_eax
894500 #    mov_[ebp],eax
58 #    pop_eax
50               #  push_eax              # stream (local)
8D85 04000000 # lea_eax,[ebp+DWORD] %4
5B                # pop_ebx               # =:
8918 #  mov_[eax],ebx
58 #    pop_eax
50               #  push_eax              # c (local)
8D85 08000000 # lea_eax,[ebp+DWORD] %8
5B                # pop_ebx               # =:
8918 #  mov_[eax],ebx
58 #    pop_eax
 ## stdlib.c 273
50               #  push_eax              # 4
B8 04000000 #   mov_eax, %4
50               #  push_eax              # stream (local)
8D85 04000000 # lea_eax,[ebp+DWORD] %4
8B00          # mov_eax,[eax]         # ->
81C0 00000000 # add_eax, %0
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # c (local)
8D85 08000000 # lea_eax,[ebp+DWORD] %8
50               #  push_eax              # 1
B8 01000000 #   mov_eax, %1
50               #  push_eax              # sys_int80 (function)
B8 &f_sys_int80 #   mov_eax, &f_sys_int80
81C5 0C000000          #    add_ebp, %12         # ()
FFD0 #  call_eax
81ED 0C000000 # sub_ebp, %12
8B5D00          #   mov_ebx,[ebp]         # return
53 #    push_ebx
C3 #    ret
50               #  push_eax              # 0
B8 00000000 #   mov_eax, %0
8B5D00          #   mov_ebx,[ebp]         # return
53 #    push_ebx
C3 #    ret
 #
:f_fputs #:f_fputs
58 #    pop_eax
894500 #    mov_[ebp],eax
58 #    pop_eax
50               #  push_eax              # stream (local)
8D85 04000000 # lea_eax,[ebp+DWORD] %4
5B                # pop_ebx               # =:
8918 #  mov_[eax],ebx
58 #    pop_eax
50               #  push_eax              # s (local)
8D85 08000000 # lea_eax,[ebp+DWORD] %8
5B                # pop_ebx               # =:
8918 #  mov_[eax],ebx
58 #    pop_eax
 ## stdlib.c 278
50               #  push_eax              # 4
B8 04000000 #   mov_eax, %4
50               #  push_eax              # stream (local)
8D85 04000000 # lea_eax,[ebp+DWORD] %4
8B00          # mov_eax,[eax]         # ->
81C0 00000000 # add_eax, %0
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # s (local)
8D85 08000000 # lea_eax,[ebp+DWORD] %8
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # s (local)
8D85 08000000 # lea_eax,[ebp+DWORD] %8
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # strlen (function)
B8 &f_strlen #  mov_eax, &f_strlen
81C5 0C000000          #    add_ebp, %12         # ()
FFD0 #  call_eax
81ED 0C000000 # sub_ebp, %12
50               #  push_eax              # sys_int80 (function)
B8 &f_sys_int80 #   mov_eax, &f_sys_int80
81C5 0C000000          #    add_ebp, %12         # ()
FFD0 #  call_eax
81ED 0C000000 # sub_ebp, %12
8B5D00          #   mov_ebx,[ebp]         # return
53 #    push_ebx
C3 #    ret
50               #  push_eax              # 0
B8 00000000 #   mov_eax, %0
8B5D00          #   mov_ebx,[ebp]         # return
53 #    push_ebx
C3 #    ret
 #
:f___sys_printf #:f___sys_printf
58 #    pop_eax
894500 #    mov_[ebp],eax
58 #    pop_eax
50               #  push_eax              # args (local)
8D85 04000000 # lea_eax,[ebp+DWORD] %4
5B                # pop_ebx               # =:
8918 #  mov_[eax],ebx
58 #    pop_eax
50               #  push_eax              # format (local)
8D85 08000000 # lea_eax,[ebp+DWORD] %8
5B                # pop_ebx               # =:
8918 #  mov_[eax],ebx
58 #    pop_eax
50               #  push_eax              # len (local)
8D85 0C000000 # lea_eax,[ebp+DWORD] %12
5B                # pop_ebx               # =:
8918 #  mov_[eax],ebx
58 #    pop_eax
50               #  push_eax              # trg (local)
8D85 10000000 # lea_eax,[ebp+DWORD] %16
5B                # pop_ebx               # =:
8918 #  mov_[eax],ebx
58 #    pop_eax
50               #  push_eax              # stream (local)
8D85 14000000 # lea_eax,[ebp+DWORD] %20
5B                # pop_ebx               # =:
8918 #  mov_[eax],ebx
58 #    pop_eax
50               #  push_eax              # l (local)
8D85 2C000000 # lea_eax,[ebp+DWORD] %44
50               #  push_eax              # 0
B8 00000000 #   mov_eax, %0
5B                # pop_ebx               # =
8903 #  mov_[ebx],eax
58                # pop_eax               # ;
50               #  push_eax              # cnt (local)
8D85 34000000 # lea_eax,[ebp+DWORD] %52
50               #  push_eax              # 0
B8 00000000 #   mov_eax, %0
5B                # pop_ebx               # =
8903 #  mov_[ebx],eax
58                # pop_eax               # ;
50               #  push_eax              # org_format (local)
8D85 38000000 # lea_eax,[ebp+DWORD] %56
50               #  push_eax              # format (local)
8D85 08000000 # lea_eax,[ebp+DWORD] %8
8B00          # mov_eax,[eax]         # ?
5B                # pop_ebx               # =
8903 #  mov_[ebx],eax
58                # pop_eax               # ;
 ## stdlib.c 292
:___sys_printf_loop1 #:___sys_printf_loop1
 ## stdlib.c 293
 ## stdlib.c 294
50               #  push_eax              # len (local)
8D85 0C000000 # lea_eax,[ebp+DWORD] %12
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # 0
B8 00000000 #   mov_eax, %0
5B                # pop_ebx               # ==
39C3 #  cmp_eax_ebx
0F94C0 #    sete_al
0FB6C0 #    movzx_eax,al
85C0           #    test_eax,eax          # if
58 #    pop_eax
0F84 %___sys_printf_else2 # je %___sys_printf_else2
 ## stdlib.c 295
E9 %___sys_printf_loop_end1 #   jmp %___sys_printf_loop_end1
 ## stdlib.c 296
:___sys_printf_else2  #:___sys_printf_else2 # no else
50               #  push_eax              # l (local)
8D85 2C000000 # lea_eax,[ebp+DWORD] %44
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # 0
B8 00000000 #   mov_eax, %0
5B                # pop_ebx               # >s
39C3 #  cmp_eax_ebx
0F9FC0 #    setg_al
0FB6C0 #    movzx_eax,al
85C0           #    test_eax,eax          # if
58 #    pop_eax
0F84 %___sys_printf_else3 # je %___sys_printf_else3
 ## stdlib.c 297
 ## stdlib.c 298
50               #  push_eax              # stream (local)
8D85 14000000 # lea_eax,[ebp+DWORD] %20
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # 0
B8 00000000 #   mov_eax, %0
5B                # pop_ebx               # !=
39C3 #  cmp_eax_ebx
0F95C0 #    setne_al
0FB6C0 #    movzx_eax,al
85C0           #    test_eax,eax          # if
58 #    pop_eax
0F84 %___sys_printf_else4 # je %___sys_printf_else4
 ## stdlib.c 299
50               #  push_eax              # s (local)
8D85 30000000 # lea_eax,[ebp+DWORD] %48
8B00          # mov_eax,[eax]         # ?
8A00           #    mov_al,[eax]          # ?1
0FB6C0 #    movzx_eax,al
0FBEC0           #  movsx_eax,al          # char
50               #  push_eax              # stream (local)
8D85 14000000 # lea_eax,[ebp+DWORD] %20
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # fputc (function)
B8 &f_fputc #   mov_eax, &f_fputc
81C5 3C000000          #    add_ebp, %60         # ()
FFD0 #  call_eax
81ED 3C000000 # sub_ebp, %60
58                # pop_eax               # ;
E9 %___sys_printf_else_end4 #   jmp %___sys_printf_else_end4
:___sys_printf_else4 #:___sys_printf_else4
 ## stdlib.c 300
50               #  push_eax              # trg (local)
8D85 10000000 # lea_eax,[ebp+DWORD] %16
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # 0
B8 00000000 #   mov_eax, %0
5B                # pop_ebx               # !=
39C3 #  cmp_eax_ebx
0F95C0 #    setne_al
0FB6C0 #    movzx_eax,al
85C0           #    test_eax,eax          # if
58 #    pop_eax
0F84 %___sys_printf_else5 # je %___sys_printf_else5
 ## stdlib.c 301
50               #  push_eax              # trg (local)
8D85 10000000 # lea_eax,[ebp+DWORD] %16
50               #  push_eax              # $ (dup)
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # 1
B8 01000000 #   mov_eax, %1
5B                # pop_ebx               # +
01D8 #  add_eax,ebx
5B                # pop_ebx               # =
8903 #  mov_[ebx],eax
50               #  push_eax              # 1
B8 01000000 #   mov_eax, %1
5B                # pop_ebx               # -
29C3 #  sub_ebx,eax
89D8 #  mov_eax,ebx
50               #  push_eax              # s (local)
8D85 30000000 # lea_eax,[ebp+DWORD] %48
8B00          # mov_eax,[eax]         # ?
8A00           #    mov_al,[eax]          # ?1
0FB6C0 #    movzx_eax,al
0FBEC0           #  movsx_eax,al          # char
5B                # pop_ebx               # =1
8803 #  mov_[ebx],al
58                # pop_eax               # ;
:___sys_printf_else5  #:___sys_printf_else5 # no else
:___sys_printf_else_end4 #:___sys_printf_else_end4
 ## stdlib.c 302
50               #  push_eax              # s (local)
8D85 30000000 # lea_eax,[ebp+DWORD] %48
50               #  push_eax              # $ (dup)
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # 1
B8 01000000 #   mov_eax, %1
5B                # pop_ebx               # +
01D8 #  add_eax,ebx
5B                # pop_ebx               # =
8903 #  mov_[ebx],eax
50               #  push_eax              # 1
B8 01000000 #   mov_eax, %1
5B                # pop_ebx               # -
29C3 #  sub_ebx,eax
89D8 #  mov_eax,ebx
58                # pop_eax               # ;
 ## stdlib.c 303
50               #  push_eax              # l (local)
8D85 2C000000 # lea_eax,[ebp+DWORD] %44
50               #  push_eax              # $ (dup)
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # 1
B8 01000000 #   mov_eax, %1
5B                # pop_ebx               # -
29C3 #  sub_ebx,eax
89D8 #  mov_eax,ebx
5B                # pop_ebx               # =
8903 #  mov_[ebx],eax
50               #  push_eax              # 1
B8 01000000 #   mov_eax, %1
5B                # pop_ebx               # +
01D8 #  add_eax,ebx
58                # pop_eax               # ;
 ## stdlib.c 304
50               #  push_eax              # cnt (local)
8D85 34000000 # lea_eax,[ebp+DWORD] %52
50               #  push_eax              # $ (dup)
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # 1
B8 01000000 #   mov_eax, %1
5B                # pop_ebx               # +
01D8 #  add_eax,ebx
5B                # pop_ebx               # =
8903 #  mov_[ebx],eax
50               #  push_eax              # 1
B8 01000000 #   mov_eax, %1
5B                # pop_ebx               # -
29C3 #  sub_ebx,eax
89D8 #  mov_eax,ebx
58                # pop_eax               # ;
 ## stdlib.c 305
50               #  push_eax              # len (local)
8D85 0C000000 # lea_eax,[ebp+DWORD] %12
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # 0
B8 00000000 #   mov_eax, %0
5B                # pop_ebx               # >s
39C3 #  cmp_eax_ebx
0F9FC0 #    setg_al
0FB6C0 #    movzx_eax,al
85C0           #    test_eax,eax          # if
58 #    pop_eax
0F84 %___sys_printf_else6 # je %___sys_printf_else6
 ## stdlib.c 306
50               #  push_eax              # len (local)
8D85 0C000000 # lea_eax,[ebp+DWORD] %12
50               #  push_eax              # $ (dup)
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # 1
B8 01000000 #   mov_eax, %1
5B                # pop_ebx               # -
29C3 #  sub_ebx,eax
89D8 #  mov_eax,ebx
5B                # pop_ebx               # =
8903 #  mov_[ebx],eax
50               #  push_eax              # 1
B8 01000000 #   mov_eax, %1
5B                # pop_ebx               # +
01D8 #  add_eax,ebx
58                # pop_eax               # ;
:___sys_printf_else6  #:___sys_printf_else6 # no else
 ## stdlib.c 308
:___sys_printf_else3  #:___sys_printf_else3 # no else
50               #  push_eax              # l (local)
8D85 2C000000 # lea_eax,[ebp+DWORD] %44
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # 0
B8 00000000 #   mov_eax, %0
5B                # pop_ebx               # ==
39C3 #  cmp_eax_ebx
0F94C0 #    sete_al
0FB6C0 #    movzx_eax,al
85C0           #    test_eax,eax          # if
58 #    pop_eax
0F84 %___sys_printf_else7 # je %___sys_printf_else7
 ## stdlib.c 309
 ## stdlib.c 310
50               #  push_eax              # format (local)
8D85 08000000 # lea_eax,[ebp+DWORD] %8
8B00          # mov_eax,[eax]         # ?
8A00           #    mov_al,[eax]          # ?1
0FB6C0 #    movzx_eax,al
0FBEC0           #  movsx_eax,al          # char
50               #  push_eax              # 0
B8 00000000 #   mov_eax, %0
5B                # pop_ebx               # ==
39C3 #  cmp_eax_ebx
0F94C0 #    sete_al
0FB6C0 #    movzx_eax,al
85C0           #    test_eax,eax          # if
58 #    pop_eax
0F84 %___sys_printf_else8 # je %___sys_printf_else8
 ## stdlib.c 311
E9 %___sys_printf_loop_end1 #   jmp %___sys_printf_loop_end1
 ## stdlib.c 312
:___sys_printf_else8  #:___sys_printf_else8 # no else
50               #  push_eax              # s (local)
8D85 30000000 # lea_eax,[ebp+DWORD] %48
50               #  push_eax              # buffer (local)
8D85 18000000 # lea_eax,[ebp+DWORD] %24
5B                # pop_ebx               # =
8903 #  mov_[ebx],eax
58                # pop_eax               # ;
 ## stdlib.c 313
50               #  push_eax              # l (local)
8D85 2C000000 # lea_eax,[ebp+DWORD] %44
50               #  push_eax              # 1
B8 01000000 #   mov_eax, %1
5B                # pop_ebx               # =
8903 #  mov_[ebx],eax
58                # pop_eax               # ;
 ## stdlib.c 314
50               #  push_eax              # format (local)
8D85 08000000 # lea_eax,[ebp+DWORD] %8
8B00          # mov_eax,[eax]         # ?
8A00           #    mov_al,[eax]          # ?1
0FB6C0 #    movzx_eax,al
0FBEC0           #  movsx_eax,al          # char
50               #  push_eax              # 37
B8 25000000 #   mov_eax, %37
5B                # pop_ebx               # ==
39C3 #  cmp_eax_ebx
0F94C0 #    sete_al
0FB6C0 #    movzx_eax,al
85C0           #    test_eax,eax          # if
58 #    pop_eax
0F84 %___sys_printf_else9 # je %___sys_printf_else9
 ## stdlib.c 315
 ## stdlib.c 316
50               #  push_eax              # format (local)
8D85 08000000 # lea_eax,[ebp+DWORD] %8
50               #  push_eax              # $ (dup)
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # 1
B8 01000000 #   mov_eax, %1
5B                # pop_ebx               # +
01D8 #  add_eax,ebx
5B                # pop_ebx               # =
8903 #  mov_[ebx],eax
50               #  push_eax              # 1
B8 01000000 #   mov_eax, %1
5B                # pop_ebx               # -
29C3 #  sub_ebx,eax
89D8 #  mov_eax,ebx
58                # pop_eax               # ;
 ## stdlib.c 317
50               #  push_eax              # format (local)
8D85 08000000 # lea_eax,[ebp+DWORD] %8
8B00          # mov_eax,[eax]         # ?
8A00           #    mov_al,[eax]          # ?1
0FB6C0 #    movzx_eax,al
0FBEC0           #  movsx_eax,al          # char
50               #  push_eax              # 37
B8 25000000 #   mov_eax, %37
5B                # pop_ebx               # ==
39C3 #  cmp_eax_ebx
0F94C0 #    sete_al
0FB6C0 #    movzx_eax,al
85C0           #    test_eax,eax          # if
58 #    pop_eax
0F84 %___sys_printf_else10 #    je %___sys_printf_else10
 ## stdlib.c 318
50               #  push_eax              # buffer (local)
8D85 18000000 # lea_eax,[ebp+DWORD] %24
50               #  push_eax              # 0
B8 00000000 #   mov_eax, %0
5B                # pop_ebx               # +
01D8 #  add_eax,ebx
50               #  push_eax              # 37
B8 25000000 #   mov_eax, %37
5B                # pop_ebx               # =1
8803 #  mov_[ebx],al
58                # pop_eax               # ;
E9 %___sys_printf_else_end10 #  jmp %___sys_printf_else_end10
:___sys_printf_else10 #:___sys_printf_else10
 ## stdlib.c 320
50               #  push_eax              # modifier (local)
8D85 3C000000 # lea_eax,[ebp+DWORD] %60
50               #  push_eax              # 0
B8 00000000 #   mov_eax, %0
5B                # pop_ebx               # =
8903 #  mov_[ebx],eax
58                # pop_eax               # ;
50               #  push_eax              # sign (local)
8D85 40000000 # lea_eax,[ebp+DWORD] %64
50               #  push_eax              # 1
B8 01000000 #   mov_eax, %1
5B                # pop_ebx               # =
8903 #  mov_[ebx],eax
58                # pop_eax               # ;
 ## stdlib.c 323
50               #  push_eax              # format (local)
8D85 08000000 # lea_eax,[ebp+DWORD] %8
8B00          # mov_eax,[eax]         # ?
8A00           #    mov_al,[eax]          # ?1
0FB6C0 #    movzx_eax,al
0FBEC0           #  movsx_eax,al          # char
50               #  push_eax              # 45
B8 2D000000 #   mov_eax, %45
5B                # pop_ebx               # ==
39C3 #  cmp_eax_ebx
0F94C0 #    sete_al
0FB6C0 #    movzx_eax,al
85C0           #    test_eax,eax          # if
58 #    pop_eax
0F84 %___sys_printf_else11 #    je %___sys_printf_else11
 ## stdlib.c 324
 ## stdlib.c 325
50               #  push_eax              # sign (local)
8D85 40000000 # lea_eax,[ebp+DWORD] %64
50               #  push_eax              # 4294967295
B8 FFFFFFFF #   mov_eax, %4294967295
5B                # pop_ebx               # =
8903 #  mov_[ebx],eax
58                # pop_eax               # ;
 ## stdlib.c 326
50               #  push_eax              # format (local)
8D85 08000000 # lea_eax,[ebp+DWORD] %8
50               #  push_eax              # $ (dup)
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # 1
B8 01000000 #   mov_eax, %1
5B                # pop_ebx               # +
01D8 #  add_eax,ebx
5B                # pop_ebx               # =
8903 #  mov_[ebx],eax
50               #  push_eax              # 1
B8 01000000 #   mov_eax, %1
5B                # pop_ebx               # -
29C3 #  sub_ebx,eax
89D8 #  mov_eax,ebx
58                # pop_eax               # ;
 ## stdlib.c 328
:___sys_printf_else11  #:___sys_printf_else11 # no else
:___sys_printf_loop12 #:___sys_printf_loop12
50               #  push_eax              # 48
B8 30000000 #   mov_eax, %48
50               #  push_eax              # format (local)
8D85 08000000 # lea_eax,[ebp+DWORD] %8
8B00          # mov_eax,[eax]         # ?
8A00           #    mov_al,[eax]          # ?1
0FB6C0 #    movzx_eax,al
0FBEC0           #  movsx_eax,al          # char
5B                # pop_ebx               # <=s
39C3 #  cmp_eax_ebx
0F9EC0 #    setle_al
0FB6C0 #    movzx_eax,al
85C0           #    test_eax,eax          # &&
0F84 %___sys_printf_and_end13 # je %___sys_printf_and_end13
58 #    pop_eax
50               #  push_eax              # format (local)
8D85 08000000 # lea_eax,[ebp+DWORD] %8
8B00          # mov_eax,[eax]         # ?
8A00           #    mov_al,[eax]          # ?1
0FB6C0 #    movzx_eax,al
0FBEC0           #  movsx_eax,al          # char
50               #  push_eax              # 57
B8 39000000 #   mov_eax, %57
5B                # pop_ebx               # <=s
39C3 #  cmp_eax_ebx
0F9EC0 #    setle_al
0FB6C0 #    movzx_eax,al
:___sys_printf_and_end13 #:___sys_printf_and_end13
85C0           #    test_eax,eax          # !
0F94C0 #    sete_al
0FB6C0 #    movzx_eax,al
85C0           #    test_eax,eax          # if
58 #    pop_eax
0F84 %___sys_printf_else14 #    je %___sys_printf_else14
E9 %___sys_printf_loop_end12 #  jmp %___sys_printf_loop_end12
 ## stdlib.c 329
 ## stdlib.c 330
:___sys_printf_else14  #:___sys_printf_else14 # no else
50               #  push_eax              # modifier (local)
8D85 3C000000 # lea_eax,[ebp+DWORD] %60
50               #  push_eax              # 10
B8 0A000000 #   mov_eax, %10
50               #  push_eax              # modifier (local)
8D85 3C000000 # lea_eax,[ebp+DWORD] %60
8B00          # mov_eax,[eax]         # ?
5B                # pop_ebx               # *
F7E3 #  mul_ebx
50               #  push_eax              # format (local)
8D85 08000000 # lea_eax,[ebp+DWORD] %8
8B00          # mov_eax,[eax]         # ?
8A00           #    mov_al,[eax]          # ?1
0FB6C0 #    movzx_eax,al
0FBEC0           #  movsx_eax,al          # char
5B                # pop_ebx               # +
01D8 #  add_eax,ebx
50               #  push_eax              # 48
B8 30000000 #   mov_eax, %48
5B                # pop_ebx               # -
29C3 #  sub_ebx,eax
89D8 #  mov_eax,ebx
5B                # pop_ebx               # =
8903 #  mov_[ebx],eax
58                # pop_eax               # ;
 ## stdlib.c 331
50               #  push_eax              # format (local)
8D85 08000000 # lea_eax,[ebp+DWORD] %8
50               #  push_eax              # $ (dup)
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # 1
B8 01000000 #   mov_eax, %1
5B                # pop_ebx               # +
01D8 #  add_eax,ebx
5B                # pop_ebx               # =
8903 #  mov_[ebx],eax
50               #  push_eax              # 1
B8 01000000 #   mov_eax, %1
5B                # pop_ebx               # -
29C3 #  sub_ebx,eax
89D8 #  mov_eax,ebx
58                # pop_eax               # ;
E9 %___sys_printf_loop12 #  jmp %___sys_printf_loop12
:___sys_printf_loop_end12 #:___sys_printf_loop_end12
 ## stdlib.c 333
50               #  push_eax              # format (local)
8D85 08000000 # lea_eax,[ebp+DWORD] %8
8B00          # mov_eax,[eax]         # ?
8A00           #    mov_al,[eax]          # ?1
0FB6C0 #    movzx_eax,al
0FBEC0           #  movsx_eax,al          # char
50               #  push_eax              # 115
B8 73000000 #   mov_eax, %115
5B                # pop_ebx               # ==
39C3 #  cmp_eax_ebx
0F94C0 #    sete_al
0FB6C0 #    movzx_eax,al
85C0           #    test_eax,eax          # if
58 #    pop_eax
0F84 %___sys_printf_else15 #    je %___sys_printf_else15
 ## stdlib.c 334
 ## stdlib.c 335
50               #  push_eax              # s (local)
8D85 30000000 # lea_eax,[ebp+DWORD] %48
50               #  push_eax              # args (local)
8D85 04000000 # lea_eax,[ebp+DWORD] %4
50               #  push_eax              # $ (dup)
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # 4
B8 04000000 #   mov_eax, %4
5B                # pop_ebx               # +
01D8 #  add_eax,ebx
5B                # pop_ebx               # =
8903 #  mov_[ebx],eax
50               #  push_eax              # 4
B8 04000000 #   mov_eax, %4
5B                # pop_ebx               # -
29C3 #  sub_ebx,eax
89D8 #  mov_eax,ebx
8B00          # mov_eax,[eax]         # ?
5B                # pop_ebx               # =
8903 #  mov_[ebx],eax
58                # pop_eax               # ;
 ## stdlib.c 336
50               #  push_eax              # l (local)
8D85 2C000000 # lea_eax,[ebp+DWORD] %44
50               #  push_eax              # s (local)
8D85 30000000 # lea_eax,[ebp+DWORD] %48
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # strlen (function)
B8 &f_strlen #  mov_eax, &f_strlen
81C5 44000000          #    add_ebp, %68         # ()
FFD0 #  call_eax
81ED 44000000 # sub_ebp, %68
5B                # pop_ebx               # =
8903 #  mov_[ebx],eax
58                # pop_eax               # ;
E9 %___sys_printf_else_end15 #  jmp %___sys_printf_else_end15
:___sys_printf_else15 #:___sys_printf_else15
 ## stdlib.c 338
50               #  push_eax              # format (local)
8D85 08000000 # lea_eax,[ebp+DWORD] %8
8B00          # mov_eax,[eax]         # ?
8A00           #    mov_al,[eax]          # ?1
0FB6C0 #    movzx_eax,al
0FBEC0           #  movsx_eax,al          # char
50               #  push_eax              # 100
B8 64000000 #   mov_eax, %100
5B                # pop_ebx               # ==
39C3 #  cmp_eax_ebx
0F94C0 #    sete_al
0FB6C0 #    movzx_eax,al
85C0           #    test_eax,eax          # if
58 #    pop_eax
0F84 %___sys_printf_else16 #    je %___sys_printf_else16
 ## stdlib.c 339
50               #  push_eax              # v (local)
8D85 44000000 # lea_eax,[ebp+DWORD] %68
50               #  push_eax              # args (local)
8D85 04000000 # lea_eax,[ebp+DWORD] %4
8B00          # mov_eax,[eax]         # ?
8B00          # mov_eax,[eax]         # ?
5B                # pop_ebx               # =
8903 #  mov_[ebx],eax
58                # pop_eax               # ;
50               #  push_eax              # b (local)
8D85 48000000 # lea_eax,[ebp+DWORD] %72
50               #  push_eax              # 20
B8 14000000 #   mov_eax, %20
5B                # pop_ebx               # =
8903 #  mov_[ebx],eax
58                # pop_eax               # ;
 ## stdlib.c 342
50               #  push_eax              # v (local)
8D85 44000000 # lea_eax,[ebp+DWORD] %68
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # 0
B8 00000000 #   mov_eax, %0
5B                # pop_ebx               # ==
39C3 #  cmp_eax_ebx
0F94C0 #    sete_al
0FB6C0 #    movzx_eax,al
85C0           #    test_eax,eax          # if
58 #    pop_eax
0F84 %___sys_printf_else17 #    je %___sys_printf_else17
 ## stdlib.c 343
50               #  push_eax              # buffer (local)
8D85 18000000 # lea_eax,[ebp+DWORD] %24
50               #  push_eax              # b (local)
8D85 48000000 # lea_eax,[ebp+DWORD] %72
50               #  push_eax              # $ (dup)
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # 1
B8 01000000 #   mov_eax, %1
5B                # pop_ebx               # -
29C3 #  sub_ebx,eax
89D8 #  mov_eax,ebx
5B                # pop_ebx               # =
8903 #  mov_[ebx],eax
5B                # pop_ebx               # +
01D8 #  add_eax,ebx
50               #  push_eax              # 48
B8 30000000 #   mov_eax, %48
5B                # pop_ebx               # =1
8803 #  mov_[ebx],al
58                # pop_eax               # ;
E9 %___sys_printf_else_end17 #  jmp %___sys_printf_else_end17
:___sys_printf_else17 #:___sys_printf_else17
 ## stdlib.c 345
 ## stdlib.c 346
50               #  push_eax              # v (local)
8D85 44000000 # lea_eax,[ebp+DWORD] %68
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # 0
B8 00000000 #   mov_eax, %0
5B                # pop_ebx               # <s
39C3 #  cmp_eax_ebx
0F9CC0 #    setl_al
0FB6C0 #    movzx_eax,al
85C0           #    test_eax,eax          # if
58 #    pop_eax
0F84 %___sys_printf_else18 #    je %___sys_printf_else18
 ## stdlib.c 346
50               #  push_eax              # v (local)
8D85 44000000 # lea_eax,[ebp+DWORD] %68
50               #  push_eax              # 0
B8 00000000 #   mov_eax, %0
50               #  push_eax              # v (local)
8D85 44000000 # lea_eax,[ebp+DWORD] %68
8B00          # mov_eax,[eax]         # ?
5B                # pop_ebx               # -
29C3 #  sub_ebx,eax
89D8 #  mov_eax,ebx
5B                # pop_ebx               # =
8903 #  mov_[ebx],eax
58                # pop_eax               # ;
 ## stdlib.c 347
:___sys_printf_else18  #:___sys_printf_else18 # no else
:___sys_printf_loop19 #:___sys_printf_loop19
50               #  push_eax              # v (local)
8D85 44000000 # lea_eax,[ebp+DWORD] %68
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # 0
B8 00000000 #   mov_eax, %0
5B                # pop_ebx               # >s
39C3 #  cmp_eax_ebx
0F9FC0 #    setg_al
0FB6C0 #    movzx_eax,al
85C0           #    test_eax,eax          # !
0F94C0 #    sete_al
0FB6C0 #    movzx_eax,al
85C0           #    test_eax,eax          # if
58 #    pop_eax
0F84 %___sys_printf_else20 #    je %___sys_printf_else20
E9 %___sys_printf_loop_end19 #  jmp %___sys_printf_loop_end19
 ## stdlib.c 348
:___sys_printf_else20  #:___sys_printf_else20 # no else
50               #  push_eax              # buffer (local)
8D85 18000000 # lea_eax,[ebp+DWORD] %24
50               #  push_eax              # b (local)
8D85 48000000 # lea_eax,[ebp+DWORD] %72
50               #  push_eax              # $ (dup)
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # 1
B8 01000000 #   mov_eax, %1
5B                # pop_ebx               # -
29C3 #  sub_ebx,eax
89D8 #  mov_eax,ebx
5B                # pop_ebx               # =
8903 #  mov_[ebx],eax
5B                # pop_ebx               # +
01D8 #  add_eax,ebx
50               #  push_eax              # 48
B8 30000000 #   mov_eax, %48
50               #  push_eax              # v (local)
8D85 44000000 # lea_eax,[ebp+DWORD] %68
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # 10
B8 0A000000 #   mov_eax, %10
89C3            #   mov_ebx,eax           # %s
58 #    pop_eax
99 #    cdq
F7FB #  idiv_ebx
89D0 5B                #    mov_eax,edx pop_ebx               # +
01D8 #  add_eax,ebx
5B                # pop_ebx               # =1
8803 #  mov_[ebx],al
58                # pop_eax               # ;
50               #  push_eax              # v (local)
8D85 44000000 # lea_eax,[ebp+DWORD] %68
50               #  push_eax              # v (local)
8D85 44000000 # lea_eax,[ebp+DWORD] %68
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # 10
B8 0A000000 #   mov_eax, %10
89C3            #   mov_ebx,eax           # /s
58 #    pop_eax
99 #    cdq
F7FB #  idiv_ebx
5B                # pop_ebx               # =
8903 #  mov_[ebx],eax
58                # pop_eax               # ;
E9 %___sys_printf_loop19 #  jmp %___sys_printf_loop19
:___sys_printf_loop_end19 #:___sys_printf_loop_end19
 ## stdlib.c 349
50               #  push_eax              # args (local)
8D85 04000000 # lea_eax,[ebp+DWORD] %4
8B00          # mov_eax,[eax]         # ?
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # 0
B8 00000000 #   mov_eax, %0
5B                # pop_ebx               # <s
39C3 #  cmp_eax_ebx
0F9CC0 #    setl_al
0FB6C0 #    movzx_eax,al
85C0           #    test_eax,eax          # if
58 #    pop_eax
0F84 %___sys_printf_else21 #    je %___sys_printf_else21
 ## stdlib.c 350
50               #  push_eax              # buffer (local)
8D85 18000000 # lea_eax,[ebp+DWORD] %24
50               #  push_eax              # b (local)
8D85 48000000 # lea_eax,[ebp+DWORD] %72
50               #  push_eax              # $ (dup)
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # 1
B8 01000000 #   mov_eax, %1
5B                # pop_ebx               # -
29C3 #  sub_ebx,eax
89D8 #  mov_eax,ebx
5B                # pop_ebx               # =
8903 #  mov_[ebx],eax
5B                # pop_ebx               # +
01D8 #  add_eax,ebx
50               #  push_eax              # 45
B8 2D000000 #   mov_eax, %45
5B                # pop_ebx               # =1
8803 #  mov_[ebx],al
58                # pop_eax               # ;
:___sys_printf_else21  #:___sys_printf_else21 # no else
:___sys_printf_else_end17 #:___sys_printf_else_end17
 ## stdlib.c 352
50               #  push_eax              # l (local)
8D85 2C000000 # lea_eax,[ebp+DWORD] %44
50               #  push_eax              # 20
B8 14000000 #   mov_eax, %20
50               #  push_eax              # b (local)
8D85 48000000 # lea_eax,[ebp+DWORD] %72
8B00          # mov_eax,[eax]         # ?
5B                # pop_ebx               # -
29C3 #  sub_ebx,eax
89D8 #  mov_eax,ebx
5B                # pop_ebx               # =
8903 #  mov_[ebx],eax
58                # pop_eax               # ;
 ## stdlib.c 353
50               #  push_eax              # modifier (local)
8D85 3C000000 # lea_eax,[ebp+DWORD] %60
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # 0
B8 00000000 #   mov_eax, %0
5B                # pop_ebx               # >s
39C3 #  cmp_eax_ebx
0F9FC0 #    setg_al
0FB6C0 #    movzx_eax,al
85C0           #    test_eax,eax          # if
58 #    pop_eax
0F84 %___sys_printf_else22 #    je %___sys_printf_else22
 ## stdlib.c 354
 ## stdlib.c 355
50               #  push_eax              # modifier (local)
8D85 3C000000 # lea_eax,[ebp+DWORD] %60
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # l (local)
8D85 2C000000 # lea_eax,[ebp+DWORD] %44
8B00          # mov_eax,[eax]         # ?
5B                # pop_ebx               # >s
39C3 #  cmp_eax_ebx
0F9FC0 #    setg_al
0FB6C0 #    movzx_eax,al
85C0           #    test_eax,eax          # if
58 #    pop_eax
0F84 %___sys_printf_else23 #    je %___sys_printf_else23
 ## stdlib.c 356
 ## stdlib.c 357
50               #  push_eax              # sign (local)
8D85 40000000 # lea_eax,[ebp+DWORD] %64
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # 4294967295
B8 FFFFFFFF #   mov_eax, %4294967295
5B                # pop_ebx               # ==
39C3 #  cmp_eax_ebx
0F94C0 #    sete_al
0FB6C0 #    movzx_eax,al
85C0           #    test_eax,eax          # if
58 #    pop_eax
0F84 %___sys_printf_else24 #    je %___sys_printf_else24
 ## stdlib.c 358
 ## stdlib.c 359
50               #  push_eax              # i (local)
8D85 4C000000 # lea_eax,[ebp+DWORD] %76
50               #  push_eax              # 20
B8 14000000 #   mov_eax, %20
50               #  push_eax              # modifier (local)
8D85 3C000000 # lea_eax,[ebp+DWORD] %60
8B00          # mov_eax,[eax]         # ?
5B                # pop_ebx               # -
29C3 #  sub_ebx,eax
89D8 #  mov_eax,ebx
5B                # pop_ebx               # =
8903 #  mov_[ebx],eax
58                # pop_eax               # ;
:___sys_printf_loop25 #:___sys_printf_loop25
50               #  push_eax              # i (local)
8D85 4C000000 # lea_eax,[ebp+DWORD] %76
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # 20
B8 14000000 #   mov_eax, %20
5B                # pop_ebx               # <s
39C3 #  cmp_eax_ebx
0F9CC0 #    setl_al
0FB6C0 #    movzx_eax,al
85C0           #    test_eax,eax          # !
0F94C0 #    sete_al
0FB6C0 #    movzx_eax,al
85C0           #    test_eax,eax          # if
58 #    pop_eax
0F84 %___sys_printf_else26 #    je %___sys_printf_else26
E9 %___sys_printf_loop_end25 #  jmp %___sys_printf_loop_end25
 ## stdlib.c 360
:___sys_printf_else26  #:___sys_printf_else26 # no else
50               #  push_eax              # buffer (local)
8D85 18000000 # lea_eax,[ebp+DWORD] %24
50               #  push_eax              # i (local)
8D85 4C000000 # lea_eax,[ebp+DWORD] %76
8B00          # mov_eax,[eax]         # ?
5B                # pop_ebx               # +
01D8 #  add_eax,ebx
50               #  push_eax              # b (local)
8D85 48000000 # lea_eax,[ebp+DWORD] %72
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # 20
B8 14000000 #   mov_eax, %20
5B                # pop_ebx               # <s
39C3 #  cmp_eax_ebx
0F9CC0 #    setl_al
0FB6C0 #    movzx_eax,al
85C0           #    test_eax,eax          # if
58 #    pop_eax
0F84 %___sys_printf_else27 #    je %___sys_printf_else27
50               #  push_eax              # buffer (local)
8D85 18000000 # lea_eax,[ebp+DWORD] %24
50               #  push_eax              # b (local)
8D85 48000000 # lea_eax,[ebp+DWORD] %72
50               #  push_eax              # $ (dup)
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # 1
B8 01000000 #   mov_eax, %1
5B                # pop_ebx               # +
01D8 #  add_eax,ebx
5B                # pop_ebx               # =
8903 #  mov_[ebx],eax
50               #  push_eax              # 1
B8 01000000 #   mov_eax, %1
5B                # pop_ebx               # -
29C3 #  sub_ebx,eax
89D8 #  mov_eax,ebx
5B                # pop_ebx               # +
01D8 #  add_eax,ebx
8A00           #    mov_al,[eax]          # ?1
0FB6C0 #    movzx_eax,al
0FBEC0           #  movsx_eax,al          # char
E9 %___sys_printf_else_end27 #  jmp %___sys_printf_else_end27
:___sys_printf_else27 #:___sys_printf_else27
50               #  push_eax              # 32
B8 20000000 #   mov_eax, %32
:___sys_printf_else_end27 #:___sys_printf_else_end27
5B                # pop_ebx               # =1
8803 #  mov_[ebx],al
58                # pop_eax               # ;
50               #  push_eax              # i (local)
8D85 4C000000 # lea_eax,[ebp+DWORD] %76
50               #  push_eax              # $ (dup)
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # 1
B8 01000000 #   mov_eax, %1
5B                # pop_ebx               # +
01D8 #  add_eax,ebx
5B                # pop_ebx               # =
8903 #  mov_[ebx],eax
50               #  push_eax              # 1
B8 01000000 #   mov_eax, %1
5B                # pop_ebx               # -
29C3 #  sub_ebx,eax
89D8 #  mov_eax,ebx
58                # pop_eax               # ;
E9 %___sys_printf_loop25 #  jmp %___sys_printf_loop25
:___sys_printf_loop_end25 #:___sys_printf_loop_end25
 ## stdlib.c 361
50               #  push_eax              # b (local)
8D85 48000000 # lea_eax,[ebp+DWORD] %72
50               #  push_eax              # 20
B8 14000000 #   mov_eax, %20
50               #  push_eax              # modifier (local)
8D85 3C000000 # lea_eax,[ebp+DWORD] %60
8B00          # mov_eax,[eax]         # ?
5B                # pop_ebx               # -
29C3 #  sub_ebx,eax
89D8 #  mov_eax,ebx
5B                # pop_ebx               # =
8903 #  mov_[ebx],eax
58                # pop_eax               # ;
E9 %___sys_printf_else_end24 #  jmp %___sys_printf_else_end24
:___sys_printf_else24 #:___sys_printf_else24
 ## stdlib.c 364
:___sys_printf_loop28 #:___sys_printf_loop28
50               #  push_eax              # l (local)
8D85 2C000000 # lea_eax,[ebp+DWORD] %44
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # modifier (local)
8D85 3C000000 # lea_eax,[ebp+DWORD] %60
8B00          # mov_eax,[eax]         # ?
5B                # pop_ebx               # <s
39C3 #  cmp_eax_ebx
0F9CC0 #    setl_al
0FB6C0 #    movzx_eax,al
85C0           #    test_eax,eax          # !
0F94C0 #    sete_al
0FB6C0 #    movzx_eax,al
85C0           #    test_eax,eax          # if
58 #    pop_eax
0F84 %___sys_printf_else29 #    je %___sys_printf_else29
E9 %___sys_printf_loop_end28 #  jmp %___sys_printf_loop_end28
 ## stdlib.c 365
:___sys_printf_else29  #:___sys_printf_else29 # no else
50               #  push_eax              # buffer (local)
8D85 18000000 # lea_eax,[ebp+DWORD] %24
50               #  push_eax              # b (local)
8D85 48000000 # lea_eax,[ebp+DWORD] %72
50               #  push_eax              # $ (dup)
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # 1
B8 01000000 #   mov_eax, %1
5B                # pop_ebx               # -
29C3 #  sub_ebx,eax
89D8 #  mov_eax,ebx
5B                # pop_ebx               # =
8903 #  mov_[ebx],eax
5B                # pop_ebx               # +
01D8 #  add_eax,ebx
50               #  push_eax              # 32
B8 20000000 #   mov_eax, %32
5B                # pop_ebx               # =1
8803 #  mov_[ebx],al
58                # pop_eax               # ;
50               #  push_eax              # l (local)
8D85 2C000000 # lea_eax,[ebp+DWORD] %44
50               #  push_eax              # $ (dup)
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # 1
B8 01000000 #   mov_eax, %1
5B                # pop_ebx               # +
01D8 #  add_eax,ebx
5B                # pop_ebx               # =
8903 #  mov_[ebx],eax
50               #  push_eax              # 1
B8 01000000 #   mov_eax, %1
5B                # pop_ebx               # -
29C3 #  sub_ebx,eax
89D8 #  mov_eax,ebx
58                # pop_eax               # ;
E9 %___sys_printf_loop28 #  jmp %___sys_printf_loop28
:___sys_printf_loop_end28 #:___sys_printf_loop_end28
:___sys_printf_else_end24 #:___sys_printf_else_end24
 ## stdlib.c 367
:___sys_printf_else23  #:___sys_printf_else23 # no else
50               #  push_eax              # l (local)
8D85 2C000000 # lea_eax,[ebp+DWORD] %44
50               #  push_eax              # modifier (local)
8D85 3C000000 # lea_eax,[ebp+DWORD] %60
8B00          # mov_eax,[eax]         # ?
5B                # pop_ebx               # =
8903 #  mov_[ebx],eax
58                # pop_eax               # ;
 ## stdlib.c 369
:___sys_printf_else22  #:___sys_printf_else22 # no else
50               #  push_eax              # s (local)
8D85 30000000 # lea_eax,[ebp+DWORD] %48
50               #  push_eax              # buffer (local)
8D85 18000000 # lea_eax,[ebp+DWORD] %24
50               #  push_eax              # b (local)
8D85 48000000 # lea_eax,[ebp+DWORD] %72
8B00          # mov_eax,[eax]         # ?
5B                # pop_ebx               # +
01D8 #  add_eax,ebx
5B                # pop_ebx               # =
8903 #  mov_[ebx],eax
58                # pop_eax               # ;
 ## stdlib.c 370
50               #  push_eax              # args (local)
8D85 04000000 # lea_eax,[ebp+DWORD] %4
50               #  push_eax              # $ (dup)
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # 4
B8 04000000 #   mov_eax, %4
5B                # pop_ebx               # +
01D8 #  add_eax,ebx
5B                # pop_ebx               # =
8903 #  mov_[ebx],eax
50               #  push_eax              # 4
B8 04000000 #   mov_eax, %4
5B                # pop_ebx               # -
29C3 #  sub_ebx,eax
89D8 #  mov_eax,ebx
58                # pop_eax               # ;
E9 %___sys_printf_else_end16 #  jmp %___sys_printf_else_end16
:___sys_printf_else16 #:___sys_printf_else16
 ## stdlib.c 372
50               #  push_eax              # format (local)
8D85 08000000 # lea_eax,[ebp+DWORD] %8
8B00          # mov_eax,[eax]         # ?
8A00           #    mov_al,[eax]          # ?1
0FB6C0 #    movzx_eax,al
0FBEC0           #  movsx_eax,al          # char
50               #  push_eax              # 117
B8 75000000 #   mov_eax, %117
5B                # pop_ebx               # ==
39C3 #  cmp_eax_ebx
0F94C0 #    sete_al
0FB6C0 #    movzx_eax,al
85C0           #    test_eax,eax          # if
58 #    pop_eax
0F84 %___sys_printf_else30 #    je %___sys_printf_else30
 ## stdlib.c 373
50               #  push_eax              # v (local)
8D85 44000000 # lea_eax,[ebp+DWORD] %68
50               #  push_eax              # args (local)
8D85 04000000 # lea_eax,[ebp+DWORD] %4
50               #  push_eax              # $ (dup)
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # 4
B8 04000000 #   mov_eax, %4
5B                # pop_ebx               # +
01D8 #  add_eax,ebx
5B                # pop_ebx               # =
8903 #  mov_[ebx],eax
50               #  push_eax              # 4
B8 04000000 #   mov_eax, %4
5B                # pop_ebx               # -
29C3 #  sub_ebx,eax
89D8 #  mov_eax,ebx
8B00          # mov_eax,[eax]         # ?
5B                # pop_ebx               # =
8903 #  mov_[ebx],eax
58                # pop_eax               # ;
 ## stdlib.c 375
50               #  push_eax              # v (local)
8D85 44000000 # lea_eax,[ebp+DWORD] %68
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # 0
B8 00000000 #   mov_eax, %0
5B                # pop_ebx               # ==
39C3 #  cmp_eax_ebx
0F94C0 #    sete_al
0FB6C0 #    movzx_eax,al
85C0           #    test_eax,eax          # if
58 #    pop_eax
0F84 %___sys_printf_else31 #    je %___sys_printf_else31
 ## stdlib.c 376
50               #  push_eax              # buffer (local)
8D85 18000000 # lea_eax,[ebp+DWORD] %24
50               #  push_eax              # 0
B8 00000000 #   mov_eax, %0
5B                # pop_ebx               # +
01D8 #  add_eax,ebx
50               #  push_eax              # 48
B8 30000000 #   mov_eax, %48
5B                # pop_ebx               # =1
8803 #  mov_[ebx],al
58                # pop_eax               # ;
E9 %___sys_printf_else_end31 #  jmp %___sys_printf_else_end31
:___sys_printf_else31 #:___sys_printf_else31
 ## stdlib.c 378
 ## stdlib.c 379
50               #  push_eax              # l (local)
8D85 2C000000 # lea_eax,[ebp+DWORD] %44
50               #  push_eax              # 20
B8 14000000 #   mov_eax, %20
5B                # pop_ebx               # =
8903 #  mov_[ebx],eax
58                # pop_eax               # ;
 ## stdlib.c 380
:___sys_printf_loop32 #:___sys_printf_loop32
50               #  push_eax              # v (local)
8D85 44000000 # lea_eax,[ebp+DWORD] %68
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # 0
B8 00000000 #   mov_eax, %0
5B                # pop_ebx               # >
39C3 #  cmp_eax_ebx
0F97C0 #    seta_al
0FB6C0 #    movzx_eax,al
85C0           #    test_eax,eax          # !
0F94C0 #    sete_al
0FB6C0 #    movzx_eax,al
85C0           #    test_eax,eax          # if
58 #    pop_eax
0F84 %___sys_printf_else33 #    je %___sys_printf_else33
E9 %___sys_printf_loop_end32 #  jmp %___sys_printf_loop_end32
 ## stdlib.c 381
:___sys_printf_else33  #:___sys_printf_else33 # no else
50               #  push_eax              # buffer (local)
8D85 18000000 # lea_eax,[ebp+DWORD] %24
50               #  push_eax              # l (local)
8D85 2C000000 # lea_eax,[ebp+DWORD] %44
50               #  push_eax              # $ (dup)
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # 1
B8 01000000 #   mov_eax, %1
5B                # pop_ebx               # -
29C3 #  sub_ebx,eax
89D8 #  mov_eax,ebx
5B                # pop_ebx               # =
8903 #  mov_[ebx],eax
5B                # pop_ebx               # +
01D8 #  add_eax,ebx
50               #  push_eax              # 48
B8 30000000 #   mov_eax, %48
50               #  push_eax              # v (local)
8D85 44000000 # lea_eax,[ebp+DWORD] %68
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # 10
B8 0A000000 #   mov_eax, %10
89C3            #   mov_ebx,eax           # %
58 #    pop_eax
BA 00000000 #   mov_edx, %0
F7F3 #  div_ebx
89D0 #  mov_eax,edx
5B                # pop_ebx               # +
01D8 #  add_eax,ebx
5B                # pop_ebx               # =1
8803 #  mov_[ebx],al
58                # pop_eax               # ;
50               #  push_eax              # v (local)
8D85 44000000 # lea_eax,[ebp+DWORD] %68
50               #  push_eax              # v (local)
8D85 44000000 # lea_eax,[ebp+DWORD] %68
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # 10
B8 0A000000 #   mov_eax, %10
89C3            #   mov_ebx,eax           # /
58 #    pop_eax
BA 00000000 #   mov_edx, %0
F7F3 #  div_ebx
5B                # pop_ebx               # =
8903 #  mov_[ebx],eax
58                # pop_eax               # ;
E9 %___sys_printf_loop32 #  jmp %___sys_printf_loop32
:___sys_printf_loop_end32 #:___sys_printf_loop_end32
 ## stdlib.c 382
50               #  push_eax              # s (local)
8D85 30000000 # lea_eax,[ebp+DWORD] %48
50               #  push_eax              # buffer (local)
8D85 18000000 # lea_eax,[ebp+DWORD] %24
50               #  push_eax              # l (local)
8D85 2C000000 # lea_eax,[ebp+DWORD] %44
8B00          # mov_eax,[eax]         # ?
5B                # pop_ebx               # +
01D8 #  add_eax,ebx
5B                # pop_ebx               # =
8903 #  mov_[ebx],eax
58                # pop_eax               # ;
 ## stdlib.c 383
50               #  push_eax              # l (local)
8D85 2C000000 # lea_eax,[ebp+DWORD] %44
50               #  push_eax              # 20
B8 14000000 #   mov_eax, %20
50               #  push_eax              # l (local)
8D85 2C000000 # lea_eax,[ebp+DWORD] %44
8B00          # mov_eax,[eax]         # ?
5B                # pop_ebx               # -
29C3 #  sub_ebx,eax
89D8 #  mov_eax,ebx
5B                # pop_ebx               # =
8903 #  mov_[ebx],eax
58                # pop_eax               # ;
:___sys_printf_else_end31 #:___sys_printf_else_end31
E9 %___sys_printf_else_end30 #  jmp %___sys_printf_else_end30
:___sys_printf_else30 #:___sys_printf_else30
 ## stdlib.c 386
50               #  push_eax              # format (local)
8D85 08000000 # lea_eax,[ebp+DWORD] %8
8B00          # mov_eax,[eax]         # ?
8A00           #    mov_al,[eax]          # ?1
0FB6C0 #    movzx_eax,al
0FBEC0           #  movsx_eax,al          # char
50               #  push_eax              # 120
B8 78000000 #   mov_eax, %120
5B                # pop_ebx               # ==
39C3 #  cmp_eax_ebx
0F94C0 #    sete_al
0FB6C0 #    movzx_eax,al
85C0           #    test_eax,eax          # ||
0F85 %___sys_printf_or_end34 #  jne %___sys_printf_or_end34
58 #    pop_eax
50               #  push_eax              # format (local)
8D85 08000000 # lea_eax,[ebp+DWORD] %8
8B00          # mov_eax,[eax]         # ?
8A00           #    mov_al,[eax]          # ?1
0FB6C0 #    movzx_eax,al
0FBEC0           #  movsx_eax,al          # char
50               #  push_eax              # 112
B8 70000000 #   mov_eax, %112
5B                # pop_ebx               # ==
39C3 #  cmp_eax_ebx
0F94C0 #    sete_al
0FB6C0 #    movzx_eax,al
:___sys_printf_or_end34 #:___sys_printf_or_end34
85C0           #    test_eax,eax          # if
58 #    pop_eax
0F84 %___sys_printf_else35 #    je %___sys_printf_else35
 ## stdlib.c 387
50               #  push_eax              # v (local)
8D85 44000000 # lea_eax,[ebp+DWORD] %68
50               #  push_eax              # args (local)
8D85 04000000 # lea_eax,[ebp+DWORD] %4
50               #  push_eax              # $ (dup)
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # 4
B8 04000000 #   mov_eax, %4
5B                # pop_ebx               # +
01D8 #  add_eax,ebx
5B                # pop_ebx               # =
8903 #  mov_[ebx],eax
50               #  push_eax              # 4
B8 04000000 #   mov_eax, %4
5B                # pop_ebx               # -
29C3 #  sub_ebx,eax
89D8 #  mov_eax,ebx
8B00          # mov_eax,[eax]         # ?
5B                # pop_ebx               # =
8903 #  mov_[ebx],eax
58                # pop_eax               # ;
 ## stdlib.c 389
50               #  push_eax              # v (local)
8D85 44000000 # lea_eax,[ebp+DWORD] %68
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # 0
B8 00000000 #   mov_eax, %0
5B                # pop_ebx               # ==
39C3 #  cmp_eax_ebx
0F94C0 #    sete_al
0FB6C0 #    movzx_eax,al
85C0           #    test_eax,eax          # if
58 #    pop_eax
0F84 %___sys_printf_else36 #    je %___sys_printf_else36
 ## stdlib.c 390
50               #  push_eax              # buffer (local)
8D85 18000000 # lea_eax,[ebp+DWORD] %24
50               #  push_eax              # 0
B8 00000000 #   mov_eax, %0
5B                # pop_ebx               # +
01D8 #  add_eax,ebx
50               #  push_eax              # 48
B8 30000000 #   mov_eax, %48
5B                # pop_ebx               # =1
8803 #  mov_[ebx],al
58                # pop_eax               # ;
E9 %___sys_printf_else_end36 #  jmp %___sys_printf_else_end36
:___sys_printf_else36 #:___sys_printf_else36
 ## stdlib.c 392
 ## stdlib.c 393
50               #  push_eax              # l (local)
8D85 2C000000 # lea_eax,[ebp+DWORD] %44
50               #  push_eax              # 20
B8 14000000 #   mov_eax, %20
5B                # pop_ebx               # =
8903 #  mov_[ebx],eax
58                # pop_eax               # ;
 ## stdlib.c 394
:___sys_printf_loop37 #:___sys_printf_loop37
50               #  push_eax              # v (local)
8D85 44000000 # lea_eax,[ebp+DWORD] %68
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # 0
B8 00000000 #   mov_eax, %0
5B                # pop_ebx               # !=
39C3 #  cmp_eax_ebx
0F95C0 #    setne_al
0FB6C0 #    movzx_eax,al
85C0           #    test_eax,eax          # !
0F94C0 #    sete_al
0FB6C0 #    movzx_eax,al
85C0           #    test_eax,eax          # if
58 #    pop_eax
0F84 %___sys_printf_else38 #    je %___sys_printf_else38
E9 %___sys_printf_loop_end37 #  jmp %___sys_printf_loop_end37
 ## stdlib.c 395
:___sys_printf_else38  #:___sys_printf_else38 # no else
50               #  push_eax              # buffer (local)
8D85 18000000 # lea_eax,[ebp+DWORD] %24
50               #  push_eax              # l (local)
8D85 2C000000 # lea_eax,[ebp+DWORD] %44
50               #  push_eax              # $ (dup)
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # 1
B8 01000000 #   mov_eax, %1
5B                # pop_ebx               # -
29C3 #  sub_ebx,eax
89D8 #  mov_eax,ebx
5B                # pop_ebx               # =
8903 #  mov_[ebx],eax
5B                # pop_ebx               # +
01D8 #  add_eax,ebx
50               #  push_eax              # v (local)
8D85 44000000 # lea_eax,[ebp+DWORD] %68
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # 15
B8 0F000000 #   mov_eax, %15
5B                # pop_ebx               # &
21D8 #  and_eax,ebx
50               #  push_eax              # 10
B8 0A000000 #   mov_eax, %10
5B                # pop_ebx               # <
39C3 #  cmp_eax_ebx
0F92C0 #    setb_al
0FB6C0 #    movzx_eax,al
85C0           #    test_eax,eax          # if
58 #    pop_eax
0F84 %___sys_printf_else39 #    je %___sys_printf_else39
50               #  push_eax              # 48
B8 30000000 #   mov_eax, %48
E9 %___sys_printf_else_end39 #  jmp %___sys_printf_else_end39
:___sys_printf_else39 #:___sys_printf_else39
50               #  push_eax              # 97
B8 61000000 #   mov_eax, %97
50               #  push_eax              # 10
B8 0A000000 #   mov_eax, %10
5B                # pop_ebx               # -
29C3 #  sub_ebx,eax
89D8 #  mov_eax,ebx
:___sys_printf_else_end39 #:___sys_printf_else_end39
50               #  push_eax              # v (local)
8D85 44000000 # lea_eax,[ebp+DWORD] %68
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # 15
B8 0F000000 #   mov_eax, %15
5B                # pop_ebx               # &
21D8 #  and_eax,ebx
5B                # pop_ebx               # +
01D8 #  add_eax,ebx
5B                # pop_ebx               # =1
8803 #  mov_[ebx],al
58                # pop_eax               # ;
50               #  push_eax              # v (local)
8D85 44000000 # lea_eax,[ebp+DWORD] %68
50               #  push_eax              # $ (dup)
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # 4
B8 04000000 #   mov_eax, %4
89C1            #   mov_ecx,eax           # >>
58 #    pop_eax
D3E8 #  shr_eax,cl
5B                # pop_ebx               # =
8903 #  mov_[ebx],eax
58                # pop_eax               # ;
E9 %___sys_printf_loop37 #  jmp %___sys_printf_loop37
:___sys_printf_loop_end37 #:___sys_printf_loop_end37
 ## stdlib.c 396
50               #  push_eax              # s (local)
8D85 30000000 # lea_eax,[ebp+DWORD] %48
50               #  push_eax              # buffer (local)
8D85 18000000 # lea_eax,[ebp+DWORD] %24
50               #  push_eax              # l (local)
8D85 2C000000 # lea_eax,[ebp+DWORD] %44
8B00          # mov_eax,[eax]         # ?
5B                # pop_ebx               # +
01D8 #  add_eax,ebx
5B                # pop_ebx               # =
8903 #  mov_[ebx],eax
58                # pop_eax               # ;
 ## stdlib.c 397
50               #  push_eax              # l (local)
8D85 2C000000 # lea_eax,[ebp+DWORD] %44
50               #  push_eax              # 20
B8 14000000 #   mov_eax, %20
50               #  push_eax              # l (local)
8D85 2C000000 # lea_eax,[ebp+DWORD] %44
8B00          # mov_eax,[eax]         # ?
5B                # pop_ebx               # -
29C3 #  sub_ebx,eax
89D8 #  mov_eax,ebx
5B                # pop_ebx               # =
8903 #  mov_[ebx],eax
58                # pop_eax               # ;
:___sys_printf_else_end36 #:___sys_printf_else_end36
E9 %___sys_printf_else_end35 #  jmp %___sys_printf_else_end35
:___sys_printf_else35 #:___sys_printf_else35
 ## stdlib.c 400
50               #  push_eax              # format (local)
8D85 08000000 # lea_eax,[ebp+DWORD] %8
8B00          # mov_eax,[eax]         # ?
8A00           #    mov_al,[eax]          # ?1
0FB6C0 #    movzx_eax,al
0FBEC0           #  movsx_eax,al          # char
50               #  push_eax              # 99
B8 63000000 #   mov_eax, %99
5B                # pop_ebx               # ==
39C3 #  cmp_eax_ebx
0F94C0 #    sete_al
0FB6C0 #    movzx_eax,al
85C0           #    test_eax,eax          # if
58 #    pop_eax
0F84 %___sys_printf_else40 #    je %___sys_printf_else40
 ## stdlib.c 401
 ## stdlib.c 402
50               #  push_eax              # buffer (local)
8D85 18000000 # lea_eax,[ebp+DWORD] %24
50               #  push_eax              # 0
B8 00000000 #   mov_eax, %0
5B                # pop_ebx               # +
01D8 #  add_eax,ebx
50               #  push_eax              # args (local)
8D85 04000000 # lea_eax,[ebp+DWORD] %4
50               #  push_eax              # $ (dup)
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # 4
B8 04000000 #   mov_eax, %4
5B                # pop_ebx               # +
01D8 #  add_eax,ebx
5B                # pop_ebx               # =
8903 #  mov_[ebx],eax
50               #  push_eax              # 4
B8 04000000 #   mov_eax, %4
5B                # pop_ebx               # -
29C3 #  sub_ebx,eax
89D8 #  mov_eax,ebx
8B00          # mov_eax,[eax]         # ?
5B                # pop_ebx               # =1
8803 #  mov_[ebx],al
58                # pop_eax               # ;
E9 %___sys_printf_else_end40 #  jmp %___sys_printf_else_end40
:___sys_printf_else40 #:___sys_printf_else40
 ## stdlib.c 405
 ## stdlib.c 406
50               #  push_eax              # '__sys_printf %'
B8 &string_0 #  mov_eax, &string_0
50               #  push_eax              # stderr (global)
B8 &g_stderr #  mov_eax, &g_stderr
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # fputs (function)
B8 &f_fputs #   mov_eax, &f_fputs
81C5 44000000          #    add_ebp, %68         # ()
FFD0 #  call_eax
81ED 44000000 # sub_ebp, %68
58                # pop_eax               # ;
 ## stdlib.c 407
50               #  push_eax              # format (local)
8D85 08000000 # lea_eax,[ebp+DWORD] %8
8B00          # mov_eax,[eax]         # ?
8A00           #    mov_al,[eax]          # ?1
0FB6C0 #    movzx_eax,al
0FBEC0           #  movsx_eax,al          # char
50               #  push_eax              # stderr (global)
B8 &g_stderr #  mov_eax, &g_stderr
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # fputc (function)
B8 &f_fputc #   mov_eax, &f_fputc
81C5 44000000          #    add_ebp, %68         # ()
FFD0 #  call_eax
81ED 44000000 # sub_ebp, %68
58                # pop_eax               # ;
 ## stdlib.c 408
50               #  push_eax              # ' '
B8 &string_1 #  mov_eax, &string_1
50               #  push_eax              # stderr (global)
B8 &g_stderr #  mov_eax, &g_stderr
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # fputs (function)
B8 &f_fputs #   mov_eax, &f_fputs
81C5 44000000          #    add_ebp, %68         # ()
FFD0 #  call_eax
81ED 44000000 # sub_ebp, %68
58                # pop_eax               # ;
 ## stdlib.c 409
50               #  push_eax              # org_format (local)
8D85 38000000 # lea_eax,[ebp+DWORD] %56
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # stderr (global)
B8 &g_stderr #  mov_eax, &g_stderr
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # fputs (function)
B8 &f_fputs #   mov_eax, &f_fputs
81C5 44000000          #    add_ebp, %68         # ()
FFD0 #  call_eax
81ED 44000000 # sub_ebp, %68
58                # pop_eax               # ;
 ## stdlib.c 410
50               #  push_eax              # '\n'
B8 &string_2 #  mov_eax, &string_2
50               #  push_eax              # stderr (global)
B8 &g_stderr #  mov_eax, &g_stderr
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # fputs (function)
B8 &f_fputs #   mov_eax, &f_fputs
81C5 44000000          #    add_ebp, %68         # ()
FFD0 #  call_eax
81ED 44000000 # sub_ebp, %68
58                # pop_eax               # ;
 ## stdlib.c 411
50               #  push_eax              # 1
B8 01000000 #   mov_eax, %1
50               #  push_eax              # exit (function)
B8 &f_exit #    mov_eax, &f_exit
81C5 44000000          #    add_ebp, %68         # ()
FFD0 #  call_eax
81ED 44000000 # sub_ebp, %68
58                # pop_eax               # ;
:___sys_printf_else_end40 #:___sys_printf_else_end40
:___sys_printf_else_end35 #:___sys_printf_else_end35
:___sys_printf_else_end30 #:___sys_printf_else_end30
:___sys_printf_else_end16 #:___sys_printf_else_end16
:___sys_printf_else_end15 #:___sys_printf_else_end15
:___sys_printf_else_end10 #:___sys_printf_else_end10
E9 %___sys_printf_else_end9 #   jmp %___sys_printf_else_end9
:___sys_printf_else9 #:___sys_printf_else9
 ## stdlib.c 416
 ## stdlib.c 417
50               #  push_eax              # buffer (local)
8D85 18000000 # lea_eax,[ebp+DWORD] %24
50               #  push_eax              # 0
B8 00000000 #   mov_eax, %0
5B                # pop_ebx               # +
01D8 #  add_eax,ebx
50               #  push_eax              # format (local)
8D85 08000000 # lea_eax,[ebp+DWORD] %8
8B00          # mov_eax,[eax]         # ?
8A00           #    mov_al,[eax]          # ?1
0FB6C0 #    movzx_eax,al
0FBEC0           #  movsx_eax,al          # char
5B                # pop_ebx               # =1
8803 #  mov_[ebx],al
58                # pop_eax               # ;
 ## stdlib.c 418
50               #  push_eax              # s (local)
8D85 30000000 # lea_eax,[ebp+DWORD] %48
50               #  push_eax              # buffer (local)
8D85 18000000 # lea_eax,[ebp+DWORD] %24
5B                # pop_ebx               # =
8903 #  mov_[ebx],eax
58                # pop_eax               # ;
 ## stdlib.c 419
50               #  push_eax              # l (local)
8D85 2C000000 # lea_eax,[ebp+DWORD] %44
50               #  push_eax              # 1
B8 01000000 #   mov_eax, %1
5B                # pop_ebx               # =
8903 #  mov_[ebx],eax
58                # pop_eax               # ;
:___sys_printf_else_end9 #:___sys_printf_else_end9
 ## stdlib.c 421
50               #  push_eax              # format (local)
8D85 08000000 # lea_eax,[ebp+DWORD] %8
50               #  push_eax              # $ (dup)
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # 1
B8 01000000 #   mov_eax, %1
5B                # pop_ebx               # +
01D8 #  add_eax,ebx
5B                # pop_ebx               # =
8903 #  mov_[ebx],eax
50               #  push_eax              # 1
B8 01000000 #   mov_eax, %1
5B                # pop_ebx               # -
29C3 #  sub_ebx,eax
89D8 #  mov_eax,ebx
58                # pop_eax               # ;
:___sys_printf_else7  #:___sys_printf_else7 # no else
E9 %___sys_printf_loop1 #   jmp %___sys_printf_loop1
:___sys_printf_loop_end1 #:___sys_printf_loop_end1
 ## stdlib.c 424
50               #  push_eax              # len (local)
8D85 0C000000 # lea_eax,[ebp+DWORD] %12
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # 0
B8 00000000 #   mov_eax, %0
5B                # pop_ebx               # !=
39C3 #  cmp_eax_ebx
0F95C0 #    setne_al
0FB6C0 #    movzx_eax,al
85C0           #    test_eax,eax          # &&
0F84 %___sys_printf_and_end41 # je %___sys_printf_and_end41
58 #    pop_eax
50               #  push_eax              # trg (local)
8D85 10000000 # lea_eax,[ebp+DWORD] %16
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # 0
B8 00000000 #   mov_eax, %0
5B                # pop_ebx               # !=
39C3 #  cmp_eax_ebx
0F95C0 #    setne_al
0FB6C0 #    movzx_eax,al
:___sys_printf_and_end41 #:___sys_printf_and_end41
85C0           #    test_eax,eax          # if
58 #    pop_eax
0F84 %___sys_printf_else42 #    je %___sys_printf_else42
 ## stdlib.c 425
50               #  push_eax              # trg (local)
8D85 10000000 # lea_eax,[ebp+DWORD] %16
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # 0
B8 00000000 #   mov_eax, %0
5B                # pop_ebx               # =1
8803 #  mov_[ebx],al
58                # pop_eax               # ;
 ## stdlib.c 426
:___sys_printf_else42  #:___sys_printf_else42 # no else
50               #  push_eax              # cnt (local)
8D85 34000000 # lea_eax,[ebp+DWORD] %52
8B00          # mov_eax,[eax]         # ?
8B5D00          #   mov_ebx,[ebp]         # return
53 #    push_ebx
C3 #    ret
50               #  push_eax              # 0
B8 00000000 #   mov_eax, %0
8B5D00          #   mov_ebx,[ebp]         # return
53 #    push_ebx
C3 #    ret
 #
:f_va_end #:f_va_end
58 #    pop_eax
894500 #    mov_[ebp],eax
58 #    pop_eax
50               #  push_eax              # ap (local)
8D85 04000000 # lea_eax,[ebp+DWORD] %4
5B                # pop_ebx               # =:
8918 #  mov_[eax],ebx
58 #    pop_eax
50               #  push_eax              # 0
B8 00000000 #   mov_eax, %0
8B5D00          #   mov_ebx,[ebp]         # return
53 #    push_ebx
C3 #    ret
 #
:f_fprintf #:f_fprintf
58 #    pop_eax
894500 #    mov_[ebp],eax
58 #    pop_eax
50               #  push_eax              # __var_args (local)
8D85 04000000 # lea_eax,[ebp+DWORD] %4
5B                # pop_ebx               # =:
8918 #  mov_[eax],ebx
58 #    pop_eax
50               #  push_eax              # format (local)
8D85 08000000 # lea_eax,[ebp+DWORD] %8
5B                # pop_ebx               # =:
8918 #  mov_[eax],ebx
58 #    pop_eax
50               #  push_eax              # stream (local)
8D85 0C000000 # lea_eax,[ebp+DWORD] %12
5B                # pop_ebx               # =:
8918 #  mov_[eax],ebx
58 #    pop_eax
 ## stdlib.c 435
50               #  push_eax              # ap (local)
8D85 10000000 # lea_eax,[ebp+DWORD] %16
50               #  push_eax              # __var_args (local)
8D85 04000000 # lea_eax,[ebp+DWORD] %4
8B00          # mov_eax,[eax]         # ?
5B                # pop_ebx               # =
8903 #  mov_[ebx],eax
58                # pop_eax               # ;
 ## stdlib.c 436
50               #  push_eax              # stream (local)
8D85 0C000000 # lea_eax,[ebp+DWORD] %12
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # 0
B8 00000000 #   mov_eax, %0
50               #  push_eax              # 4294967295
B8 FFFFFFFF #   mov_eax, %4294967295
50               #  push_eax              # format (local)
8D85 08000000 # lea_eax,[ebp+DWORD] %8
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # ap (local)
8D85 10000000 # lea_eax,[ebp+DWORD] %16
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # __sys_printf (function)
B8 &f___sys_printf #    mov_eax, &f___sys_printf
81C5 14000000          #    add_ebp, %20         # ()
FFD0 #  call_eax
81ED 14000000 # sub_ebp, %20
8B5D00          #   mov_ebx,[ebp]         # return
53 #    push_ebx
C3 #    ret
50               #  push_eax              # 0
B8 00000000 #   mov_eax, %0
8B5D00          #   mov_ebx,[ebp]         # return
53 #    push_ebx
C3 #    ret
 #
:f_printf #:f_printf
58 #    pop_eax
894500 #    mov_[ebp],eax
58 #    pop_eax
50               #  push_eax              # __var_args (local)
8D85 04000000 # lea_eax,[ebp+DWORD] %4
5B                # pop_ebx               # =:
8918 #  mov_[eax],ebx
58 #    pop_eax
50               #  push_eax              # format (local)
8D85 08000000 # lea_eax,[ebp+DWORD] %8
5B                # pop_ebx               # =:
8918 #  mov_[eax],ebx
58 #    pop_eax
 ## stdlib.c 442
50               #  push_eax              # ap (local)
8D85 0C000000 # lea_eax,[ebp+DWORD] %12
50               #  push_eax              # __var_args (local)
8D85 04000000 # lea_eax,[ebp+DWORD] %4
8B00          # mov_eax,[eax]         # ?
5B                # pop_ebx               # =
8903 #  mov_[ebx],eax
58                # pop_eax               # ;
 ## stdlib.c 443
50               #  push_eax              # stdout (global)
B8 &g_stdout #  mov_eax, &g_stdout
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # 0
B8 00000000 #   mov_eax, %0
50               #  push_eax              # 4294967295
B8 FFFFFFFF #   mov_eax, %4294967295
50               #  push_eax              # format (local)
8D85 08000000 # lea_eax,[ebp+DWORD] %8
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # ap (local)
8D85 0C000000 # lea_eax,[ebp+DWORD] %12
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # __sys_printf (function)
B8 &f___sys_printf #    mov_eax, &f___sys_printf
81C5 10000000          #    add_ebp, %16         # ()
FFD0 #  call_eax
81ED 10000000 # sub_ebp, %16
8B5D00          #   mov_ebx,[ebp]         # return
53 #    push_ebx
C3 #    ret
50               #  push_eax              # 0
B8 00000000 #   mov_eax, %0
8B5D00          #   mov_ebx,[ebp]         # return
53 #    push_ebx
C3 #    ret
 #
:f_sprintf #:f_sprintf
58 #    pop_eax
894500 #    mov_[ebp],eax
58 #    pop_eax
50               #  push_eax              # __var_args (local)
8D85 04000000 # lea_eax,[ebp+DWORD] %4
5B                # pop_ebx               # =:
8918 #  mov_[eax],ebx
58 #    pop_eax
50               #  push_eax              # format (local)
8D85 08000000 # lea_eax,[ebp+DWORD] %8
5B                # pop_ebx               # =:
8918 #  mov_[eax],ebx
58 #    pop_eax
50               #  push_eax              # str (local)
8D85 0C000000 # lea_eax,[ebp+DWORD] %12
5B                # pop_ebx               # =:
8918 #  mov_[eax],ebx
58 #    pop_eax
 ## stdlib.c 449
50               #  push_eax              # ap (local)
8D85 10000000 # lea_eax,[ebp+DWORD] %16
50               #  push_eax              # __var_args (local)
8D85 04000000 # lea_eax,[ebp+DWORD] %4
8B00          # mov_eax,[eax]         # ?
5B                # pop_ebx               # =
8903 #  mov_[ebx],eax
58                # pop_eax               # ;
 ## stdlib.c 450
50               #  push_eax              # 0
B8 00000000 #   mov_eax, %0
50               #  push_eax              # str (local)
8D85 0C000000 # lea_eax,[ebp+DWORD] %12
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # 4294967295
B8 FFFFFFFF #   mov_eax, %4294967295
50               #  push_eax              # format (local)
8D85 08000000 # lea_eax,[ebp+DWORD] %8
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # ap (local)
8D85 10000000 # lea_eax,[ebp+DWORD] %16
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # __sys_printf (function)
B8 &f___sys_printf #    mov_eax, &f___sys_printf
81C5 14000000          #    add_ebp, %20         # ()
FFD0 #  call_eax
81ED 14000000 # sub_ebp, %20
8B5D00          #   mov_ebx,[ebp]         # return
53 #    push_ebx
C3 #    ret
50               #  push_eax              # 0
B8 00000000 #   mov_eax, %0
8B5D00          #   mov_ebx,[ebp]         # return
53 #    push_ebx
C3 #    ret
 #
:f_snprintf #:f_snprintf
58 #    pop_eax
894500 #    mov_[ebp],eax
58 #    pop_eax
50               #  push_eax              # __var_args (local)
8D85 04000000 # lea_eax,[ebp+DWORD] %4
5B                # pop_ebx               # =:
8918 #  mov_[eax],ebx
58 #    pop_eax
50               #  push_eax              # format (local)
8D85 08000000 # lea_eax,[ebp+DWORD] %8
5B                # pop_ebx               # =:
8918 #  mov_[eax],ebx
58 #    pop_eax
50               #  push_eax              # size (local)
8D85 0C000000 # lea_eax,[ebp+DWORD] %12
5B                # pop_ebx               # =:
8918 #  mov_[eax],ebx
58 #    pop_eax
50               #  push_eax              # str (local)
8D85 10000000 # lea_eax,[ebp+DWORD] %16
5B                # pop_ebx               # =:
8918 #  mov_[eax],ebx
58 #    pop_eax
 ## stdlib.c 455
50               #  push_eax              # ap (local)
8D85 14000000 # lea_eax,[ebp+DWORD] %20
50               #  push_eax              # __var_args (local)
8D85 04000000 # lea_eax,[ebp+DWORD] %4
8B00          # mov_eax,[eax]         # ?
5B                # pop_ebx               # =
8903 #  mov_[ebx],eax
58                # pop_eax               # ;
 ## stdlib.c 456
50               #  push_eax              # 0
B8 00000000 #   mov_eax, %0
50               #  push_eax              # str (local)
8D85 10000000 # lea_eax,[ebp+DWORD] %16
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # size (local)
8D85 0C000000 # lea_eax,[ebp+DWORD] %12
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # format (local)
8D85 08000000 # lea_eax,[ebp+DWORD] %8
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # ap (local)
8D85 14000000 # lea_eax,[ebp+DWORD] %20
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # __sys_printf (function)
B8 &f___sys_printf #    mov_eax, &f___sys_printf
81C5 18000000          #    add_ebp, %24         # ()
FFD0 #  call_eax
81ED 18000000 # sub_ebp, %24
8B5D00          #   mov_ebx,[ebp]         # return
53 #    push_ebx
C3 #    ret
50               #  push_eax              # 0
B8 00000000 #   mov_eax, %0
8B5D00          #   mov_ebx,[ebp]         # return
53 #    push_ebx
C3 #    ret
 #
:f_vsnprintf #:f_vsnprintf
58 #    pop_eax
894500 #    mov_[ebp],eax
58 #    pop_eax
50               #  push_eax              # ap (local)
8D85 04000000 # lea_eax,[ebp+DWORD] %4
5B                # pop_ebx               # =:
8918 #  mov_[eax],ebx
58 #    pop_eax
50               #  push_eax              # format (local)
8D85 08000000 # lea_eax,[ebp+DWORD] %8
5B                # pop_ebx               # =:
8918 #  mov_[eax],ebx
58 #    pop_eax
50               #  push_eax              # size (local)
8D85 0C000000 # lea_eax,[ebp+DWORD] %12
5B                # pop_ebx               # =:
8918 #  mov_[eax],ebx
58 #    pop_eax
50               #  push_eax              # str (local)
8D85 10000000 # lea_eax,[ebp+DWORD] %16
5B                # pop_ebx               # =:
8918 #  mov_[eax],ebx
58 #    pop_eax
 ## stdlib.c 461
50               #  push_eax              # 0
B8 00000000 #   mov_eax, %0
50               #  push_eax              # str (local)
8D85 10000000 # lea_eax,[ebp+DWORD] %16
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # size (local)
8D85 0C000000 # lea_eax,[ebp+DWORD] %12
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # format (local)
8D85 08000000 # lea_eax,[ebp+DWORD] %8
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # ap (local)
8D85 04000000 # lea_eax,[ebp+DWORD] %4
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # __sys_printf (function)
B8 &f___sys_printf #    mov_eax, &f___sys_printf
81C5 14000000          #    add_ebp, %20         # ()
FFD0 #  call_eax
81ED 14000000 # sub_ebp, %20
8B5D00          #   mov_ebx,[ebp]         # return
53 #    push_ebx
C3 #    ret
50               #  push_eax              # 0
B8 00000000 #   mov_eax, %0
8B5D00          #   mov_ebx,[ebp]         # return
53 #    push_ebx
C3 #    ret
 #
:f_open #:f_open
58 #    pop_eax
894500 #    mov_[ebp],eax
58 #    pop_eax
50               #  push_eax              # __var_args (local)
8D85 04000000 # lea_eax,[ebp+DWORD] %4
5B                # pop_ebx               # =:
8918 #  mov_[eax],ebx
58 #    pop_eax
50               #  push_eax              # flag (local)
8D85 08000000 # lea_eax,[ebp+DWORD] %8
5B                # pop_ebx               # =:
8918 #  mov_[eax],ebx
58 #    pop_eax
50               #  push_eax              # filename (local)
8D85 0C000000 # lea_eax,[ebp+DWORD] %12
5B                # pop_ebx               # =:
8918 #  mov_[eax],ebx
58 #    pop_eax
50               #  push_eax              # mode (local)
8D85 10000000 # lea_eax,[ebp+DWORD] %16
50               #  push_eax              # 0
B8 00000000 #   mov_eax, %0
5B                # pop_ebx               # =
8903 #  mov_[ebx],eax
58                # pop_eax               # ;
 ## stdlib.c 477
50               #  push_eax              # flag (local)
8D85 08000000 # lea_eax,[ebp+DWORD] %8
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # 1
B8 01000000 #   mov_eax, %1
5B                # pop_ebx               # &
21D8 #  and_eax,ebx
50               #  push_eax              # 0
B8 00000000 #   mov_eax, %0
5B                # pop_ebx               # !=
39C3 #  cmp_eax_ebx
0F95C0 #    setne_al
0FB6C0 #    movzx_eax,al
85C0           #    test_eax,eax          # if
58 #    pop_eax
0F84 %_open_else1 # je %_open_else1
 ## stdlib.c 478
 ## stdlib.c 480
50               #  push_eax              # ap (local)
8D85 14000000 # lea_eax,[ebp+DWORD] %20
50               #  push_eax              # __var_args (local)
8D85 04000000 # lea_eax,[ebp+DWORD] %4
8B00          # mov_eax,[eax]         # ?
5B                # pop_ebx               # =
8903 #  mov_[ebx],eax
58                # pop_eax               # ;
 ## stdlib.c 481
50               #  push_eax              # mode (local)
8D85 10000000 # lea_eax,[ebp+DWORD] %16
50               #  push_eax              # ap (local)
8D85 14000000 # lea_eax,[ebp+DWORD] %20
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # 0
B8 00000000 #   mov_eax, %0
50               #  push_eax              # 4
B8 04000000 #   mov_eax, %4
5B                # pop_ebx               # *
F7E3 #  mul_ebx
5B                # pop_ebx               # +
01D8 #  add_eax,ebx
8B00          # mov_eax,[eax]         # ?
5B                # pop_ebx               # =
8903 #  mov_[ebx],eax
58                # pop_eax               # ;
 ## stdlib.c 483
:_open_else1  #:_open_else1 # no else
50               #  push_eax              # 5
B8 05000000 #   mov_eax, %5
50               #  push_eax              # filename (local)
8D85 0C000000 # lea_eax,[ebp+DWORD] %12
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # flag (local)
8D85 08000000 # lea_eax,[ebp+DWORD] %8
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # mode (local)
8D85 10000000 # lea_eax,[ebp+DWORD] %16
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # sys_int80 (function)
B8 &f_sys_int80 #   mov_eax, &f_sys_int80
81C5 14000000          #    add_ebp, %20         # ()
FFD0 #  call_eax
81ED 14000000 # sub_ebp, %20
8B5D00          #   mov_ebx,[ebp]         # return
53 #    push_ebx
C3 #    ret
50               #  push_eax              # 0
B8 00000000 #   mov_eax, %0
8B5D00          #   mov_ebx,[ebp]         # return
53 #    push_ebx
C3 #    ret
 #
:f_close #:f_close
58 #    pop_eax
894500 #    mov_[ebp],eax
58 #    pop_eax
50               #  push_eax              # fd (local)
8D85 04000000 # lea_eax,[ebp+DWORD] %4
5B                # pop_ebx               # =:
8918 #  mov_[eax],ebx
58 #    pop_eax
 ## stdlib.c 488
50               #  push_eax              # 6
B8 06000000 #   mov_eax, %6
50               #  push_eax              # fd (local)
8D85 04000000 # lea_eax,[ebp+DWORD] %4
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # 0
B8 00000000 #   mov_eax, %0
50               #  push_eax              # 0
B8 00000000 #   mov_eax, %0
50               #  push_eax              # sys_int80 (function)
B8 &f_sys_int80 #   mov_eax, &f_sys_int80
81C5 08000000          #    add_ebp, %8         # ()
FFD0 #  call_eax
81ED 08000000 # sub_ebp, %8
8B5D00          #   mov_ebx,[ebp]         # return
53 #    push_ebx
C3 #    ret
50               #  push_eax              # 0
B8 00000000 #   mov_eax, %0
8B5D00          #   mov_ebx,[ebp]         # return
53 #    push_ebx
C3 #    ret
 #
:f_read #:f_read
58 #    pop_eax
894500 #    mov_[ebp],eax
58 #    pop_eax
50               #  push_eax              # count (local)
8D85 04000000 # lea_eax,[ebp+DWORD] %4
5B                # pop_ebx               # =:
8918 #  mov_[eax],ebx
58 #    pop_eax
50               #  push_eax              # buf (local)
8D85 08000000 # lea_eax,[ebp+DWORD] %8
5B                # pop_ebx               # =:
8918 #  mov_[eax],ebx
58 #    pop_eax
50               #  push_eax              # fd (local)
8D85 0C000000 # lea_eax,[ebp+DWORD] %12
5B                # pop_ebx               # =:
8918 #  mov_[eax],ebx
58 #    pop_eax
 ## stdlib.c 493
50               #  push_eax              # 3
B8 03000000 #   mov_eax, %3
50               #  push_eax              # fd (local)
8D85 0C000000 # lea_eax,[ebp+DWORD] %12
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # buf (local)
8D85 08000000 # lea_eax,[ebp+DWORD] %8
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # count (local)
8D85 04000000 # lea_eax,[ebp+DWORD] %4
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # sys_int80 (function)
B8 &f_sys_int80 #   mov_eax, &f_sys_int80
81C5 10000000          #    add_ebp, %16         # ()
FFD0 #  call_eax
81ED 10000000 # sub_ebp, %16
8B5D00          #   mov_ebx,[ebp]         # return
53 #    push_ebx
C3 #    ret
50               #  push_eax              # 0
B8 00000000 #   mov_eax, %0
8B5D00          #   mov_ebx,[ebp]         # return
53 #    push_ebx
C3 #    ret
 #
:f_lseek #:f_lseek
58 #    pop_eax
894500 #    mov_[ebp],eax
58 #    pop_eax
50               #  push_eax              # whence (local)
8D85 04000000 # lea_eax,[ebp+DWORD] %4
5B                # pop_ebx               # =:
8918 #  mov_[eax],ebx
58 #    pop_eax
50               #  push_eax              # offset (local)
8D85 08000000 # lea_eax,[ebp+DWORD] %8
5B                # pop_ebx               # =:
8918 #  mov_[eax],ebx
58 #    pop_eax
50               #  push_eax              # fd (local)
8D85 0C000000 # lea_eax,[ebp+DWORD] %12
5B                # pop_ebx               # =:
8918 #  mov_[eax],ebx
58 #    pop_eax
 ## stdlib.c 498
50               #  push_eax              # 19
B8 13000000 #   mov_eax, %19
50               #  push_eax              # fd (local)
8D85 0C000000 # lea_eax,[ebp+DWORD] %12
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # offset (local)
8D85 08000000 # lea_eax,[ebp+DWORD] %8
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # whence (local)
8D85 04000000 # lea_eax,[ebp+DWORD] %4
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # sys_int80 (function)
B8 &f_sys_int80 #   mov_eax, &f_sys_int80
81C5 10000000          #    add_ebp, %16         # ()
FFD0 #  call_eax
81ED 10000000 # sub_ebp, %16
8B5D00          #   mov_ebx,[ebp]         # return
53 #    push_ebx
C3 #    ret
50               #  push_eax              # 0
B8 00000000 #   mov_eax, %0
8B5D00          #   mov_ebx,[ebp]         # return
53 #    push_ebx
C3 #    ret
 #
:f_fopen #:f_fopen
58 #    pop_eax
894500 #    mov_[ebp],eax
58 #    pop_eax
50               #  push_eax              # mode (local)
8D85 04000000 # lea_eax,[ebp+DWORD] %4
5B                # pop_ebx               # =:
8918 #  mov_[eax],ebx
58 #    pop_eax
50               #  push_eax              # pathname (local)
8D85 08000000 # lea_eax,[ebp+DWORD] %8
5B                # pop_ebx               # =:
8918 #  mov_[eax],ebx
58 #    pop_eax
50               #  push_eax              # rw (local)
8D85 0C000000 # lea_eax,[ebp+DWORD] %12
50               #  push_eax              # mode (local)
8D85 04000000 # lea_eax,[ebp+DWORD] %4
8B00          # mov_eax,[eax]         # ?
8A00           #    mov_al,[eax]          # ?1
0FB6C0 #    movzx_eax,al
0FBEC0           #  movsx_eax,al          # char
5B                # pop_ebx               # =1
8803 #  mov_[ebx],al
58                # pop_eax               # ;
 ## stdlib.c 504
50               #  push_eax              # mode (local)
8D85 04000000 # lea_eax,[ebp+DWORD] %4
8B00          # mov_eax,[eax]         # ?
8A00           #    mov_al,[eax]          # ?1
0FB6C0 #    movzx_eax,al
0FBEC0           #  movsx_eax,al          # char
50               #  push_eax              # 114
B8 72000000 #   mov_eax, %114
5B                # pop_ebx               # ==
39C3 #  cmp_eax_ebx
0F94C0 #    sete_al
0FB6C0 #    movzx_eax,al
85C0           #    test_eax,eax          # ||
0F85 %_fopen_or_end1 #  jne %_fopen_or_end1
58 #    pop_eax
50               #  push_eax              # mode (local)
8D85 04000000 # lea_eax,[ebp+DWORD] %4
8B00          # mov_eax,[eax]         # ?
8A00           #    mov_al,[eax]          # ?1
0FB6C0 #    movzx_eax,al
0FBEC0           #  movsx_eax,al          # char
50               #  push_eax              # 119
B8 77000000 #   mov_eax, %119
5B                # pop_ebx               # ==
39C3 #  cmp_eax_ebx
0F94C0 #    sete_al
0FB6C0 #    movzx_eax,al
:_fopen_or_end1 #:_fopen_or_end1
85C0           #    test_eax,eax          # if
58 #    pop_eax
0F84 %_fopen_else2 #    je %_fopen_else2
 ## stdlib.c 505
50               #  push_eax              # mode (local)
8D85 04000000 # lea_eax,[ebp+DWORD] %4
50               #  push_eax              # $ (dup)
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # 1
B8 01000000 #   mov_eax, %1
5B                # pop_ebx               # +
01D8 #  add_eax,ebx
5B                # pop_ebx               # =
8903 #  mov_[ebx],eax
50               #  push_eax              # 1
B8 01000000 #   mov_eax, %1
5B                # pop_ebx               # -
29C3 #  sub_ebx,eax
89D8 #  mov_eax,ebx
58                # pop_eax               # ;
:_fopen_else2  #:_fopen_else2 # no else
50               #  push_eax              # bin (local)
8D85 10000000 # lea_eax,[ebp+DWORD] %16
50               #  push_eax              # 0
B8 00000000 #   mov_eax, %0
5B                # pop_ebx               # =
8903 #  mov_[ebx],eax
58                # pop_eax               # ;
 ## stdlib.c 507
50               #  push_eax              # mode (local)
8D85 04000000 # lea_eax,[ebp+DWORD] %4
8B00          # mov_eax,[eax]         # ?
8A00           #    mov_al,[eax]          # ?1
0FB6C0 #    movzx_eax,al
0FBEC0           #  movsx_eax,al          # char
50               #  push_eax              # 98
B8 62000000 #   mov_eax, %98
5B                # pop_ebx               # ==
39C3 #  cmp_eax_ebx
0F94C0 #    sete_al
0FB6C0 #    movzx_eax,al
85C0           #    test_eax,eax          # if
58 #    pop_eax
0F84 %_fopen_else3 #    je %_fopen_else3
 ## stdlib.c 508
 ## stdlib.c 509
50               #  push_eax              # bin (local)
8D85 10000000 # lea_eax,[ebp+DWORD] %16
50               #  push_eax              # 1
B8 01000000 #   mov_eax, %1
5B                # pop_ebx               # =
8903 #  mov_[ebx],eax
58                # pop_eax               # ;
 ## stdlib.c 510
50               #  push_eax              # mode (local)
8D85 04000000 # lea_eax,[ebp+DWORD] %4
50               #  push_eax              # $ (dup)
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # 1
B8 01000000 #   mov_eax, %1
5B                # pop_ebx               # +
01D8 #  add_eax,ebx
5B                # pop_ebx               # =
8903 #  mov_[ebx],eax
50               #  push_eax              # 1
B8 01000000 #   mov_eax, %1
5B                # pop_ebx               # -
29C3 #  sub_ebx,eax
89D8 #  mov_eax,ebx
58                # pop_eax               # ;
:_fopen_else3  #:_fopen_else3 # no else
50               #  push_eax              # plus (local)
8D85 14000000 # lea_eax,[ebp+DWORD] %20
50               #  push_eax              # 0
B8 00000000 #   mov_eax, %0
5B                # pop_ebx               # =
8903 #  mov_[ebx],eax
58                # pop_eax               # ;
 ## stdlib.c 513
50               #  push_eax              # mode (local)
8D85 04000000 # lea_eax,[ebp+DWORD] %4
8B00          # mov_eax,[eax]         # ?
8A00           #    mov_al,[eax]          # ?1
0FB6C0 #    movzx_eax,al
0FBEC0           #  movsx_eax,al          # char
50               #  push_eax              # 43
B8 2B000000 #   mov_eax, %43
5B                # pop_ebx               # ==
39C3 #  cmp_eax_ebx
0F94C0 #    sete_al
0FB6C0 #    movzx_eax,al
85C0           #    test_eax,eax          # if
58 #    pop_eax
0F84 %_fopen_else4 #    je %_fopen_else4
 ## stdlib.c 514
 ## stdlib.c 515
50               #  push_eax              # plus (local)
8D85 14000000 # lea_eax,[ebp+DWORD] %20
50               #  push_eax              # 1
B8 01000000 #   mov_eax, %1
5B                # pop_ebx               # =
8903 #  mov_[ebx],eax
58                # pop_eax               # ;
 ## stdlib.c 516
50               #  push_eax              # mode (local)
8D85 04000000 # lea_eax,[ebp+DWORD] %4
50               #  push_eax              # $ (dup)
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # 1
B8 01000000 #   mov_eax, %1
5B                # pop_ebx               # +
01D8 #  add_eax,ebx
5B                # pop_ebx               # =
8903 #  mov_[ebx],eax
50               #  push_eax              # 1
B8 01000000 #   mov_eax, %1
5B                # pop_ebx               # -
29C3 #  sub_ebx,eax
89D8 #  mov_eax,ebx
58                # pop_eax               # ;
 ## stdlib.c 518
:_fopen_else4  #:_fopen_else4 # no else
50               #  push_eax              # mode (local)
8D85 04000000 # lea_eax,[ebp+DWORD] %4
8B00          # mov_eax,[eax]         # ?
8A00           #    mov_al,[eax]          # ?1
0FB6C0 #    movzx_eax,al
0FBEC0           #  movsx_eax,al          # char
50               #  push_eax              # 0
B8 00000000 #   mov_eax, %0
5B                # pop_ebx               # !=
39C3 #  cmp_eax_ebx
0F95C0 #    setne_al
0FB6C0 #    movzx_eax,al
85C0           #    test_eax,eax          # if
58 #    pop_eax
0F84 %_fopen_else5 #    je %_fopen_else5
 ## stdlib.c 519
 ## stdlib.c 520
50               #  push_eax              # 'Mode %s should be 'r/w(b)(+)', 'w', or 'wb'\n'
B8 &string_3 #  mov_eax, &string_3
50               #  push_eax              # __var_args (local)
8D85 18000000 # lea_eax,[ebp+DWORD] %24
50               #  push_eax              # mode (local)
8D85 04000000 # lea_eax,[ebp+DWORD] %4
8B00          # mov_eax,[eax]         # ?
5B                # pop_ebx               # =
8903 #  mov_[ebx],eax
58                # pop_eax               # ;
50               #  push_eax              # __var_args (local)
8D85 18000000 # lea_eax,[ebp+DWORD] %24
50               #  push_eax              # printf (function)
B8 &f_printf #  mov_eax, &f_printf
81C5 1C000000          #    add_ebp, %28         # ()
FFD0 #  call_eax
81ED 1C000000 # sub_ebp, %28
58                # pop_eax               # ;
 ## stdlib.c 521
50               #  push_eax              # 0
B8 00000000 #   mov_eax, %0
8B5D00          #   mov_ebx,[ebp]         # return
53 #    push_ebx
C3 #    ret
:_fopen_else5  #:_fopen_else5 # no else
50               #  push_eax              # open_mode (local)
8D85 18000000 # lea_eax,[ebp+DWORD] %24
50               #  push_eax              # rw (local)
8D85 0C000000 # lea_eax,[ebp+DWORD] %12
8A00           #    mov_al,[eax]          # ?1
0FB6C0 #    movzx_eax,al
0FBEC0           #  movsx_eax,al          # char
50               #  push_eax              # 114
B8 72000000 #   mov_eax, %114
5B                # pop_ebx               # ==
39C3 #  cmp_eax_ebx
0F94C0 #    sete_al
0FB6C0 #    movzx_eax,al
85C0           #    test_eax,eax          # if
58 #    pop_eax
0F84 %_fopen_else6 #    je %_fopen_else6
50               #  push_eax              # plus (local)
8D85 14000000 # lea_eax,[ebp+DWORD] %20
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # 1
B8 01000000 #   mov_eax, %1
5B                # pop_ebx               # ==
39C3 #  cmp_eax_ebx
0F94C0 #    sete_al
0FB6C0 #    movzx_eax,al
85C0           #    test_eax,eax          # if
58 #    pop_eax
0F84 %_fopen_else7 #    je %_fopen_else7
50               #  push_eax              # 2
B8 02000000 #   mov_eax, %2
E9 %_fopen_else_end7 #  jmp %_fopen_else_end7
:_fopen_else7 #:_fopen_else7
50               #  push_eax              # 0
B8 00000000 #   mov_eax, %0
:_fopen_else_end7 #:_fopen_else_end7
E9 %_fopen_else_end6 #  jmp %_fopen_else_end6
:_fopen_else6 #:_fopen_else6
50               #  push_eax              # plus (local)
8D85 14000000 # lea_eax,[ebp+DWORD] %20
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # 1
B8 01000000 #   mov_eax, %1
5B                # pop_ebx               # ==
39C3 #  cmp_eax_ebx
0F94C0 #    sete_al
0FB6C0 #    movzx_eax,al
85C0           #    test_eax,eax          # if
58 #    pop_eax
0F84 %_fopen_else8 #    je %_fopen_else8
50               #  push_eax              # 2
B8 02000000 #   mov_eax, %2
E9 %_fopen_else_end8 #  jmp %_fopen_else_end8
:_fopen_else8 #:_fopen_else8
50               #  push_eax              # 1
B8 01000000 #   mov_eax, %1
:_fopen_else_end8 #:_fopen_else_end8
50               #  push_eax              # 64
B8 40000000 #   mov_eax, %64
5B                # pop_ebx               # |
09D8 #  or_eax,ebx
50               #  push_eax              # 512
B8 00020000 #   mov_eax, %512
5B                # pop_ebx               # |
09D8 #  or_eax,ebx
:_fopen_else_end6 #:_fopen_else_end6
5B                # pop_ebx               # =
8903 #  mov_[ebx],eax
58                # pop_eax               # ;
50               #  push_eax              # fh (local)
8D85 1C000000 # lea_eax,[ebp+DWORD] %28
50               #  push_eax              # 5
B8 05000000 #   mov_eax, %5
50               #  push_eax              # pathname (local)
8D85 08000000 # lea_eax,[ebp+DWORD] %8
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # open_mode (local)
8D85 18000000 # lea_eax,[ebp+DWORD] %24
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # 511
B8 FF010000 #   mov_eax, %511
50               #  push_eax              # sys_int80 (function)
B8 &f_sys_int80 #   mov_eax, &f_sys_int80
81C5 20000000          #    add_ebp, %32         # ()
FFD0 #  call_eax
81ED 20000000 # sub_ebp, %32
5B                # pop_ebx               # =
8903 #  mov_[ebx],eax
58                # pop_eax               # ;
 ## stdlib.c 528
50               #  push_eax              # fh (local)
8D85 1C000000 # lea_eax,[ebp+DWORD] %28
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # 0
B8 00000000 #   mov_eax, %0
5B                # pop_ebx               # <s
39C3 #  cmp_eax_ebx
0F9CC0 #    setl_al
0FB6C0 #    movzx_eax,al
85C0           #    test_eax,eax          # if
58 #    pop_eax
0F84 %_fopen_else9 #    je %_fopen_else9
 ## stdlib.c 529
 ## stdlib.c 530
50               #  push_eax              # 'fopen %s %s returned %d\n'
B8 &string_4 #  mov_eax, &string_4
50               #  push_eax              # __var_args (local)
8D85 20000000 # lea_eax,[ebp+DWORD] %32
50               #  push_eax              # pathname (local)
8D85 08000000 # lea_eax,[ebp+DWORD] %8
8B00          # mov_eax,[eax]         # ?
5B                # pop_ebx               # =
8903 #  mov_[ebx],eax
58                # pop_eax               # ;
50               #  push_eax              # __var_args (local)
8D85 20000000 # lea_eax,[ebp+DWORD] %32
50               #  push_eax              # 4
B8 04000000 #   mov_eax, %4
5B                # pop_ebx               # +
01D8 #  add_eax,ebx
50               #  push_eax              # mode (local)
8D85 04000000 # lea_eax,[ebp+DWORD] %4
8B00          # mov_eax,[eax]         # ?
5B                # pop_ebx               # =
8903 #  mov_[ebx],eax
58                # pop_eax               # ;
50               #  push_eax              # __var_args (local)
8D85 20000000 # lea_eax,[ebp+DWORD] %32
50               #  push_eax              # 8
B8 08000000 #   mov_eax, %8
5B                # pop_ebx               # +
01D8 #  add_eax,ebx
50               #  push_eax              # fh (local)
8D85 1C000000 # lea_eax,[ebp+DWORD] %28
8B00          # mov_eax,[eax]         # ?
5B                # pop_ebx               # =
8903 #  mov_[ebx],eax
58                # pop_eax               # ;
50               #  push_eax              # __var_args (local)
8D85 20000000 # lea_eax,[ebp+DWORD] %32
50               #  push_eax              # printf (function)
B8 &f_printf #  mov_eax, &f_printf
81C5 2C000000          #    add_ebp, %44         # ()
FFD0 #  call_eax
81ED 2C000000 # sub_ebp, %44
58                # pop_eax               # ;
 ## stdlib.c 531
50               #  push_eax              # 0
B8 00000000 #   mov_eax, %0
8B5D00          #   mov_ebx,[ebp]         # return
53 #    push_ebx
C3 #    ret
:_fopen_else9  #:_fopen_else9 # no else
50               #  push_eax              # f (local)
8D85 20000000 # lea_eax,[ebp+DWORD] %32
50               #  push_eax              # 8
B8 08000000 #   mov_eax, %8
50               #  push_eax              # malloc (function)
B8 &f_malloc #  mov_eax, &f_malloc
81C5 24000000          #    add_ebp, %36         # ()
FFD0 #  call_eax
81ED 24000000 # sub_ebp, %36
5B                # pop_ebx               # =
8903 #  mov_[ebx],eax
58                # pop_eax               # ;
 ## stdlib.c 534
50               #  push_eax              # f (local)
8D85 20000000 # lea_eax,[ebp+DWORD] %32
8B00          # mov_eax,[eax]         # ->
81C0 00000000 # add_eax, %0
50               #  push_eax              # fh (local)
8D85 1C000000 # lea_eax,[ebp+DWORD] %28
8B00          # mov_eax,[eax]         # ?
5B                # pop_ebx               # =
8903 #  mov_[ebx],eax
58                # pop_eax               # ;
 ## stdlib.c 535
50               #  push_eax              # f (local)
8D85 20000000 # lea_eax,[ebp+DWORD] %32
8B00          # mov_eax,[eax]         # ->
81C0 04000000 # add_eax, %4
50               #  push_eax              # 0
B8 00000000 #   mov_eax, %0
5B                # pop_ebx               # =
8903 #  mov_[ebx],eax
58                # pop_eax               # ;
 ## stdlib.c 536
50               #  push_eax              # f (local)
8D85 20000000 # lea_eax,[ebp+DWORD] %32
8B00          # mov_eax,[eax]         # ?
8B5D00          #   mov_ebx,[ebp]         # return
53 #    push_ebx
C3 #    ret
50               #  push_eax              # 0
B8 00000000 #   mov_eax, %0
8B5D00          #   mov_ebx,[ebp]         # return
53 #    push_ebx
C3 #    ret
 #
:f_fdopen #:f_fdopen
58 #    pop_eax
894500 #    mov_[ebp],eax
58 #    pop_eax
50               #  push_eax              # mode (local)
8D85 04000000 # lea_eax,[ebp+DWORD] %4
5B                # pop_ebx               # =:
8918 #  mov_[eax],ebx
58 #    pop_eax
50               #  push_eax              # fd (local)
8D85 08000000 # lea_eax,[ebp+DWORD] %8
5B                # pop_ebx               # =:
8918 #  mov_[eax],ebx
58 #    pop_eax
50               #  push_eax              # f (local)
8D85 0C000000 # lea_eax,[ebp+DWORD] %12
50               #  push_eax              # 8
B8 08000000 #   mov_eax, %8
50               #  push_eax              # malloc (function)
B8 &f_malloc #  mov_eax, &f_malloc
81C5 10000000          #    add_ebp, %16         # ()
FFD0 #  call_eax
81ED 10000000 # sub_ebp, %16
5B                # pop_ebx               # =
8903 #  mov_[ebx],eax
58                # pop_eax               # ;
 ## stdlib.c 542
50               #  push_eax              # f (local)
8D85 0C000000 # lea_eax,[ebp+DWORD] %12
8B00          # mov_eax,[eax]         # ->
81C0 00000000 # add_eax, %0
50               #  push_eax              # fd (local)
8D85 08000000 # lea_eax,[ebp+DWORD] %8
8B00          # mov_eax,[eax]         # ?
5B                # pop_ebx               # =
8903 #  mov_[ebx],eax
58                # pop_eax               # ;
 ## stdlib.c 543
50               #  push_eax              # f (local)
8D85 0C000000 # lea_eax,[ebp+DWORD] %12
8B00          # mov_eax,[eax]         # ->
81C0 04000000 # add_eax, %4
50               #  push_eax              # 0
B8 00000000 #   mov_eax, %0
5B                # pop_ebx               # =
8903 #  mov_[ebx],eax
58                # pop_eax               # ;
 ## stdlib.c 544
50               #  push_eax              # f (local)
8D85 0C000000 # lea_eax,[ebp+DWORD] %12
8B00          # mov_eax,[eax]         # ?
8B5D00          #   mov_ebx,[ebp]         # return
53 #    push_ebx
C3 #    ret
50               #  push_eax              # 0
B8 00000000 #   mov_eax, %0
8B5D00          #   mov_ebx,[ebp]         # return
53 #    push_ebx
C3 #    ret
 #
:f_fclose #:f_fclose
58 #    pop_eax
894500 #    mov_[ebp],eax
58 #    pop_eax
50               #  push_eax              # stream (local)
8D85 04000000 # lea_eax,[ebp+DWORD] %4
5B                # pop_ebx               # =:
8918 #  mov_[eax],ebx
58 #    pop_eax
 ## stdlib.c 549
50               #  push_eax              # 6
B8 06000000 #   mov_eax, %6
50               #  push_eax              # stream (local)
8D85 04000000 # lea_eax,[ebp+DWORD] %4
8B00          # mov_eax,[eax]         # ->
81C0 00000000 # add_eax, %0
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # 0
B8 00000000 #   mov_eax, %0
50               #  push_eax              # 0
B8 00000000 #   mov_eax, %0
50               #  push_eax              # sys_int80 (function)
B8 &f_sys_int80 #   mov_eax, &f_sys_int80
81C5 08000000          #    add_ebp, %8         # ()
FFD0 #  call_eax
81ED 08000000 # sub_ebp, %8
8B5D00          #   mov_ebx,[ebp]         # return
53 #    push_ebx
C3 #    ret
50               #  push_eax              # 0
B8 00000000 #   mov_eax, %0
8B5D00          #   mov_ebx,[ebp]         # return
53 #    push_ebx
C3 #    ret
 #
:f_fflush #:f_fflush
58 #    pop_eax
894500 #    mov_[ebp],eax
58 #    pop_eax
50               #  push_eax              # stream (local)
8D85 04000000 # lea_eax,[ebp+DWORD] %4
5B                # pop_ebx               # =:
8918 #  mov_[eax],ebx
58 #    pop_eax
 ## stdlib.c 555
50               #  push_eax              # 0
B8 00000000 #   mov_eax, %0
8B5D00          #   mov_ebx,[ebp]         # return
53 #    push_ebx
C3 #    ret
50               #  push_eax              # 0
B8 00000000 #   mov_eax, %0
8B5D00          #   mov_ebx,[ebp]         # return
53 #    push_ebx
C3 #    ret
 #
:f_fseek #:f_fseek
58 #    pop_eax
894500 #    mov_[ebp],eax
58 #    pop_eax
50               #  push_eax              # whence (local)
8D85 04000000 # lea_eax,[ebp+DWORD] %4
5B                # pop_ebx               # =:
8918 #  mov_[eax],ebx
58 #    pop_eax
50               #  push_eax              # offset (local)
8D85 08000000 # lea_eax,[ebp+DWORD] %8
5B                # pop_ebx               # =:
8918 #  mov_[eax],ebx
58 #    pop_eax
50               #  push_eax              # stream (local)
8D85 0C000000 # lea_eax,[ebp+DWORD] %12
5B                # pop_ebx               # =:
8918 #  mov_[eax],ebx
58 #    pop_eax
 ## stdlib.c 560
50               #  push_eax              # stream (local)
8D85 0C000000 # lea_eax,[ebp+DWORD] %12
8B00          # mov_eax,[eax]         # ->
81C0 00000000 # add_eax, %0
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # offset (local)
8D85 08000000 # lea_eax,[ebp+DWORD] %8
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # whence (local)
8D85 04000000 # lea_eax,[ebp+DWORD] %4
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # lseek (function)
B8 &f_lseek #   mov_eax, &f_lseek
81C5 10000000          #    add_ebp, %16         # ()
FFD0 #  call_eax
81ED 10000000 # sub_ebp, %16
8B5D00          #   mov_ebx,[ebp]         # return
53 #    push_ebx
C3 #    ret
50               #  push_eax              # 0
B8 00000000 #   mov_eax, %0
8B5D00          #   mov_ebx,[ebp]         # return
53 #    push_ebx
C3 #    ret
 #
:f_ftell #:f_ftell
58 #    pop_eax
894500 #    mov_[ebp],eax
58 #    pop_eax
50               #  push_eax              # stream (local)
8D85 04000000 # lea_eax,[ebp+DWORD] %4
5B                # pop_ebx               # =:
8918 #  mov_[eax],ebx
58 #    pop_eax
 ## stdlib.c 565
50               #  push_eax              # stream (local)
8D85 04000000 # lea_eax,[ebp+DWORD] %4
8B00          # mov_eax,[eax]         # ->
81C0 00000000 # add_eax, %0
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # 0
B8 00000000 #   mov_eax, %0
50               #  push_eax              # 1
B8 01000000 #   mov_eax, %1
50               #  push_eax              # lseek (function)
B8 &f_lseek #   mov_eax, &f_lseek
81C5 08000000          #    add_ebp, %8         # ()
FFD0 #  call_eax
81ED 08000000 # sub_ebp, %8
8B5D00          #   mov_ebx,[ebp]         # return
53 #    push_ebx
C3 #    ret
50               #  push_eax              # 0
B8 00000000 #   mov_eax, %0
8B5D00          #   mov_ebx,[ebp]         # return
53 #    push_ebx
C3 #    ret
 #
:f_fread #:f_fread
58 #    pop_eax
894500 #    mov_[ebp],eax
58 #    pop_eax
50               #  push_eax              # stream (local)
8D85 04000000 # lea_eax,[ebp+DWORD] %4
5B                # pop_ebx               # =:
8918 #  mov_[eax],ebx
58 #    pop_eax
50               #  push_eax              # nmemb (local)
8D85 08000000 # lea_eax,[ebp+DWORD] %8
5B                # pop_ebx               # =:
8918 #  mov_[eax],ebx
58 #    pop_eax
50               #  push_eax              # size (local)
8D85 0C000000 # lea_eax,[ebp+DWORD] %12
5B                # pop_ebx               # =:
8918 #  mov_[eax],ebx
58 #    pop_eax
50               #  push_eax              # ptr (local)
8D85 10000000 # lea_eax,[ebp+DWORD] %16
5B                # pop_ebx               # =:
8918 #  mov_[eax],ebx
58 #    pop_eax
50               #  push_eax              # s (local)
8D85 14000000 # lea_eax,[ebp+DWORD] %20
50               #  push_eax              # ptr (local)
8D85 10000000 # lea_eax,[ebp+DWORD] %16
8B00          # mov_eax,[eax]         # ?
5B                # pop_ebx               # =
8903 #  mov_[ebx],eax
58                # pop_eax               # ;
 ## stdlib.c 571
50               #  push_eax              # i (local)
8D85 18000000 # lea_eax,[ebp+DWORD] %24
50               #  push_eax              # 0
B8 00000000 #   mov_eax, %0
5B                # pop_ebx               # =
8903 #  mov_[ebx],eax
58                # pop_eax               # ;
:_fread_loop1 #:_fread_loop1
50               #  push_eax              # i (local)
8D85 18000000 # lea_eax,[ebp+DWORD] %24
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # nmemb (local)
8D85 08000000 # lea_eax,[ebp+DWORD] %8
8B00          # mov_eax,[eax]         # ?
5B                # pop_ebx               # <s
39C3 #  cmp_eax_ebx
0F9CC0 #    setl_al
0FB6C0 #    movzx_eax,al
85C0           #    test_eax,eax          # !
0F94C0 #    sete_al
0FB6C0 #    movzx_eax,al
85C0           #    test_eax,eax          # if
58 #    pop_eax
0F84 %_fread_else2 #    je %_fread_else2
E9 %_fread_loop_end1 #  jmp %_fread_loop_end1
 ## stdlib.c 572
:_fread_else2  #:_fread_else2 # no else
50               #  push_eax              # r (local)
8D85 1C000000 # lea_eax,[ebp+DWORD] %28
50               #  push_eax              # stream (local)
8D85 04000000 # lea_eax,[ebp+DWORD] %4
8B00          # mov_eax,[eax]         # ->
81C0 00000000 # add_eax, %0
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # s (local)
8D85 14000000 # lea_eax,[ebp+DWORD] %20
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # size (local)
8D85 0C000000 # lea_eax,[ebp+DWORD] %12
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # read (function)
B8 &f_read #    mov_eax, &f_read
81C5 20000000          #    add_ebp, %32         # ()
FFD0 #  call_eax
81ED 20000000 # sub_ebp, %32
5B                # pop_ebx               # =
8903 #  mov_[ebx],eax
58                # pop_eax               # ;
 ## stdlib.c 574
50               #  push_eax              # r (local)
8D85 1C000000 # lea_eax,[ebp+DWORD] %28
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # size (local)
8D85 0C000000 # lea_eax,[ebp+DWORD] %12
8B00          # mov_eax,[eax]         # ?
5B                # pop_ebx               # <
39C3 #  cmp_eax_ebx
0F92C0 #    setb_al
0FB6C0 #    movzx_eax,al
85C0           #    test_eax,eax          # if
58 #    pop_eax
0F84 %_fread_else3 #    je %_fread_else3
 ## stdlib.c 575
50               #  push_eax              # i (local)
8D85 18000000 # lea_eax,[ebp+DWORD] %24
8B00          # mov_eax,[eax]         # ?
8B5D00          #   mov_ebx,[ebp]         # return
53 #    push_ebx
C3 #    ret
 ## stdlib.c 576
:_fread_else3  #:_fread_else3 # no else
50               #  push_eax              # s (local)
8D85 14000000 # lea_eax,[ebp+DWORD] %20
50               #  push_eax              # $ (dup)
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # size (local)
8D85 0C000000 # lea_eax,[ebp+DWORD] %12
8B00          # mov_eax,[eax]         # ?
5B                # pop_ebx               # +
01D8 #  add_eax,ebx
5B                # pop_ebx               # =
8903 #  mov_[ebx],eax
58                # pop_eax               # ;
50               #  push_eax              # i (local)
8D85 18000000 # lea_eax,[ebp+DWORD] %24
50               #  push_eax              # $ (dup)
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # 1
B8 01000000 #   mov_eax, %1
5B                # pop_ebx               # +
01D8 #  add_eax,ebx
5B                # pop_ebx               # =
8903 #  mov_[ebx],eax
50               #  push_eax              # 1
B8 01000000 #   mov_eax, %1
5B                # pop_ebx               # -
29C3 #  sub_ebx,eax
89D8 #  mov_eax,ebx
58                # pop_eax               # ;
E9 %_fread_loop1 #  jmp %_fread_loop1
:_fread_loop_end1 #:_fread_loop_end1
 ## stdlib.c 578
50               #  push_eax              # nmemb (local)
8D85 08000000 # lea_eax,[ebp+DWORD] %8
8B00          # mov_eax,[eax]         # ?
8B5D00          #   mov_ebx,[ebp]         # return
53 #    push_ebx
C3 #    ret
50               #  push_eax              # 0
B8 00000000 #   mov_eax, %0
8B5D00          #   mov_ebx,[ebp]         # return
53 #    push_ebx
C3 #    ret
 #
:f_lseek #:f_lseek
58 #    pop_eax
894500 #    mov_[ebp],eax
58 #    pop_eax
50               #  push_eax              # whence (local)
8D85 04000000 # lea_eax,[ebp+DWORD] %4
5B                # pop_ebx               # =:
8918 #  mov_[eax],ebx
58 #    pop_eax
50               #  push_eax              # offset (local)
8D85 08000000 # lea_eax,[ebp+DWORD] %8
5B                # pop_ebx               # =:
8918 #  mov_[eax],ebx
58 #    pop_eax
50               #  push_eax              # fd (local)
8D85 0C000000 # lea_eax,[ebp+DWORD] %12
5B                # pop_ebx               # =:
8918 #  mov_[eax],ebx
58 #    pop_eax
 ## stdlib.c 587
50               #  push_eax              # 19
B8 13000000 #   mov_eax, %19
50               #  push_eax              # fd (local)
8D85 0C000000 # lea_eax,[ebp+DWORD] %12
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # offset (local)
8D85 08000000 # lea_eax,[ebp+DWORD] %8
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # whence (local)
8D85 04000000 # lea_eax,[ebp+DWORD] %4
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # sys_int80 (function)
B8 &f_sys_int80 #   mov_eax, &f_sys_int80
81C5 10000000          #    add_ebp, %16         # ()
FFD0 #  call_eax
81ED 10000000 # sub_ebp, %16
8B5D00          #   mov_ebx,[ebp]         # return
53 #    push_ebx
C3 #    ret
50               #  push_eax              # 0
B8 00000000 #   mov_eax, %0
8B5D00          #   mov_ebx,[ebp]         # return
53 #    push_ebx
C3 #    ret
 #
:f_feof #:f_feof
58 #    pop_eax
894500 #    mov_[ebp],eax
58 #    pop_eax
50               #  push_eax              # stream (local)
8D85 04000000 # lea_eax,[ebp+DWORD] %4
5B                # pop_ebx               # =:
8918 #  mov_[eax],ebx
58 #    pop_eax
 ## stdlib.c 592
50               #  push_eax              # stream (local)
8D85 04000000 # lea_eax,[ebp+DWORD] %4
8B00          # mov_eax,[eax]         # ->
81C0 04000000 # add_eax, %4
8B00          # mov_eax,[eax]         # ?
8B5D00          #   mov_ebx,[ebp]         # return
53 #    push_ebx
C3 #    ret
50               #  push_eax              # 0
B8 00000000 #   mov_eax, %0
8B5D00          #   mov_ebx,[ebp]         # return
53 #    push_ebx
C3 #    ret
 #
:f_fgetc #:f_fgetc
58 #    pop_eax
894500 #    mov_[ebp],eax
58 #    pop_eax
50               #  push_eax              # stream (local)
8D85 04000000 # lea_eax,[ebp+DWORD] %4
5B                # pop_ebx               # =:
8918 #  mov_[eax],ebx
58 #    pop_eax
 ## stdlib.c 597
50               #  push_eax              # stream (local)
8D85 04000000 # lea_eax,[ebp+DWORD] %4
8B00          # mov_eax,[eax]         # ->
81C0 04000000 # add_eax, %4
8B00          # mov_eax,[eax]         # ?
85C0           #    test_eax,eax          # if
58 #    pop_eax
0F84 %_fgetc_else1 #    je %_fgetc_else1
 ## stdlib.c 598
50               #  push_eax              # 4294967295
B8 FFFFFFFF #   mov_eax, %4294967295
8B5D00          #   mov_ebx,[ebp]         # return
53 #    push_ebx
C3 #    ret
:_fgetc_else1  #:_fgetc_else1 # no else
50               #  push_eax              # ret (local)
8D85 0C000000 # lea_eax,[ebp+DWORD] %12
50               #  push_eax              # 3
B8 03000000 #   mov_eax, %3
50               #  push_eax              # stream (local)
8D85 04000000 # lea_eax,[ebp+DWORD] %4
8B00          # mov_eax,[eax]         # ->
81C0 00000000 # add_eax, %0
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # ch (local)
8D85 08000000 # lea_eax,[ebp+DWORD] %8
50               #  push_eax              # 1
B8 01000000 #   mov_eax, %1
50               #  push_eax              # sys_int80 (function)
B8 &f_sys_int80 #   mov_eax, &f_sys_int80
81C5 10000000          #    add_ebp, %16         # ()
FFD0 #  call_eax
81ED 10000000 # sub_ebp, %16
5B                # pop_ebx               # =
8903 #  mov_[ebx],eax
58                # pop_eax               # ;
 ## stdlib.c 601
50               #  push_eax              # ret (local)
8D85 0C000000 # lea_eax,[ebp+DWORD] %12
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # 0
B8 00000000 #   mov_eax, %0
5B                # pop_ebx               # <=s
39C3 #  cmp_eax_ebx
0F9EC0 #    setle_al
0FB6C0 #    movzx_eax,al
85C0           #    test_eax,eax          # if
58 #    pop_eax
0F84 %_fgetc_else2 #    je %_fgetc_else2
 ## stdlib.c 602
 ## stdlib.c 603
50               #  push_eax              # stream (local)
8D85 04000000 # lea_eax,[ebp+DWORD] %4
8B00          # mov_eax,[eax]         # ->
81C0 04000000 # add_eax, %4
50               #  push_eax              # 1
B8 01000000 #   mov_eax, %1
5B                # pop_ebx               # =
8903 #  mov_[ebx],eax
58                # pop_eax               # ;
 ## stdlib.c 604
50               #  push_eax              # 4294967295
B8 FFFFFFFF #   mov_eax, %4294967295
8B5D00          #   mov_ebx,[ebp]         # return
53 #    push_ebx
C3 #    ret
 ## stdlib.c 606
:_fgetc_else2  #:_fgetc_else2 # no else
50               #  push_eax              # ch (local)
8D85 08000000 # lea_eax,[ebp+DWORD] %8
8A00           #    mov_al,[eax]          # ?1
0FB6C0 #    movzx_eax,al
8B5D00          #   mov_ebx,[ebp]         # return
53 #    push_ebx
C3 #    ret
50               #  push_eax              # 0
B8 00000000 #   mov_eax, %0
8B5D00          #   mov_ebx,[ebp]         # return
53 #    push_ebx
C3 #    ret
 #
:f_ldexp #:f_ldexp
58 #    pop_eax
894500 #    mov_[ebp],eax
58 #    pop_eax
50               #  push_eax              # exp (local)
8D85 04000000 # lea_eax,[ebp+DWORD] %4
5B                # pop_ebx               # =:
8918 #  mov_[eax],ebx
58 #    pop_eax
50               #  push_eax              # x (local)
8D85 08000000 # lea_eax,[ebp+DWORD] %8
5B                # pop_ebx               # =:
8918 #  mov_[eax],ebx
58 #    pop_eax
50               #  push_eax              # result (local)
8D85 0C000000 # lea_eax,[ebp+DWORD] %12
50               #  push_eax              # x (local)
8D85 08000000 # lea_eax,[ebp+DWORD] %8
8B00          # mov_eax,[eax]         # ?
5B                # pop_ebx               # =
8903 #  mov_[ebx],eax
58                # pop_eax               # ;
 ## stdlib.c 613
50               #  push_eax              # i (local)
8D85 10000000 # lea_eax,[ebp+DWORD] %16
50               #  push_eax              # 1
B8 01000000 #   mov_eax, %1
5B                # pop_ebx               # =
8903 #  mov_[ebx],eax
58                # pop_eax               # ;
:_ldexp_loop1 #:_ldexp_loop1
50               #  push_eax              # i (local)
8D85 10000000 # lea_eax,[ebp+DWORD] %16
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # exp (local)
8D85 04000000 # lea_eax,[ebp+DWORD] %4
8B00          # mov_eax,[eax]         # ?
5B                # pop_ebx               # <s
39C3 #  cmp_eax_ebx
0F9CC0 #    setl_al
0FB6C0 #    movzx_eax,al
85C0           #    test_eax,eax          # !
0F94C0 #    sete_al
0FB6C0 #    movzx_eax,al
85C0           #    test_eax,eax          # if
58 #    pop_eax
0F84 %_ldexp_else2 #    je %_ldexp_else2
E9 %_ldexp_loop_end1 #  jmp %_ldexp_loop_end1
 ## stdlib.c 614
:_ldexp_else2  #:_ldexp_else2 # no else
50               #  push_eax              # result (local)
8D85 0C000000 # lea_eax,[ebp+DWORD] %12
50               #  push_eax              # $ (dup)
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # x (local)
8D85 08000000 # lea_eax,[ebp+DWORD] %8
8B00          # mov_eax,[eax]         # ?
5B                # pop_ebx               # *
F7E3 #  mul_ebx
5B                # pop_ebx               # =
8903 #  mov_[ebx],eax
58                # pop_eax               # ;
50               #  push_eax              # i (local)
8D85 10000000 # lea_eax,[ebp+DWORD] %16
50               #  push_eax              # $ (dup)
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # 1
B8 01000000 #   mov_eax, %1
5B                # pop_ebx               # +
01D8 #  add_eax,ebx
5B                # pop_ebx               # =
8903 #  mov_[ebx],eax
50               #  push_eax              # 1
B8 01000000 #   mov_eax, %1
5B                # pop_ebx               # -
29C3 #  sub_ebx,eax
89D8 #  mov_eax,ebx
58                # pop_eax               # ;
E9 %_ldexp_loop1 #  jmp %_ldexp_loop1
:_ldexp_loop_end1 #:_ldexp_loop_end1
 ## stdlib.c 615
50               #  push_eax              # result (local)
8D85 0C000000 # lea_eax,[ebp+DWORD] %12
8B00          # mov_eax,[eax]         # ?
8B5D00          #   mov_ebx,[ebp]         # return
53 #    push_ebx
C3 #    ret
50               #  push_eax              # 0
B8 00000000 #   mov_eax, %0
8B5D00          #   mov_ebx,[ebp]         # return
53 #    push_ebx
C3 #    ret
 #
:f_time #:f_time
58 #    pop_eax
894500 #    mov_[ebp],eax
58 #    pop_eax
50               #  push_eax              # tloc (local)
8D85 04000000 # lea_eax,[ebp+DWORD] %4
5B                # pop_ebx               # =:
8918 #  mov_[eax],ebx
58 #    pop_eax
 ## stdlib.c 621
50               #  push_eax              # stderr (global)
B8 &g_stderr #  mov_eax, &g_stderr
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # 'TODO time\n'
B8 &string_5 #  mov_eax, &string_5
50               #  push_eax              # 0
B8 00000000 #   mov_eax, %0
50               #  push_eax              # fprintf (function)
B8 &f_fprintf # mov_eax, &f_fprintf
81C5 08000000          #    add_ebp, %8         # ()
FFD0 #  call_eax
81ED 08000000 # sub_ebp, %8
58                # pop_eax               # ;
 ## stdlib.c 621
50               #  push_eax              # 1
B8 01000000 #   mov_eax, %1
50               #  push_eax              # exit (function)
B8 &f_exit #    mov_eax, &f_exit
81C5 08000000          #    add_ebp, %8         # ()
FFD0 #  call_eax
81ED 08000000 # sub_ebp, %8
58                # pop_eax               # ;
50               #  push_eax              # 0
B8 00000000 #   mov_eax, %0
8B5D00          #   mov_ebx,[ebp]         # return
53 #    push_ebx
C3 #    ret
 #
:f_localtime #:f_localtime
58 #    pop_eax
894500 #    mov_[ebp],eax
58 #    pop_eax
50               #  push_eax              # timep (local)
8D85 04000000 # lea_eax,[ebp+DWORD] %4
5B                # pop_ebx               # =:
8918 #  mov_[eax],ebx
58 #    pop_eax
 ## stdlib.c 638
50               #  push_eax              # stderr (global)
B8 &g_stderr #  mov_eax, &g_stderr
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # 'TODO localtime\n'
B8 &string_6 #  mov_eax, &string_6
50               #  push_eax              # 0
B8 00000000 #   mov_eax, %0
50               #  push_eax              # fprintf (function)
B8 &f_fprintf # mov_eax, &f_fprintf
81C5 08000000          #    add_ebp, %8         # ()
FFD0 #  call_eax
81ED 08000000 # sub_ebp, %8
58                # pop_eax               # ;
 ## stdlib.c 638
50               #  push_eax              # 1
B8 01000000 #   mov_eax, %1
50               #  push_eax              # exit (function)
B8 &f_exit #    mov_eax, &f_exit
81C5 08000000          #    add_ebp, %8         # ()
FFD0 #  call_eax
81ED 08000000 # sub_ebp, %8
58                # pop_eax               # ;
50               #  push_eax              # 0
B8 00000000 #   mov_eax, %0
8B5D00          #   mov_ebx,[ebp]         # return
53 #    push_ebx
C3 #    ret
 #
:f_gettimeofday #:f_gettimeofday
58 #    pop_eax
894500 #    mov_[ebp],eax
58 #    pop_eax
50               #  push_eax              # tz (local)
8D85 04000000 # lea_eax,[ebp+DWORD] %4
5B                # pop_ebx               # =:
8918 #  mov_[eax],ebx
58 #    pop_eax
50               #  push_eax              # tv (local)
8D85 08000000 # lea_eax,[ebp+DWORD] %8
5B                # pop_ebx               # =:
8918 #  mov_[eax],ebx
58 #    pop_eax
 ## stdlib.c 651
50               #  push_eax              # 0
B8 00000000 #   mov_eax, %0
8B5D00          #   mov_ebx,[ebp]         # return
53 #    push_ebx
C3 #    ret
50               #  push_eax              # 0
B8 00000000 #   mov_eax, %0
8B5D00          #   mov_ebx,[ebp]         # return
53 #    push_ebx
C3 #    ret
 #
:f_write #:f_write
58 #    pop_eax
894500 #    mov_[ebp],eax
58 #    pop_eax
50               #  push_eax              # count (local)
8D85 04000000 # lea_eax,[ebp+DWORD] %4
5B                # pop_ebx               # =:
8918 #  mov_[eax],ebx
58 #    pop_eax
50               #  push_eax              # buf (local)
8D85 08000000 # lea_eax,[ebp+DWORD] %8
5B                # pop_ebx               # =:
8918 #  mov_[eax],ebx
58 #    pop_eax
50               #  push_eax              # fd (local)
8D85 0C000000 # lea_eax,[ebp+DWORD] %12
5B                # pop_ebx               # =:
8918 #  mov_[eax],ebx
58 #    pop_eax
 ## stdlib.c 667
50               #  push_eax              # 4
B8 04000000 #   mov_eax, %4
50               #  push_eax              # fd (local)
8D85 0C000000 # lea_eax,[ebp+DWORD] %12
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # buf (local)
8D85 08000000 # lea_eax,[ebp+DWORD] %8
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # count (local)
8D85 04000000 # lea_eax,[ebp+DWORD] %4
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # sys_int80 (function)
B8 &f_sys_int80 #   mov_eax, &f_sys_int80
81C5 10000000          #    add_ebp, %16         # ()
FFD0 #  call_eax
81ED 10000000 # sub_ebp, %16
8B5D00          #   mov_ebx,[ebp]         # return
53 #    push_ebx
C3 #    ret
50               #  push_eax              # 0
B8 00000000 #   mov_eax, %0
8B5D00          #   mov_ebx,[ebp]         # return
53 #    push_ebx
C3 #    ret
 #
:f_fileno #:f_fileno
58 #    pop_eax
894500 #    mov_[ebp],eax
58 #    pop_eax
50               #  push_eax              # stream (local)
8D85 04000000 # lea_eax,[ebp+DWORD] %4
5B                # pop_ebx               # =:
8918 #  mov_[eax],ebx
58 #    pop_eax
 ## stdlib.c 672
50               #  push_eax              # stream (local)
8D85 04000000 # lea_eax,[ebp+DWORD] %4
8B00          # mov_eax,[eax]         # ->
81C0 00000000 # add_eax, %0
8B00          # mov_eax,[eax]         # ?
8B5D00          #   mov_ebx,[ebp]         # return
53 #    push_ebx
C3 #    ret
50               #  push_eax              # 0
B8 00000000 #   mov_eax, %0
8B5D00          #   mov_ebx,[ebp]         # return
53 #    push_ebx
C3 #    ret
 #
:f_getcwd #:f_getcwd
58 #    pop_eax
894500 #    mov_[ebp],eax
58 #    pop_eax
50               #  push_eax              # size (local)
8D85 04000000 # lea_eax,[ebp+DWORD] %4
5B                # pop_ebx               # =:
8918 #  mov_[eax],ebx
58 #    pop_eax
50               #  push_eax              # buf (local)
8D85 08000000 # lea_eax,[ebp+DWORD] %8
5B                # pop_ebx               # =:
8918 #  mov_[eax],ebx
58 #    pop_eax
 ## stdlib.c 681
50               #  push_eax              # 183
B8 B7000000 #   mov_eax, %183
50               #  push_eax              # buf (local)
8D85 08000000 # lea_eax,[ebp+DWORD] %8
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # size (local)
8D85 04000000 # lea_eax,[ebp+DWORD] %4
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # 0
B8 00000000 #   mov_eax, %0
50               #  push_eax              # sys_int80 (function)
B8 &f_sys_int80 #   mov_eax, &f_sys_int80
81C5 0C000000          #    add_ebp, %12         # ()
FFD0 #  call_eax
81ED 0C000000 # sub_ebp, %12
58                # pop_eax               # ;
 ## stdlib.c 682
50               #  push_eax              # buf (local)
8D85 08000000 # lea_eax,[ebp+DWORD] %8
8B00          # mov_eax,[eax]         # ?
8B5D00          #   mov_ebx,[ebp]         # return
53 #    push_ebx
C3 #    ret
50               #  push_eax              # 0
B8 00000000 #   mov_eax, %0
8B5D00          #   mov_ebx,[ebp]         # return
53 #    push_ebx
C3 #    ret
 #
:f_getenv #:f_getenv
58 #    pop_eax
894500 #    mov_[ebp],eax
58 #    pop_eax
50               #  push_eax              # name (local)
8D85 04000000 # lea_eax,[ebp+DWORD] %4
5B                # pop_ebx               # =:
8918 #  mov_[eax],ebx
58 #    pop_eax
50               #  push_eax              # len (local)
8D85 08000000 # lea_eax,[ebp+DWORD] %8
50               #  push_eax              # name (local)
8D85 04000000 # lea_eax,[ebp+DWORD] %4
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # strlen (function)
B8 &f_strlen #  mov_eax, &f_strlen
81C5 0C000000          #    add_ebp, %12         # ()
FFD0 #  call_eax
81ED 0C000000 # sub_ebp, %12
5B                # pop_ebx               # =
8903 #  mov_[ebx],eax
58                # pop_eax               # ;
 ## stdlib.c 690
50               #  push_eax              # env (local)
8D85 0C000000 # lea_eax,[ebp+DWORD] %12
50               #  push_eax              # _sys_env (global)
B8 &g__sys_env #    mov_eax, &g__sys_env
8B00          # mov_eax,[eax]         # ?
5B                # pop_ebx               # =
8903 #  mov_[ebx],eax
58                # pop_eax               # ;
:_getenv_loop1 #:_getenv_loop1
50               #  push_eax              # env (local)
8D85 0C000000 # lea_eax,[ebp+DWORD] %12
8B00          # mov_eax,[eax]         # ?
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # 0
B8 00000000 #   mov_eax, %0
5B                # pop_ebx               # !=
39C3 #  cmp_eax_ebx
0F95C0 #    setne_al
0FB6C0 #    movzx_eax,al
85C0           #    test_eax,eax          # !
0F94C0 #    sete_al
0FB6C0 #    movzx_eax,al
85C0           #    test_eax,eax          # if
58 #    pop_eax
0F84 %_getenv_else2 #   je %_getenv_else2
E9 %_getenv_loop_end1 # jmp %_getenv_loop_end1
 ## stdlib.c 691
:_getenv_else2  #:_getenv_else2 # no else
50               #  push_eax              # env (local)
8D85 0C000000 # lea_eax,[ebp+DWORD] %12
8B00          # mov_eax,[eax]         # ?
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # name (local)
8D85 04000000 # lea_eax,[ebp+DWORD] %4
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # len (local)
8D85 08000000 # lea_eax,[ebp+DWORD] %8
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # strncmp (function)
B8 &f_strncmp # mov_eax, &f_strncmp
81C5 10000000          #    add_ebp, %16         # ()
FFD0 #  call_eax
81ED 10000000 # sub_ebp, %16
50               #  push_eax              # 0
B8 00000000 #   mov_eax, %0
5B                # pop_ebx               # ==
39C3 #  cmp_eax_ebx
0F94C0 #    sete_al
0FB6C0 #    movzx_eax,al
85C0           #    test_eax,eax          # &&
0F84 %_getenv_and_end3 #    je %_getenv_and_end3
58 #    pop_eax
50               #  push_eax              # env (local)
8D85 0C000000 # lea_eax,[ebp+DWORD] %12
8B00          # mov_eax,[eax]         # ?
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # len (local)
8D85 08000000 # lea_eax,[ebp+DWORD] %8
8B00          # mov_eax,[eax]         # ?
5B                # pop_ebx               # +
01D8 #  add_eax,ebx
8A00           #    mov_al,[eax]          # ?1
0FB6C0 #    movzx_eax,al
0FBEC0           #  movsx_eax,al          # char
50               #  push_eax              # 61
B8 3D000000 #   mov_eax, %61
5B                # pop_ebx               # ==
39C3 #  cmp_eax_ebx
0F94C0 #    sete_al
0FB6C0 #    movzx_eax,al
:_getenv_and_end3 #:_getenv_and_end3
85C0           #    test_eax,eax          # if
58 #    pop_eax
0F84 %_getenv_else4 #   je %_getenv_else4
 ## stdlib.c 692
50               #  push_eax              # env (local)
8D85 0C000000 # lea_eax,[ebp+DWORD] %12
8B00          # mov_eax,[eax]         # ?
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # len (local)
8D85 08000000 # lea_eax,[ebp+DWORD] %8
8B00          # mov_eax,[eax]         # ?
5B                # pop_ebx               # +
01D8 #  add_eax,ebx
50               #  push_eax              # 1
B8 01000000 #   mov_eax, %1
5B                # pop_ebx               # +
01D8 #  add_eax,ebx
8B5D00          #   mov_ebx,[ebp]         # return
53 #    push_ebx
C3 #    ret
:_getenv_else4  #:_getenv_else4 # no else
50               #  push_eax              # env (local)
8D85 0C000000 # lea_eax,[ebp+DWORD] %12
50               #  push_eax              # $ (dup)
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # 4
B8 04000000 #   mov_eax, %4
5B                # pop_ebx               # +
01D8 #  add_eax,ebx
5B                # pop_ebx               # =
8903 #  mov_[ebx],eax
50               #  push_eax              # 4
B8 04000000 #   mov_eax, %4
5B                # pop_ebx               # -
29C3 #  sub_ebx,eax
89D8 #  mov_eax,ebx
58                # pop_eax               # ;
E9 %_getenv_loop1 # jmp %_getenv_loop1
:_getenv_loop_end1 #:_getenv_loop_end1
50               #  push_eax              # 0
B8 00000000 #   mov_eax, %0
8B5D00          #   mov_ebx,[ebp]         # return
53 #    push_ebx
C3 #    ret
 #
:f_qsort #:f_qsort
58 #    pop_eax
894500 #    mov_[ebp],eax
58 #    pop_eax
50               #  push_eax              # compar (local)
8D85 04000000 # lea_eax,[ebp+DWORD] %4
5B                # pop_ebx               # =:
8918 #  mov_[eax],ebx
58 #    pop_eax
50               #  push_eax              # size (local)
8D85 08000000 # lea_eax,[ebp+DWORD] %8
5B                # pop_ebx               # =:
8918 #  mov_[eax],ebx
58 #    pop_eax
50               #  push_eax              # nmemb (local)
8D85 0C000000 # lea_eax,[ebp+DWORD] %12
5B                # pop_ebx               # =:
8918 #  mov_[eax],ebx
58 #    pop_eax
50               #  push_eax              # base (local)
8D85 10000000 # lea_eax,[ebp+DWORD] %16
5B                # pop_ebx               # =:
8918 #  mov_[eax],ebx
58 #    pop_eax
 ## stdlib.c 698
50               #  push_eax              # go (local)
8D85 14000000 # lea_eax,[ebp+DWORD] %20
50               #  push_eax              # 1
B8 01000000 #   mov_eax, %1
5B                # pop_ebx               # =
8903 #  mov_[ebx],eax
58                # pop_eax               # ;
:_qsort_loop1 #:_qsort_loop1
50               #  push_eax              # go (local)
8D85 14000000 # lea_eax,[ebp+DWORD] %20
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # 1
B8 01000000 #   mov_eax, %1
5B                # pop_ebx               # ==
39C3 #  cmp_eax_ebx
0F94C0 #    sete_al
0FB6C0 #    movzx_eax,al
85C0           #    test_eax,eax          # !
0F94C0 #    sete_al
0FB6C0 #    movzx_eax,al
85C0           #    test_eax,eax          # if
58 #    pop_eax
0F84 %_qsort_else2 #    je %_qsort_else2
E9 %_qsort_loop_end1 #  jmp %_qsort_loop_end1
 ## stdlib.c 699
 ## stdlib.c 700
:_qsort_else2  #:_qsort_else2 # no else
50               #  push_eax              # go (local)
8D85 14000000 # lea_eax,[ebp+DWORD] %20
50               #  push_eax              # 0
B8 00000000 #   mov_eax, %0
5B                # pop_ebx               # =
8903 #  mov_[ebx],eax
58                # pop_eax               # ;
 ## stdlib.c 701
50               #  push_eax              # i (local)
8D85 18000000 # lea_eax,[ebp+DWORD] %24
50               #  push_eax              # 0
B8 00000000 #   mov_eax, %0
5B                # pop_ebx               # =
8903 #  mov_[ebx],eax
58                # pop_eax               # ;
:_qsort_loop3 #:_qsort_loop3
50               #  push_eax              # i (local)
8D85 18000000 # lea_eax,[ebp+DWORD] %24
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # 1
B8 01000000 #   mov_eax, %1
5B                # pop_ebx               # +
01D8 #  add_eax,ebx
50               #  push_eax              # nmemb (local)
8D85 0C000000 # lea_eax,[ebp+DWORD] %12
8B00          # mov_eax,[eax]         # ?
5B                # pop_ebx               # <s
39C3 #  cmp_eax_ebx
0F9CC0 #    setl_al
0FB6C0 #    movzx_eax,al
85C0           #    test_eax,eax          # !
0F94C0 #    sete_al
0FB6C0 #    movzx_eax,al
85C0           #    test_eax,eax          # if
58 #    pop_eax
0F84 %_qsort_else4 #    je %_qsort_else4
E9 %_qsort_loop_end3 #  jmp %_qsort_loop_end3
 ## stdlib.c 702
:_qsort_else4  #:_qsort_else4 # no else
50               #  push_eax              # arg1 (local)
8D85 1C000000 # lea_eax,[ebp+DWORD] %28
50               #  push_eax              # base (local)
8D85 10000000 # lea_eax,[ebp+DWORD] %16
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # i (local)
8D85 18000000 # lea_eax,[ebp+DWORD] %24
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # size (local)
8D85 08000000 # lea_eax,[ebp+DWORD] %8
8B00          # mov_eax,[eax]         # ?
5B                # pop_ebx               # *
F7E3 #  mul_ebx
5B                # pop_ebx               # +
01D8 #  add_eax,ebx
5B                # pop_ebx               # =
8903 #  mov_[ebx],eax
58                # pop_eax               # ;
50               #  push_eax              # arg2 (local)
8D85 20000000 # lea_eax,[ebp+DWORD] %32
50               #  push_eax              # base (local)
8D85 10000000 # lea_eax,[ebp+DWORD] %16
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # 1
B8 01000000 #   mov_eax, %1
50               #  push_eax              # i (local)
8D85 18000000 # lea_eax,[ebp+DWORD] %24
8B00          # mov_eax,[eax]         # ?
5B                # pop_ebx               # +
01D8 #  add_eax,ebx
50               #  push_eax              # size (local)
8D85 08000000 # lea_eax,[ebp+DWORD] %8
8B00          # mov_eax,[eax]         # ?
5B                # pop_ebx               # *
F7E3 #  mul_ebx
5B                # pop_ebx               # +
01D8 #  add_eax,ebx
5B                # pop_ebx               # =
8903 #  mov_[ebx],eax
58                # pop_eax               # ;
50               #  push_eax              # sign (local)
8D85 24000000 # lea_eax,[ebp+DWORD] %36
50               #  push_eax              # arg1 (local)
8D85 1C000000 # lea_eax,[ebp+DWORD] %28
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # arg2 (local)
8D85 20000000 # lea_eax,[ebp+DWORD] %32
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # compar (local)
8D85 04000000 # lea_eax,[ebp+DWORD] %4
8B00          # mov_eax,[eax]         # ?
81C5 28000000          #    add_ebp, %40         # ()
FFD0 #  call_eax
81ED 28000000 # sub_ebp, %40
5B                # pop_ebx               # =
8903 #  mov_[ebx],eax
58                # pop_eax               # ;
 ## stdlib.c 706
50               #  push_eax              # sign (local)
8D85 24000000 # lea_eax,[ebp+DWORD] %36
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # 0
B8 00000000 #   mov_eax, %0
5B                # pop_ebx               # >s
39C3 #  cmp_eax_ebx
0F9FC0 #    setg_al
0FB6C0 #    movzx_eax,al
85C0           #    test_eax,eax          # if
58 #    pop_eax
0F84 %_qsort_else5 #    je %_qsort_else5
 ## stdlib.c 707
 ## stdlib.c 708
50               #  push_eax              # go (local)
8D85 14000000 # lea_eax,[ebp+DWORD] %20
50               #  push_eax              # 1
B8 01000000 #   mov_eax, %1
5B                # pop_ebx               # =
8903 #  mov_[ebx],eax
58                # pop_eax               # ;
 ## stdlib.c 709
50               #  push_eax              # j (local)
8D85 28000000 # lea_eax,[ebp+DWORD] %40
50               #  push_eax              # 0
B8 00000000 #   mov_eax, %0
5B                # pop_ebx               # =
8903 #  mov_[ebx],eax
58                # pop_eax               # ;
:_qsort_loop6 #:_qsort_loop6
50               #  push_eax              # j (local)
8D85 28000000 # lea_eax,[ebp+DWORD] %40
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # size (local)
8D85 08000000 # lea_eax,[ebp+DWORD] %8
8B00          # mov_eax,[eax]         # ?
5B                # pop_ebx               # <s
39C3 #  cmp_eax_ebx
0F9CC0 #    setl_al
0FB6C0 #    movzx_eax,al
85C0           #    test_eax,eax          # !
0F94C0 #    sete_al
0FB6C0 #    movzx_eax,al
85C0           #    test_eax,eax          # if
58 #    pop_eax
0F84 %_qsort_else7 #    je %_qsort_else7
E9 %_qsort_loop_end6 #  jmp %_qsort_loop_end6
 ## stdlib.c 710
:_qsort_else7  #:_qsort_else7 # no else
50               #  push_eax              # j (local)
8D85 28000000 # lea_eax,[ebp+DWORD] %40
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # 3
B8 03000000 #   mov_eax, %3
5B                # pop_ebx               # +
01D8 #  add_eax,ebx
50               #  push_eax              # size (local)
8D85 08000000 # lea_eax,[ebp+DWORD] %8
8B00          # mov_eax,[eax]         # ?
5B                # pop_ebx               # <s
39C3 #  cmp_eax_ebx
0F9CC0 #    setl_al
0FB6C0 #    movzx_eax,al
85C0           #    test_eax,eax          # if
58 #    pop_eax
0F84 %_qsort_else8 #    je %_qsort_else8
 ## stdlib.c 711
50               #  push_eax              # h (local)
8D85 2C000000 # lea_eax,[ebp+DWORD] %44
50               #  push_eax              # arg1 (local)
8D85 1C000000 # lea_eax,[ebp+DWORD] %28
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # j (local)
8D85 28000000 # lea_eax,[ebp+DWORD] %40
8B00          # mov_eax,[eax]         # ?
5B                # pop_ebx               # +
01D8 #  add_eax,ebx
8B00          # mov_eax,[eax]         # ?
5B                # pop_ebx               # =
8903 #  mov_[ebx],eax
58                # pop_eax               # ;
 ## stdlib.c 714
50               #  push_eax              # arg1 (local)
8D85 1C000000 # lea_eax,[ebp+DWORD] %28
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # j (local)
8D85 28000000 # lea_eax,[ebp+DWORD] %40
8B00          # mov_eax,[eax]         # ?
5B                # pop_ebx               # +
01D8 #  add_eax,ebx
50               #  push_eax              # arg2 (local)
8D85 20000000 # lea_eax,[ebp+DWORD] %32
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # j (local)
8D85 28000000 # lea_eax,[ebp+DWORD] %40
8B00          # mov_eax,[eax]         # ?
5B                # pop_ebx               # +
01D8 #  add_eax,ebx
8B00          # mov_eax,[eax]         # ?
5B                # pop_ebx               # =
8903 #  mov_[ebx],eax
58                # pop_eax               # ;
 ## stdlib.c 715
50               #  push_eax              # arg2 (local)
8D85 20000000 # lea_eax,[ebp+DWORD] %32
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # j (local)
8D85 28000000 # lea_eax,[ebp+DWORD] %40
8B00          # mov_eax,[eax]         # ?
5B                # pop_ebx               # +
01D8 #  add_eax,ebx
50               #  push_eax              # h (local)
8D85 2C000000 # lea_eax,[ebp+DWORD] %44
8B00          # mov_eax,[eax]         # ?
5B                # pop_ebx               # =
8903 #  mov_[ebx],eax
58                # pop_eax               # ;
 ## stdlib.c 716
50               #  push_eax              # j (local)
8D85 28000000 # lea_eax,[ebp+DWORD] %40
50               #  push_eax              # $ (dup)
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # 3
B8 03000000 #   mov_eax, %3
5B                # pop_ebx               # +
01D8 #  add_eax,ebx
5B                # pop_ebx               # =
8903 #  mov_[ebx],eax
58                # pop_eax               # ;
E9 %_qsort_else_end8 #  jmp %_qsort_else_end8
:_qsort_else8 #:_qsort_else8
 ## stdlib.c 719
50               #  push_eax              # h (local)
8D85 2C000000 # lea_eax,[ebp+DWORD] %44
50               #  push_eax              # arg1 (local)
8D85 1C000000 # lea_eax,[ebp+DWORD] %28
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # j (local)
8D85 28000000 # lea_eax,[ebp+DWORD] %40
8B00          # mov_eax,[eax]         # ?
5B                # pop_ebx               # +
01D8 #  add_eax,ebx
8A00           #    mov_al,[eax]          # ?1
0FB6C0 #    movzx_eax,al
0FBEC0           #  movsx_eax,al          # char
5B                # pop_ebx               # =1
8803 #  mov_[ebx],al
58                # pop_eax               # ;
 ## stdlib.c 722
50               #  push_eax              # arg1 (local)
8D85 1C000000 # lea_eax,[ebp+DWORD] %28
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # j (local)
8D85 28000000 # lea_eax,[ebp+DWORD] %40
8B00          # mov_eax,[eax]         # ?
5B                # pop_ebx               # +
01D8 #  add_eax,ebx
50               #  push_eax              # arg2 (local)
8D85 20000000 # lea_eax,[ebp+DWORD] %32
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # j (local)
8D85 28000000 # lea_eax,[ebp+DWORD] %40
8B00          # mov_eax,[eax]         # ?
5B                # pop_ebx               # +
01D8 #  add_eax,ebx
8A00           #    mov_al,[eax]          # ?1
0FB6C0 #    movzx_eax,al
0FBEC0           #  movsx_eax,al          # char
5B                # pop_ebx               # =1
8803 #  mov_[ebx],al
58                # pop_eax               # ;
 ## stdlib.c 723
50               #  push_eax              # arg2 (local)
8D85 20000000 # lea_eax,[ebp+DWORD] %32
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # j (local)
8D85 28000000 # lea_eax,[ebp+DWORD] %40
8B00          # mov_eax,[eax]         # ?
5B                # pop_ebx               # +
01D8 #  add_eax,ebx
50               #  push_eax              # h (local)
8D85 2C000000 # lea_eax,[ebp+DWORD] %44
8A00           #    mov_al,[eax]          # ?1
0FB6C0 #    movzx_eax,al
0FBEC0           #  movsx_eax,al          # char
5B                # pop_ebx               # =1
8803 #  mov_[ebx],al
58                # pop_eax               # ;
:_qsort_else_end8 #:_qsort_else_end8
50               #  push_eax              # j (local)
8D85 28000000 # lea_eax,[ebp+DWORD] %40
50               #  push_eax              # $ (dup)
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # 1
B8 01000000 #   mov_eax, %1
5B                # pop_ebx               # +
01D8 #  add_eax,ebx
5B                # pop_ebx               # =
8903 #  mov_[ebx],eax
50               #  push_eax              # 1
B8 01000000 #   mov_eax, %1
5B                # pop_ebx               # -
29C3 #  sub_ebx,eax
89D8 #  mov_eax,ebx
58                # pop_eax               # ;
E9 %_qsort_loop6 #  jmp %_qsort_loop6
:_qsort_loop_end6 #:_qsort_loop_end6
:_qsort_else5  #:_qsort_else5 # no else
50               #  push_eax              # i (local)
8D85 18000000 # lea_eax,[ebp+DWORD] %24
50               #  push_eax              # $ (dup)
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # 1
B8 01000000 #   mov_eax, %1
5B                # pop_ebx               # +
01D8 #  add_eax,ebx
5B                # pop_ebx               # =
8903 #  mov_[ebx],eax
50               #  push_eax              # 1
B8 01000000 #   mov_eax, %1
5B                # pop_ebx               # -
29C3 #  sub_ebx,eax
89D8 #  mov_eax,ebx
58                # pop_eax               # ;
E9 %_qsort_loop3 #  jmp %_qsort_loop3
:_qsort_loop_end3 #:_qsort_loop_end3
E9 %_qsort_loop1 #  jmp %_qsort_loop1
:_qsort_loop_end1 #:_qsort_loop_end1
50               #  push_eax              # 0
B8 00000000 #   mov_eax, %0
8B5D00          #   mov_ebx,[ebp]         # return
53 #    push_ebx
C3 #    ret
 #
:f_time #:f_time
58 #    pop_eax
894500 #    mov_[ebp],eax
58 #    pop_eax
50               #  push_eax              # tloc (local)
8D85 04000000 # lea_eax,[ebp+DWORD] %4
5B                # pop_ebx               # =:
8918 #  mov_[eax],ebx
58 #    pop_eax
 ## stdlib.c 733
50               #  push_eax              # stderr (global)
B8 &g_stderr #  mov_eax, &g_stderr
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # 'TODO time\n'
B8 &string_5 #  mov_eax, &string_5
50               #  push_eax              # 0
B8 00000000 #   mov_eax, %0
50               #  push_eax              # fprintf (function)
B8 &f_fprintf # mov_eax, &f_fprintf
81C5 08000000          #    add_ebp, %8         # ()
FFD0 #  call_eax
81ED 08000000 # sub_ebp, %8
58                # pop_eax               # ;
 ## stdlib.c 733
50               #  push_eax              # 1
B8 01000000 #   mov_eax, %1
50               #  push_eax              # exit (function)
B8 &f_exit #    mov_eax, &f_exit
81C5 08000000          #    add_ebp, %8         # ()
FFD0 #  call_eax
81ED 08000000 # sub_ebp, %8
58                # pop_eax               # ;
50               #  push_eax              # 0
B8 00000000 #   mov_eax, %0
8B5D00          #   mov_ebx,[ebp]         # return
53 #    push_ebx
C3 #    ret
 #
:f_setjmp #:f_setjmp
58 #    pop_eax
894500 #    mov_[ebp],eax
58 #    pop_eax
50               #  push_eax              # env (local)
8D85 04000000 # lea_eax,[ebp+DWORD] %4
5B                # pop_ebx               # =:
8918 #  mov_[eax],ebx
58 #    pop_eax
 ## stdlib.c 739
50               #  push_eax              # stderr (global)
B8 &g_stderr #  mov_eax, &g_stderr
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # 'TODO setjmp\n'
B8 &string_7 #  mov_eax, &string_7
50               #  push_eax              # 0
B8 00000000 #   mov_eax, %0
50               #  push_eax              # fprintf (function)
B8 &f_fprintf # mov_eax, &f_fprintf
81C5 08000000          #    add_ebp, %8         # ()
FFD0 #  call_eax
81ED 08000000 # sub_ebp, %8
58                # pop_eax               # ;
 ## stdlib.c 739
50               #  push_eax              # 1
B8 01000000 #   mov_eax, %1
50               #  push_eax              # exit (function)
B8 &f_exit #    mov_eax, &f_exit
81C5 08000000          #    add_ebp, %8         # ()
FFD0 #  call_eax
81ED 08000000 # sub_ebp, %8
58                # pop_eax               # ;
 ## stdlib.c 740
50               #  push_eax              # 0
B8 00000000 #   mov_eax, %0
8B5D00          #   mov_ebx,[ebp]         # return
53 #    push_ebx
C3 #    ret
50               #  push_eax              # 0
B8 00000000 #   mov_eax, %0
8B5D00          #   mov_ebx,[ebp]         # return
53 #    push_ebx
C3 #    ret
 #
:f_longjmp #:f_longjmp
58 #    pop_eax
894500 #    mov_[ebp],eax
58 #    pop_eax
50               #  push_eax              # val (local)
8D85 04000000 # lea_eax,[ebp+DWORD] %4
5B                # pop_ebx               # =:
8918 #  mov_[eax],ebx
58 #    pop_eax
50               #  push_eax              # env (local)
8D85 08000000 # lea_eax,[ebp+DWORD] %8
5B                # pop_ebx               # =:
8918 #  mov_[eax],ebx
58 #    pop_eax
 ## stdlib.c 746
50               #  push_eax              # stderr (global)
B8 &g_stderr #  mov_eax, &g_stderr
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # 'TODO longjmp\n'
B8 &string_8 #  mov_eax, &string_8
50               #  push_eax              # 0
B8 00000000 #   mov_eax, %0
50               #  push_eax              # fprintf (function)
B8 &f_fprintf # mov_eax, &f_fprintf
81C5 0C000000          #    add_ebp, %12         # ()
FFD0 #  call_eax
81ED 0C000000 # sub_ebp, %12
58                # pop_eax               # ;
 ## stdlib.c 746
50               #  push_eax              # 0
B8 00000000 #   mov_eax, %0
50               #  push_eax              # exit (function)
B8 &f_exit #    mov_eax, &f_exit
81C5 0C000000          #    add_ebp, %12         # ()
FFD0 #  call_eax
81ED 0C000000 # sub_ebp, %12
58                # pop_eax               # ;
 ## stdlib.c 747
50               #  push_eax              # 4294967295
B8 FFFFFFFF #   mov_eax, %4294967295
50               #  push_eax              # exit (function)
B8 &f_exit #    mov_eax, &f_exit
81C5 0C000000          #    add_ebp, %12         # ()
FFD0 #  call_eax
81ED 0C000000 # sub_ebp, %12
58                # pop_eax               # ;
50               #  push_eax              # 0
B8 00000000 #   mov_eax, %0
8B5D00          #   mov_ebx,[ebp]         # return
53 #    push_ebx
C3 #    ret
 #
:f_unlink #:f_unlink
58 #    pop_eax
894500 #    mov_[ebp],eax
58 #    pop_eax
50               #  push_eax              # pathname (local)
8D85 04000000 # lea_eax,[ebp+DWORD] %4
5B                # pop_ebx               # =:
8918 #  mov_[eax],ebx
58 #    pop_eax
 ## stdlib.c 752
50               #  push_eax              # 10
B8 0A000000 #   mov_eax, %10
50               #  push_eax              # pathname (local)
8D85 04000000 # lea_eax,[ebp+DWORD] %4
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # 0
B8 00000000 #   mov_eax, %0
50               #  push_eax              # 0
B8 00000000 #   mov_eax, %0
50               #  push_eax              # sys_int80 (function)
B8 &f_sys_int80 #   mov_eax, &f_sys_int80
81C5 08000000          #    add_ebp, %8         # ()
FFD0 #  call_eax
81ED 08000000 # sub_ebp, %8
8B5D00          #   mov_ebx,[ebp]         # return
53 #    push_ebx
C3 #    ret
50               #  push_eax              # 0
B8 00000000 #   mov_eax, %0
8B5D00          #   mov_ebx,[ebp]         # return
53 #    push_ebx
C3 #    ret
 #
:f_sscanf #:f_sscanf
58 #    pop_eax
894500 #    mov_[ebp],eax
58 #    pop_eax
50               #  push_eax              # __var_args (local)
8D85 04000000 # lea_eax,[ebp+DWORD] %4
5B                # pop_ebx               # =:
8918 #  mov_[eax],ebx
58 #    pop_eax
50               #  push_eax              # format (local)
8D85 08000000 # lea_eax,[ebp+DWORD] %8
5B                # pop_ebx               # =:
8918 #  mov_[eax],ebx
58 #    pop_eax
50               #  push_eax              # str (local)
8D85 0C000000 # lea_eax,[ebp+DWORD] %12
5B                # pop_ebx               # =:
8918 #  mov_[eax],ebx
58 #    pop_eax
 ## stdlib.c 758
50               #  push_eax              # ap (local)
8D85 10000000 # lea_eax,[ebp+DWORD] %16
50               #  push_eax              # __var_args (local)
8D85 04000000 # lea_eax,[ebp+DWORD] %4
8B00          # mov_eax,[eax]         # ?
5B                # pop_ebx               # =
8903 #  mov_[ebx],eax
58                # pop_eax               # ;
50               #  push_eax              # args_parsed (local)
8D85 14000000 # lea_eax,[ebp+DWORD] %20
50               #  push_eax              # 0
B8 00000000 #   mov_eax, %0
5B                # pop_ebx               # =
8903 #  mov_[ebx],eax
58                # pop_eax               # ;
 ## stdlib.c 762
:_sscanf_loop1 #:_sscanf_loop1
50               #  push_eax              # format (local)
8D85 08000000 # lea_eax,[ebp+DWORD] %8
8B00          # mov_eax,[eax]         # ?
8A00           #    mov_al,[eax]          # ?1
0FB6C0 #    movzx_eax,al
0FBEC0           #  movsx_eax,al          # char
50               #  push_eax              # 0
B8 00000000 #   mov_eax, %0
5B                # pop_ebx               # !=
39C3 #  cmp_eax_ebx
0F95C0 #    setne_al
0FB6C0 #    movzx_eax,al
85C0           #    test_eax,eax          # !
0F94C0 #    sete_al
0FB6C0 #    movzx_eax,al
85C0           #    test_eax,eax          # if
58 #    pop_eax
0F84 %_sscanf_else2 #   je %_sscanf_else2
E9 %_sscanf_loop_end1 # jmp %_sscanf_loop_end1
 ## stdlib.c 763
:_sscanf_else2  #:_sscanf_else2 # no else
50               #  push_eax              # str (local)
8D85 0C000000 # lea_eax,[ebp+DWORD] %12
8B00          # mov_eax,[eax]         # ?
8A00           #    mov_al,[eax]          # ?1
0FB6C0 #    movzx_eax,al
0FBEC0           #  movsx_eax,al          # char
50               #  push_eax              # 0
B8 00000000 #   mov_eax, %0
5B                # pop_ebx               # ==
39C3 #  cmp_eax_ebx
0F94C0 #    sete_al
0FB6C0 #    movzx_eax,al
85C0           #    test_eax,eax          # if
58 #    pop_eax
0F84 %_sscanf_else3 #   je %_sscanf_else3
 ## stdlib.c 764
E9 %_sscanf_loop_end1 # jmp %_sscanf_loop_end1
E9 %_sscanf_else_end3 # jmp %_sscanf_else_end3
:_sscanf_else3 #:_sscanf_else3
 ## stdlib.c 765
50               #  push_eax              # format (local)
8D85 08000000 # lea_eax,[ebp+DWORD] %8
8B00          # mov_eax,[eax]         # ?
8A00           #    mov_al,[eax]          # ?1
0FB6C0 #    movzx_eax,al
0FBEC0           #  movsx_eax,al          # char
50               #  push_eax              # 37
B8 25000000 #   mov_eax, %37
5B                # pop_ebx               # ==
39C3 #  cmp_eax_ebx
0F94C0 #    sete_al
0FB6C0 #    movzx_eax,al
85C0           #    test_eax,eax          # if
58 #    pop_eax
0F84 %_sscanf_else4 #   je %_sscanf_else4
 ## stdlib.c 766
 ## stdlib.c 767
50               #  push_eax              # format (local)
8D85 08000000 # lea_eax,[ebp+DWORD] %8
50               #  push_eax              # $ (dup)
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # 1
B8 01000000 #   mov_eax, %1
5B                # pop_ebx               # +
01D8 #  add_eax,ebx
5B                # pop_ebx               # =
8903 #  mov_[ebx],eax
50               #  push_eax              # 1
B8 01000000 #   mov_eax, %1
5B                # pop_ebx               # -
29C3 #  sub_ebx,eax
89D8 #  mov_eax,ebx
58                # pop_eax               # ;
 ## stdlib.c 768
50               #  push_eax              # format (local)
8D85 08000000 # lea_eax,[ebp+DWORD] %8
8B00          # mov_eax,[eax]         # ?
8A00           #    mov_al,[eax]          # ?1
0FB6C0 #    movzx_eax,al
0FBEC0           #  movsx_eax,al          # char
50               #  push_eax              # 100
B8 64000000 #   mov_eax, %100
5B                # pop_ebx               # ==
39C3 #  cmp_eax_ebx
0F94C0 #    sete_al
0FB6C0 #    movzx_eax,al
85C0           #    test_eax,eax          # if
58 #    pop_eax
0F84 %_sscanf_else5 #   je %_sscanf_else5
 ## stdlib.c 769
 ## stdlib.c 770
50               #  push_eax              # format (local)
8D85 08000000 # lea_eax,[ebp+DWORD] %8
50               #  push_eax              # $ (dup)
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # 1
B8 01000000 #   mov_eax, %1
5B                # pop_ebx               # +
01D8 #  add_eax,ebx
5B                # pop_ebx               # =
8903 #  mov_[ebx],eax
50               #  push_eax              # 1
B8 01000000 #   mov_eax, %1
5B                # pop_ebx               # -
29C3 #  sub_ebx,eax
89D8 #  mov_eax,ebx
58                # pop_eax               # ;
50               #  push_eax              # v (local)
8D85 18000000 # lea_eax,[ebp+DWORD] %24
50               #  push_eax              # 0
B8 00000000 #   mov_eax, %0
5B                # pop_ebx               # =
8903 #  mov_[ebx],eax
58                # pop_eax               # ;
 ## stdlib.c 772
:_sscanf_loop6 #:_sscanf_loop6
50               #  push_eax              # 48
B8 30000000 #   mov_eax, %48
50               #  push_eax              # str (local)
8D85 0C000000 # lea_eax,[ebp+DWORD] %12
8B00          # mov_eax,[eax]         # ?
8A00           #    mov_al,[eax]          # ?1
0FB6C0 #    movzx_eax,al
0FBEC0           #  movsx_eax,al          # char
5B                # pop_ebx               # <=s
39C3 #  cmp_eax_ebx
0F9EC0 #    setle_al
0FB6C0 #    movzx_eax,al
85C0           #    test_eax,eax          # &&
0F84 %_sscanf_and_end7 #    je %_sscanf_and_end7
58 #    pop_eax
50               #  push_eax              # str (local)
8D85 0C000000 # lea_eax,[ebp+DWORD] %12
8B00          # mov_eax,[eax]         # ?
8A00           #    mov_al,[eax]          # ?1
0FB6C0 #    movzx_eax,al
0FBEC0           #  movsx_eax,al          # char
50               #  push_eax              # 57
B8 39000000 #   mov_eax, %57
5B                # pop_ebx               # <=s
39C3 #  cmp_eax_ebx
0F9EC0 #    setle_al
0FB6C0 #    movzx_eax,al
:_sscanf_and_end7 #:_sscanf_and_end7
85C0           #    test_eax,eax          # !
0F94C0 #    sete_al
0FB6C0 #    movzx_eax,al
85C0           #    test_eax,eax          # if
58 #    pop_eax
0F84 %_sscanf_else8 #   je %_sscanf_else8
E9 %_sscanf_loop_end6 # jmp %_sscanf_loop_end6
 ## stdlib.c 773
 ## stdlib.c 774
:_sscanf_else8  #:_sscanf_else8 # no else
50               #  push_eax              # v (local)
8D85 18000000 # lea_eax,[ebp+DWORD] %24
50               #  push_eax              # 10
B8 0A000000 #   mov_eax, %10
50               #  push_eax              # v (local)
8D85 18000000 # lea_eax,[ebp+DWORD] %24
8B00          # mov_eax,[eax]         # ?
5B                # pop_ebx               # *
F7E3 #  mul_ebx
50               #  push_eax              # str (local)
8D85 0C000000 # lea_eax,[ebp+DWORD] %12
8B00          # mov_eax,[eax]         # ?
8A00           #    mov_al,[eax]          # ?1
0FB6C0 #    movzx_eax,al
0FBEC0           #  movsx_eax,al          # char
5B                # pop_ebx               # +
01D8 #  add_eax,ebx
50               #  push_eax              # 48
B8 30000000 #   mov_eax, %48
5B                # pop_ebx               # -
29C3 #  sub_ebx,eax
89D8 #  mov_eax,ebx
5B                # pop_ebx               # =
8903 #  mov_[ebx],eax
58                # pop_eax               # ;
 ## stdlib.c 775
50               #  push_eax              # str (local)
8D85 0C000000 # lea_eax,[ebp+DWORD] %12
50               #  push_eax              # $ (dup)
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # 1
B8 01000000 #   mov_eax, %1
5B                # pop_ebx               # +
01D8 #  add_eax,ebx
5B                # pop_ebx               # =
8903 #  mov_[ebx],eax
50               #  push_eax              # 1
B8 01000000 #   mov_eax, %1
5B                # pop_ebx               # -
29C3 #  sub_ebx,eax
89D8 #  mov_eax,ebx
58                # pop_eax               # ;
E9 %_sscanf_loop6 # jmp %_sscanf_loop6
:_sscanf_loop_end6 #:_sscanf_loop_end6
 ## stdlib.c 777
50               #  push_eax              # ap (local)
8D85 10000000 # lea_eax,[ebp+DWORD] %16
8B00          # mov_eax,[eax]         # ?
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # v (local)
8D85 18000000 # lea_eax,[ebp+DWORD] %24
8B00          # mov_eax,[eax]         # ?
5B                # pop_ebx               # =
8903 #  mov_[ebx],eax
58                # pop_eax               # ;
 ## stdlib.c 778
50               #  push_eax              # ap (local)
8D85 10000000 # lea_eax,[ebp+DWORD] %16
50               #  push_eax              # $ (dup)
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # 4
B8 04000000 #   mov_eax, %4
5B                # pop_ebx               # +
01D8 #  add_eax,ebx
5B                # pop_ebx               # =
8903 #  mov_[ebx],eax
50               #  push_eax              # 4
B8 04000000 #   mov_eax, %4
5B                # pop_ebx               # -
29C3 #  sub_ebx,eax
89D8 #  mov_eax,ebx
58                # pop_eax               # ;
 ## stdlib.c 779
50               #  push_eax              # args_parsed (local)
8D85 14000000 # lea_eax,[ebp+DWORD] %20
50               #  push_eax              # $ (dup)
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # 1
B8 01000000 #   mov_eax, %1
5B                # pop_ebx               # +
01D8 #  add_eax,ebx
5B                # pop_ebx               # =
8903 #  mov_[ebx],eax
50               #  push_eax              # 1
B8 01000000 #   mov_eax, %1
5B                # pop_ebx               # -
29C3 #  sub_ebx,eax
89D8 #  mov_eax,ebx
58                # pop_eax               # ;
E9 %_sscanf_else_end5 # jmp %_sscanf_else_end5
:_sscanf_else5 #:_sscanf_else5
 ## stdlib.c 782
 ## stdlib.c 783
50               #  push_eax              # stderr (global)
B8 &g_stderr #  mov_eax, &g_stderr
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # 'sscanf: format %%%c not supported\n'
B8 &string_9 #  mov_eax, &string_9
50               #  push_eax              # __var_args (local)
8D85 18000000 # lea_eax,[ebp+DWORD] %24
50               #  push_eax              # format (local)
8D85 08000000 # lea_eax,[ebp+DWORD] %8
8B00          # mov_eax,[eax]         # ?
8A00           #    mov_al,[eax]          # ?1
0FB6C0 #    movzx_eax,al
0FBEC0           #  movsx_eax,al          # char
5B                # pop_ebx               # =
8903 #  mov_[ebx],eax
58                # pop_eax               # ;
50               #  push_eax              # __var_args (local)
8D85 18000000 # lea_eax,[ebp+DWORD] %24
50               #  push_eax              # fprintf (function)
B8 &f_fprintf # mov_eax, &f_fprintf
81C5 1C000000          #    add_ebp, %28         # ()
FFD0 #  call_eax
81ED 1C000000 # sub_ebp, %28
58                # pop_eax               # ;
 ## stdlib.c 784
50               #  push_eax              # 1
B8 01000000 #   mov_eax, %1
50               #  push_eax              # exit (function)
B8 &f_exit #    mov_eax, &f_exit
81C5 18000000          #    add_ebp, %24         # ()
FFD0 #  call_eax
81ED 18000000 # sub_ebp, %24
58                # pop_eax               # ;
:_sscanf_else_end5 #:_sscanf_else_end5
E9 %_sscanf_else_end4 # jmp %_sscanf_else_end4
:_sscanf_else4 #:_sscanf_else4
 ## stdlib.c 788
 ## stdlib.c 789
50               #  push_eax              # format (local)
8D85 08000000 # lea_eax,[ebp+DWORD] %8
8B00          # mov_eax,[eax]         # ?
8A00           #    mov_al,[eax]          # ?1
0FB6C0 #    movzx_eax,al
0FBEC0           #  movsx_eax,al          # char
50               #  push_eax              # str (local)
8D85 0C000000 # lea_eax,[ebp+DWORD] %12
8B00          # mov_eax,[eax]         # ?
8A00           #    mov_al,[eax]          # ?1
0FB6C0 #    movzx_eax,al
0FBEC0           #  movsx_eax,al          # char
5B                # pop_ebx               # !=
39C3 #  cmp_eax_ebx
0F95C0 #    setne_al
0FB6C0 #    movzx_eax,al
85C0           #    test_eax,eax          # if
58 #    pop_eax
0F84 %_sscanf_else9 #   je %_sscanf_else9
 ## stdlib.c 790
E9 %_sscanf_loop_end1 # jmp %_sscanf_loop_end1
 ## stdlib.c 791
:_sscanf_else9  #:_sscanf_else9 # no else
50               #  push_eax              # format (local)
8D85 08000000 # lea_eax,[ebp+DWORD] %8
50               #  push_eax              # $ (dup)
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # 1
B8 01000000 #   mov_eax, %1
5B                # pop_ebx               # +
01D8 #  add_eax,ebx
5B                # pop_ebx               # =
8903 #  mov_[ebx],eax
50               #  push_eax              # 1
B8 01000000 #   mov_eax, %1
5B                # pop_ebx               # -
29C3 #  sub_ebx,eax
89D8 #  mov_eax,ebx
58                # pop_eax               # ;
 ## stdlib.c 792
50               #  push_eax              # str (local)
8D85 0C000000 # lea_eax,[ebp+DWORD] %12
50               #  push_eax              # $ (dup)
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # 1
B8 01000000 #   mov_eax, %1
5B                # pop_ebx               # +
01D8 #  add_eax,ebx
5B                # pop_ebx               # =
8903 #  mov_[ebx],eax
50               #  push_eax              # 1
B8 01000000 #   mov_eax, %1
5B                # pop_ebx               # -
29C3 #  sub_ebx,eax
89D8 #  mov_eax,ebx
58                # pop_eax               # ;
:_sscanf_else_end4 #:_sscanf_else_end4
:_sscanf_else_end3 #:_sscanf_else_end3
E9 %_sscanf_loop1 # jmp %_sscanf_loop1
:_sscanf_loop_end1 #:_sscanf_loop_end1
 ## stdlib.c 794
50               #  push_eax              # args_parsed (local)
8D85 14000000 # lea_eax,[ebp+DWORD] %20
8B00          # mov_eax,[eax]         # ?
8B5D00          #   mov_ebx,[ebp]         # return
53 #    push_ebx
C3 #    ret
50               #  push_eax              # 0
B8 00000000 #   mov_eax, %0
8B5D00          #   mov_ebx,[ebp]         # return
53 #    push_ebx
C3 #    ret
 #
:f_atoi #:f_atoi
58 #    pop_eax
894500 #    mov_[ebp],eax
58 #    pop_eax
50               #  push_eax              # nptr (local)
8D85 04000000 # lea_eax,[ebp+DWORD] %4
5B                # pop_ebx               # =:
8918 #  mov_[eax],ebx
58 #    pop_eax
 ## stdlib.c 800
50               #  push_eax              # stderr (global)
B8 &g_stderr #  mov_eax, &g_stderr
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # 'TODO atoi\n'
B8 &string_10 # mov_eax, &string_10
50               #  push_eax              # 0
B8 00000000 #   mov_eax, %0
50               #  push_eax              # fprintf (function)
B8 &f_fprintf # mov_eax, &f_fprintf
81C5 08000000          #    add_ebp, %8         # ()
FFD0 #  call_eax
81ED 08000000 # sub_ebp, %8
58                # pop_eax               # ;
 ## stdlib.c 800
50               #  push_eax              # 1
B8 01000000 #   mov_eax, %1
50               #  push_eax              # exit (function)
B8 &f_exit #    mov_eax, &f_exit
81C5 08000000          #    add_ebp, %8         # ()
FFD0 #  call_eax
81ED 08000000 # sub_ebp, %8
58                # pop_eax               # ;
50               #  push_eax              # 0
B8 00000000 #   mov_eax, %0
8B5D00          #   mov_ebx,[ebp]         # return
53 #    push_ebx
C3 #    ret
 #
:f_remove #:f_remove
58 #    pop_eax
894500 #    mov_[ebp],eax
58 #    pop_eax
50               #  push_eax              # pathname (local)
8D85 04000000 # lea_eax,[ebp+DWORD] %4
5B                # pop_ebx               # =:
8918 #  mov_[eax],ebx
58 #    pop_eax
 ## stdlib.c 805
50               #  push_eax              # 10
B8 0A000000 #   mov_eax, %10
50               #  push_eax              # pathname (local)
8D85 04000000 # lea_eax,[ebp+DWORD] %4
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # 0
B8 00000000 #   mov_eax, %0
50               #  push_eax              # 0
B8 00000000 #   mov_eax, %0
50               #  push_eax              # sys_int80 (function)
B8 &f_sys_int80 #   mov_eax, &f_sys_int80
81C5 08000000          #    add_ebp, %8         # ()
FFD0 #  call_eax
81ED 08000000 # sub_ebp, %8
8B5D00          #   mov_ebx,[ebp]         # return
53 #    push_ebx
C3 #    ret
50               #  push_eax              # 0
B8 00000000 #   mov_eax, %0
8B5D00          #   mov_ebx,[ebp]         # return
53 #    push_ebx
C3 #    ret
 #
:f_execvp #:f_execvp
58 #    pop_eax
894500 #    mov_[ebp],eax
58 #    pop_eax
50               #  push_eax              # argv (local)
8D85 04000000 # lea_eax,[ebp+DWORD] %4
5B                # pop_ebx               # =:
8918 #  mov_[eax],ebx
58 #    pop_eax
50               #  push_eax              # file (local)
8D85 08000000 # lea_eax,[ebp+DWORD] %8
5B                # pop_ebx               # =:
8918 #  mov_[eax],ebx
58 #    pop_eax
 ## stdlib.c 811
50               #  push_eax              # stderr (global)
B8 &g_stderr #  mov_eax, &g_stderr
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # 'TODO execvp\n'
B8 &string_11 # mov_eax, &string_11
50               #  push_eax              # 0
B8 00000000 #   mov_eax, %0
50               #  push_eax              # fprintf (function)
B8 &f_fprintf # mov_eax, &f_fprintf
81C5 0C000000          #    add_ebp, %12         # ()
FFD0 #  call_eax
81ED 0C000000 # sub_ebp, %12
58                # pop_eax               # ;
 ## stdlib.c 811
50               #  push_eax              # 1
B8 01000000 #   mov_eax, %1
50               #  push_eax              # exit (function)
B8 &f_exit #    mov_eax, &f_exit
81C5 0C000000          #    add_ebp, %12         # ()
FFD0 #  call_eax
81ED 0C000000 # sub_ebp, %12
58                # pop_eax               # ;
50               #  push_eax              # 0
B8 00000000 #   mov_eax, %0
8B5D00          #   mov_ebx,[ebp]         # return
53 #    push_ebx
C3 #    ret
 #
:f_mkdir #:f_mkdir
58 #    pop_eax
894500 #    mov_[ebp],eax
58 #    pop_eax
50               #  push_eax              # mode (local)
8D85 04000000 # lea_eax,[ebp+DWORD] %4
5B                # pop_ebx               # =:
8918 #  mov_[eax],ebx
58 #    pop_eax
50               #  push_eax              # pathname (local)
8D85 08000000 # lea_eax,[ebp+DWORD] %8
5B                # pop_ebx               # =:
8918 #  mov_[eax],ebx
58 #    pop_eax
 ## stdlib.c 816
50               #  push_eax              # 39
B8 27000000 #   mov_eax, %39
50               #  push_eax              # pathname (local)
8D85 08000000 # lea_eax,[ebp+DWORD] %8
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # mode (local)
8D85 04000000 # lea_eax,[ebp+DWORD] %4
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # 0
B8 00000000 #   mov_eax, %0
50               #  push_eax              # sys_int80 (function)
B8 &f_sys_int80 #   mov_eax, &f_sys_int80
81C5 0C000000          #    add_ebp, %12         # ()
FFD0 #  call_eax
81ED 0C000000 # sub_ebp, %12
8B5D00          #   mov_ebx,[ebp]         # return
53 #    push_ebx
C3 #    ret
50               #  push_eax              # 0
B8 00000000 #   mov_eax, %0
8B5D00          #   mov_ebx,[ebp]         # return
53 #    push_ebx
C3 #    ret
 #
:f_chdir #:f_chdir
58 #    pop_eax
894500 #    mov_[ebp],eax
58 #    pop_eax
50               #  push_eax              # path (local)
8D85 04000000 # lea_eax,[ebp+DWORD] %4
5B                # pop_ebx               # =:
8918 #  mov_[eax],ebx
58 #    pop_eax
 ## stdlib.c 821
50               #  push_eax              # 12
B8 0C000000 #   mov_eax, %12
50               #  push_eax              # path (local)
8D85 04000000 # lea_eax,[ebp+DWORD] %4
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # 0
B8 00000000 #   mov_eax, %0
50               #  push_eax              # 0
B8 00000000 #   mov_eax, %0
50               #  push_eax              # sys_int80 (function)
B8 &f_sys_int80 #   mov_eax, &f_sys_int80
81C5 08000000          #    add_ebp, %8         # ()
FFD0 #  call_eax
81ED 08000000 # sub_ebp, %8
58                # pop_eax               # ;
50               #  push_eax              # 0
B8 00000000 #   mov_eax, %0
8B5D00          #   mov_ebx,[ebp]         # return
53 #    push_ebx
C3 #    ret
 #
:f_access #:f_access
58 #    pop_eax
894500 #    mov_[ebp],eax
58 #    pop_eax
50               #  push_eax              # mode (local)
8D85 04000000 # lea_eax,[ebp+DWORD] %4
5B                # pop_ebx               # =:
8918 #  mov_[eax],ebx
58 #    pop_eax
50               #  push_eax              # filename (local)
8D85 08000000 # lea_eax,[ebp+DWORD] %8
5B                # pop_ebx               # =:
8918 #  mov_[eax],ebx
58 #    pop_eax
 ## stdlib.c 826
50               #  push_eax              # 33
B8 21000000 #   mov_eax, %33
50               #  push_eax              # filename (local)
8D85 08000000 # lea_eax,[ebp+DWORD] %8
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # mode (local)
8D85 04000000 # lea_eax,[ebp+DWORD] %4
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # 0
B8 00000000 #   mov_eax, %0
50               #  push_eax              # sys_int80 (function)
B8 &f_sys_int80 #   mov_eax, &f_sys_int80
81C5 0C000000          #    add_ebp, %12         # ()
FFD0 #  call_eax
81ED 0C000000 # sub_ebp, %12
8B5D00          #   mov_ebx,[ebp]         # return
53 #    push_ebx
C3 #    ret
50               #  push_eax              # 0
B8 00000000 #   mov_eax, %0
8B5D00          #   mov_ebx,[ebp]         # return
53 #    push_ebx
C3 #    ret
 #
:f_chmod #:f_chmod
58 #    pop_eax
894500 #    mov_[ebp],eax
58 #    pop_eax
50               #  push_eax              # mode (local)
8D85 04000000 # lea_eax,[ebp+DWORD] %4
5B                # pop_ebx               # =:
8918 #  mov_[eax],ebx
58 #    pop_eax
50               #  push_eax              # filename (local)
8D85 08000000 # lea_eax,[ebp+DWORD] %8
5B                # pop_ebx               # =:
8918 #  mov_[eax],ebx
58 #    pop_eax
 ## stdlib.c 831
50               #  push_eax              # 15
B8 0F000000 #   mov_eax, %15
50               #  push_eax              # filename (local)
8D85 08000000 # lea_eax,[ebp+DWORD] %8
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # mode (local)
8D85 04000000 # lea_eax,[ebp+DWORD] %4
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # 0
B8 00000000 #   mov_eax, %0
50               #  push_eax              # sys_int80 (function)
B8 &f_sys_int80 #   mov_eax, &f_sys_int80
81C5 0C000000          #    add_ebp, %12         # ()
FFD0 #  call_eax
81ED 0C000000 # sub_ebp, %12
8B5D00          #   mov_ebx,[ebp]         # return
53 #    push_ebx
C3 #    ret
50               #  push_eax              # 0
B8 00000000 #   mov_eax, %0
8B5D00          #   mov_ebx,[ebp]         # return
53 #    push_ebx
C3 #    ret
 #
:f_symlink #:f_symlink
58 #    pop_eax
894500 #    mov_[ebp],eax
58 #    pop_eax
50               #  push_eax              # linkpath (local)
8D85 04000000 # lea_eax,[ebp+DWORD] %4
5B                # pop_ebx               # =:
8918 #  mov_[eax],ebx
58 #    pop_eax
50               #  push_eax              # target (local)
8D85 08000000 # lea_eax,[ebp+DWORD] %8
5B                # pop_ebx               # =:
8918 #  mov_[eax],ebx
58 #    pop_eax
 ## stdlib.c 836
50               #  push_eax              # 83
B8 53000000 #   mov_eax, %83
50               #  push_eax              # target (local)
8D85 08000000 # lea_eax,[ebp+DWORD] %8
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # linkpath (local)
8D85 04000000 # lea_eax,[ebp+DWORD] %4
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # 0
B8 00000000 #   mov_eax, %0
50               #  push_eax              # sys_int80 (function)
B8 &f_sys_int80 #   mov_eax, &f_sys_int80
81C5 0C000000          #    add_ebp, %12         # ()
FFD0 #  call_eax
81ED 0C000000 # sub_ebp, %12
8B5D00          #   mov_ebx,[ebp]         # return
53 #    push_ebx
C3 #    ret
50               #  push_eax              # 0
B8 00000000 #   mov_eax, %0
8B5D00          #   mov_ebx,[ebp]         # return
53 #    push_ebx
C3 #    ret
 #
:f_uname #:f_uname
58 #    pop_eax
894500 #    mov_[ebp],eax
58 #    pop_eax
50               #  push_eax              # buf (local)
8D85 04000000 # lea_eax,[ebp+DWORD] %4
5B                # pop_ebx               # =:
8918 #  mov_[eax],ebx
58 #    pop_eax
 ## stdlib.c 854
50               #  push_eax              # 109
B8 6D000000 #   mov_eax, %109
50               #  push_eax              # buf (local)
8D85 04000000 # lea_eax,[ebp+DWORD] %4
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # 0
B8 00000000 #   mov_eax, %0
50               #  push_eax              # 0
B8 00000000 #   mov_eax, %0
50               #  push_eax              # sys_int80 (function)
B8 &f_sys_int80 #   mov_eax, &f_sys_int80
81C5 08000000          #    add_ebp, %8         # ()
FFD0 #  call_eax
81ED 08000000 # sub_ebp, %8
8B5D00          #   mov_ebx,[ebp]         # return
53 #    push_ebx
C3 #    ret
50               #  push_eax              # 0
B8 00000000 #   mov_eax, %0
8B5D00          #   mov_ebx,[ebp]         # return
53 #    push_ebx
C3 #    ret
 #
:f_execve #:f_execve
58 #    pop_eax
894500 #    mov_[ebp],eax
58 #    pop_eax
50               #  push_eax              # env (local)
8D85 04000000 # lea_eax,[ebp+DWORD] %4
5B                # pop_ebx               # =:
8918 #  mov_[eax],ebx
58 #    pop_eax
50               #  push_eax              # argv (local)
8D85 08000000 # lea_eax,[ebp+DWORD] %8
5B                # pop_ebx               # =:
8918 #  mov_[eax],ebx
58 #    pop_eax
50               #  push_eax              # program (local)
8D85 0C000000 # lea_eax,[ebp+DWORD] %12
5B                # pop_ebx               # =:
8918 #  mov_[eax],ebx
58 #    pop_eax
 ## stdlib.c 859
50               #  push_eax              # 11
B8 0B000000 #   mov_eax, %11
50               #  push_eax              # program (local)
8D85 0C000000 # lea_eax,[ebp+DWORD] %12
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # argv (local)
8D85 08000000 # lea_eax,[ebp+DWORD] %8
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # env (local)
8D85 04000000 # lea_eax,[ebp+DWORD] %4
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # sys_int80 (function)
B8 &f_sys_int80 #   mov_eax, &f_sys_int80
81C5 10000000          #    add_ebp, %16         # ()
FFD0 #  call_eax
81ED 10000000 # sub_ebp, %16
8B5D00          #   mov_ebx,[ebp]         # return
53 #    push_ebx
C3 #    ret
50               #  push_eax              # 0
B8 00000000 #   mov_eax, %0
8B5D00          #   mov_ebx,[ebp]         # return
53 #    push_ebx
C3 #    ret
 #
:f_fgets #:f_fgets
58 #    pop_eax
894500 #    mov_[ebp],eax
58 #    pop_eax
50               #  push_eax              # f (local)
8D85 04000000 # lea_eax,[ebp+DWORD] %4
5B                # pop_ebx               # =:
8918 #  mov_[eax],ebx
58 #    pop_eax
50               #  push_eax              # len (local)
8D85 08000000 # lea_eax,[ebp+DWORD] %8
5B                # pop_ebx               # =:
8918 #  mov_[eax],ebx
58 #    pop_eax
50               #  push_eax              # str (local)
8D85 0C000000 # lea_eax,[ebp+DWORD] %12
5B                # pop_ebx               # =:
8918 #  mov_[eax],ebx
58 #    pop_eax
 ## stdlib.c 864
50               #  push_eax              # f (local)
8D85 04000000 # lea_eax,[ebp+DWORD] %4
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # feof (function)
B8 &f_feof #    mov_eax, &f_feof
81C5 10000000          #    add_ebp, %16         # ()
FFD0 #  call_eax
81ED 10000000 # sub_ebp, %16
85C0           #    test_eax,eax          # if
58 #    pop_eax
0F84 %_fgets_else1 #    je %_fgets_else1
 ## stdlib.c 865
50               #  push_eax              # 0
B8 00000000 #   mov_eax, %0
8B5D00          #   mov_ebx,[ebp]         # return
53 #    push_ebx
C3 #    ret
 ## stdlib.c 867
:_fgets_else1  #:_fgets_else1 # no else
50               #  push_eax              # i (local)
8D85 10000000 # lea_eax,[ebp+DWORD] %16
50               #  push_eax              # 0
B8 00000000 #   mov_eax, %0
5B                # pop_ebx               # =
8903 #  mov_[ebx],eax
58                # pop_eax               # ;
:_fgets_loop2 #:_fgets_loop2
50               #  push_eax              # i (local)
8D85 10000000 # lea_eax,[ebp+DWORD] %16
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # len (local)
8D85 08000000 # lea_eax,[ebp+DWORD] %8
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # 1
B8 01000000 #   mov_eax, %1
5B                # pop_ebx               # -
29C3 #  sub_ebx,eax
89D8 #  mov_eax,ebx
5B                # pop_ebx               # <s
39C3 #  cmp_eax_ebx
0F9CC0 #    setl_al
0FB6C0 #    movzx_eax,al
85C0           #    test_eax,eax          # !
0F94C0 #    sete_al
0FB6C0 #    movzx_eax,al
85C0           #    test_eax,eax          # if
58 #    pop_eax
0F84 %_fgets_else3 #    je %_fgets_else3
E9 %_fgets_loop_end2 #  jmp %_fgets_loop_end2
 ## stdlib.c 868
:_fgets_else3  #:_fgets_else3 # no else
50               #  push_eax              # ch (local)
8D85 14000000 # lea_eax,[ebp+DWORD] %20
50               #  push_eax              # f (local)
8D85 04000000 # lea_eax,[ebp+DWORD] %4
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # fgetc (function)
B8 &f_fgetc #   mov_eax, &f_fgetc
81C5 18000000          #    add_ebp, %24         # ()
FFD0 #  call_eax
81ED 18000000 # sub_ebp, %24
5B                # pop_ebx               # =
8903 #  mov_[ebx],eax
58                # pop_eax               # ;
 ## stdlib.c 870
50               #  push_eax              # ch (local)
8D85 14000000 # lea_eax,[ebp+DWORD] %20
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # 0
B8 00000000 #   mov_eax, %0
5B                # pop_ebx               # <s
39C3 #  cmp_eax_ebx
0F9CC0 #    setl_al
0FB6C0 #    movzx_eax,al
85C0           #    test_eax,eax          # if
58 #    pop_eax
0F84 %_fgets_else4 #    je %_fgets_else4
 ## stdlib.c 871
 ## stdlib.c 872
50               #  push_eax              # str (local)
8D85 0C000000 # lea_eax,[ebp+DWORD] %12
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # i (local)
8D85 10000000 # lea_eax,[ebp+DWORD] %16
8B00          # mov_eax,[eax]         # ?
5B                # pop_ebx               # +
01D8 #  add_eax,ebx
50               #  push_eax              # 0
B8 00000000 #   mov_eax, %0
5B                # pop_ebx               # =1
8803 #  mov_[ebx],al
58                # pop_eax               # ;
 ## stdlib.c 873
E9 %_fgets_loop_end2 #  jmp %_fgets_loop_end2
 ## stdlib.c 875
:_fgets_else4  #:_fgets_else4 # no else
50               #  push_eax              # str (local)
8D85 0C000000 # lea_eax,[ebp+DWORD] %12
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # i (local)
8D85 10000000 # lea_eax,[ebp+DWORD] %16
8B00          # mov_eax,[eax]         # ?
5B                # pop_ebx               # +
01D8 #  add_eax,ebx
50               #  push_eax              # ch (local)
8D85 14000000 # lea_eax,[ebp+DWORD] %20
8B00          # mov_eax,[eax]         # ?
5B                # pop_ebx               # =1
8803 #  mov_[ebx],al
58                # pop_eax               # ;
 ## stdlib.c 876
50               #  push_eax              # ch (local)
8D85 14000000 # lea_eax,[ebp+DWORD] %20
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # 10
B8 0A000000 #   mov_eax, %10
5B                # pop_ebx               # ==
39C3 #  cmp_eax_ebx
0F94C0 #    sete_al
0FB6C0 #    movzx_eax,al
85C0           #    test_eax,eax          # if
58 #    pop_eax
0F84 %_fgets_else5 #    je %_fgets_else5
 ## stdlib.c 877
 ## stdlib.c 878
50               #  push_eax              # str (local)
8D85 0C000000 # lea_eax,[ebp+DWORD] %12
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # i (local)
8D85 10000000 # lea_eax,[ebp+DWORD] %16
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # 1
B8 01000000 #   mov_eax, %1
5B                # pop_ebx               # +
01D8 #  add_eax,ebx
5B                # pop_ebx               # +
01D8 #  add_eax,ebx
50               #  push_eax              # 0
B8 00000000 #   mov_eax, %0
5B                # pop_ebx               # =1
8803 #  mov_[ebx],al
58                # pop_eax               # ;
 ## stdlib.c 879
E9 %_fgets_loop_end2 #  jmp %_fgets_loop_end2
:_fgets_else5  #:_fgets_else5 # no else
50               #  push_eax              # i (local)
8D85 10000000 # lea_eax,[ebp+DWORD] %16
50               #  push_eax              # $ (dup)
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # 1
B8 01000000 #   mov_eax, %1
5B                # pop_ebx               # +
01D8 #  add_eax,ebx
5B                # pop_ebx               # =
8903 #  mov_[ebx],eax
50               #  push_eax              # 1
B8 01000000 #   mov_eax, %1
5B                # pop_ebx               # -
29C3 #  sub_ebx,eax
89D8 #  mov_eax,ebx
58                # pop_eax               # ;
E9 %_fgets_loop2 #  jmp %_fgets_loop2
:_fgets_loop_end2 #:_fgets_loop_end2
 ## stdlib.c 882
50               #  push_eax              # str (local)
8D85 0C000000 # lea_eax,[ebp+DWORD] %12
8B00          # mov_eax,[eax]         # ?
8B5D00          #   mov_ebx,[ebp]         # return
53 #    push_ebx
C3 #    ret
50               #  push_eax              # 0
B8 00000000 #   mov_eax, %0
8B5D00          #   mov_ebx,[ebp]         # return
53 #    push_ebx
C3 #    ret
 #
:f_fgets #:f_fgets
58 #    pop_eax
894500 #    mov_[ebp],eax
58 #    pop_eax
50               #  push_eax              # f (local)
8D85 04000000 # lea_eax,[ebp+DWORD] %4
5B                # pop_ebx               # =:
8918 #  mov_[eax],ebx
58 #    pop_eax
50               #  push_eax              # size (local)
8D85 08000000 # lea_eax,[ebp+DWORD] %8
5B                # pop_ebx               # =:
8918 #  mov_[eax],ebx
58 #    pop_eax
50               #  push_eax              # buffer (local)
8D85 0C000000 # lea_eax,[ebp+DWORD] %12
5B                # pop_ebx               # =:
8918 #  mov_[eax],ebx
58 #    pop_eax
50               #  push_eax              # i (local)
8D85 10000000 # lea_eax,[ebp+DWORD] %16
50               #  push_eax              # 0
B8 00000000 #   mov_eax, %0
5B                # pop_ebx               # =
8903 #  mov_[ebx],eax
58                # pop_eax               # ;
 ## M1.c 10
:_fgets_loop1 #:_fgets_loop1
50               #  push_eax              # i (local)
8D85 10000000 # lea_eax,[ebp+DWORD] %16
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # size (local)
8D85 08000000 # lea_eax,[ebp+DWORD] %8
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # 1
B8 01000000 #   mov_eax, %1
5B                # pop_ebx               # -
29C3 #  sub_ebx,eax
89D8 #  mov_eax,ebx
5B                # pop_ebx               # <s
39C3 #  cmp_eax_ebx
0F9CC0 #    setl_al
0FB6C0 #    movzx_eax,al
85C0           #    test_eax,eax          # !
0F94C0 #    sete_al
0FB6C0 #    movzx_eax,al
85C0           #    test_eax,eax          # if
58 #    pop_eax
0F84 %_fgets_else2 #    je %_fgets_else2
E9 %_fgets_loop_end1 #  jmp %_fgets_loop_end1
 ## M1.c 11
:_fgets_else2  #:_fgets_else2 # no else
 ## M1.c 13
50               #  push_eax              # f (local)
8D85 04000000 # lea_eax,[ebp+DWORD] %4
8B00          # mov_eax,[eax]         # ->
81C0 00000000 # add_eax, %0
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # ch (local)
8D85 14000000 # lea_eax,[ebp+DWORD] %20
50               #  push_eax              # 1
B8 01000000 #   mov_eax, %1
50               #  push_eax              # read (function)
B8 &f_read #    mov_eax, &f_read
81C5 18000000          #    add_ebp, %24         # ()
FFD0 #  call_eax
81ED 18000000 # sub_ebp, %24
50               #  push_eax              # 0
B8 00000000 #   mov_eax, %0
5B                # pop_ebx               # ==
39C3 #  cmp_eax_ebx
0F94C0 #    sete_al
0FB6C0 #    movzx_eax,al
85C0           #    test_eax,eax          # if
58 #    pop_eax
0F84 %_fgets_else3 #    je %_fgets_else3
 ## M1.c 14
 ## M1.c 15
50               #  push_eax              # i (local)
8D85 10000000 # lea_eax,[ebp+DWORD] %16
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # 0
B8 00000000 #   mov_eax, %0
5B                # pop_ebx               # ==
39C3 #  cmp_eax_ebx
0F94C0 #    sete_al
0FB6C0 #    movzx_eax,al
85C0           #    test_eax,eax          # if
58 #    pop_eax
0F84 %_fgets_else4 #    je %_fgets_else4
 ## M1.c 16
50               #  push_eax              # 0
B8 00000000 #   mov_eax, %0
8B5D00          #   mov_ebx,[ebp]         # return
53 #    push_ebx
C3 #    ret
 ## M1.c 17
:_fgets_else4  #:_fgets_else4 # no else
E9 %_fgets_loop_end1 #  jmp %_fgets_loop_end1
 ## M1.c 19
:_fgets_else3  #:_fgets_else3 # no else
50               #  push_eax              # buffer (local)
8D85 0C000000 # lea_eax,[ebp+DWORD] %12
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # i (local)
8D85 10000000 # lea_eax,[ebp+DWORD] %16
50               #  push_eax              # $ (dup)
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # 1
B8 01000000 #   mov_eax, %1
5B                # pop_ebx               # +
01D8 #  add_eax,ebx
5B                # pop_ebx               # =
8903 #  mov_[ebx],eax
50               #  push_eax              # 1
B8 01000000 #   mov_eax, %1
5B                # pop_ebx               # -
29C3 #  sub_ebx,eax
89D8 #  mov_eax,ebx
5B                # pop_ebx               # +
01D8 #  add_eax,ebx
50               #  push_eax              # ch (local)
8D85 14000000 # lea_eax,[ebp+DWORD] %20
8A00           #    mov_al,[eax]          # ?1
0FB6C0 #    movzx_eax,al
0FBEC0           #  movsx_eax,al          # char
5B                # pop_ebx               # =1
8803 #  mov_[ebx],al
58                # pop_eax               # ;
 ## M1.c 20
50               #  push_eax              # ch (local)
8D85 14000000 # lea_eax,[ebp+DWORD] %20
8A00           #    mov_al,[eax]          # ?1
0FB6C0 #    movzx_eax,al
0FBEC0           #  movsx_eax,al          # char
50               #  push_eax              # 10
B8 0A000000 #   mov_eax, %10
5B                # pop_ebx               # ==
39C3 #  cmp_eax_ebx
0F94C0 #    sete_al
0FB6C0 #    movzx_eax,al
85C0           #    test_eax,eax          # if
58 #    pop_eax
0F84 %_fgets_else5 #    je %_fgets_else5
 ## M1.c 21
E9 %_fgets_loop_end1 #  jmp %_fgets_loop_end1
:_fgets_else5  #:_fgets_else5 # no else
E9 %_fgets_loop1 #  jmp %_fgets_loop1
:_fgets_loop_end1 #:_fgets_loop_end1
 ## M1.c 23
50               #  push_eax              # buffer (local)
8D85 0C000000 # lea_eax,[ebp+DWORD] %12
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # i (local)
8D85 10000000 # lea_eax,[ebp+DWORD] %16
8B00          # mov_eax,[eax]         # ?
5B                # pop_ebx               # +
01D8 #  add_eax,ebx
50               #  push_eax              # 0
B8 00000000 #   mov_eax, %0
5B                # pop_ebx               # =1
8803 #  mov_[ebx],al
58                # pop_eax               # ;
 ## M1.c 24
50               #  push_eax              # 1
B8 01000000 #   mov_eax, %1
8B5D00          #   mov_ebx,[ebp]         # return
53 #    push_ebx
C3 #    ret
50               #  push_eax              # 0
B8 00000000 #   mov_eax, %0
8B5D00          #   mov_ebx,[ebp]         # return
53 #    push_ebx
C3 #    ret
 #
:f_add_define #:f_add_define
58 #    pop_eax
894500 #    mov_[ebp],eax
58 #    pop_eax
50               #  push_eax              # value (local)
8D85 04000000 # lea_eax,[ebp+DWORD] %4
5B                # pop_ebx               # =:
8918 #  mov_[eax],ebx
58 #    pop_eax
50               #  push_eax              # name (local)
8D85 08000000 # lea_eax,[ebp+DWORD] %8
5B                # pop_ebx               # =:
8918 #  mov_[eax],ebx
58 #    pop_eax
50               #  push_eax              # new_define (local)
8D85 0C000000 # lea_eax,[ebp+DWORD] %12
50               #  push_eax              # 44
B8 2C000000 #   mov_eax, %44
50               #  push_eax              # malloc (function)
B8 &f_malloc #  mov_eax, &f_malloc
81C5 10000000          #    add_ebp, %16         # ()
FFD0 #  call_eax
81ED 10000000 # sub_ebp, %16
5B                # pop_ebx               # =
8903 #  mov_[ebx],eax
58                # pop_eax               # ;
 ## M1.c 42
50               #  push_eax              # new_define (local)
8D85 0C000000 # lea_eax,[ebp+DWORD] %12
8B00          # mov_eax,[eax]         # ->
81C0 00000000 # add_eax, %0
50               #  push_eax              # name (local)
8D85 08000000 # lea_eax,[ebp+DWORD] %8
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # 19
B8 13000000 #   mov_eax, %19
50               #  push_eax              # strncpy (function)
B8 &f_strncpy # mov_eax, &f_strncpy
81C5 10000000          #    add_ebp, %16         # ()
FFD0 #  call_eax
81ED 10000000 # sub_ebp, %16
58                # pop_eax               # ;
 ## M1.c 43
50               #  push_eax              # new_define (local)
8D85 0C000000 # lea_eax,[ebp+DWORD] %12
8B00          # mov_eax,[eax]         # ->
81C0 00000000 # add_eax, %0
50               #  push_eax              # 19
B8 13000000 #   mov_eax, %19
5B                # pop_ebx               # +
01D8 #  add_eax,ebx
50               #  push_eax              # 0
B8 00000000 #   mov_eax, %0
5B                # pop_ebx               # =1
8803 #  mov_[ebx],al
58                # pop_eax               # ;
 ## M1.c 44
50               #  push_eax              # new_define (local)
8D85 0C000000 # lea_eax,[ebp+DWORD] %12
8B00          # mov_eax,[eax]         # ->
81C0 14000000 # add_eax, %20
50               #  push_eax              # value (local)
8D85 04000000 # lea_eax,[ebp+DWORD] %4
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # 19
B8 13000000 #   mov_eax, %19
50               #  push_eax              # strncpy (function)
B8 &f_strncpy # mov_eax, &f_strncpy
81C5 10000000          #    add_ebp, %16         # ()
FFD0 #  call_eax
81ED 10000000 # sub_ebp, %16
58                # pop_eax               # ;
 ## M1.c 45
50               #  push_eax              # new_define (local)
8D85 0C000000 # lea_eax,[ebp+DWORD] %12
8B00          # mov_eax,[eax]         # ->
81C0 14000000 # add_eax, %20
50               #  push_eax              # 19
B8 13000000 #   mov_eax, %19
5B                # pop_ebx               # +
01D8 #  add_eax,ebx
50               #  push_eax              # 0
B8 00000000 #   mov_eax, %0
5B                # pop_ebx               # =1
8803 #  mov_[ebx],al
58                # pop_eax               # ;
 ## M1.c 46
50               #  push_eax              # new_define (local)
8D85 0C000000 # lea_eax,[ebp+DWORD] %12
8B00          # mov_eax,[eax]         # ->
81C0 28000000 # add_eax, %40
50               #  push_eax              # defines (global)
B8 &g_defines # mov_eax, &g_defines
8B00          # mov_eax,[eax]         # ?
5B                # pop_ebx               # =
8903 #  mov_[ebx],eax
58                # pop_eax               # ;
 ## M1.c 47
50               #  push_eax              # defines (global)
B8 &g_defines # mov_eax, &g_defines
50               #  push_eax              # new_define (local)
8D85 0C000000 # lea_eax,[ebp+DWORD] %12
8B00          # mov_eax,[eax]         # ?
5B                # pop_ebx               # =
8903 #  mov_[ebx],eax
58                # pop_eax               # ;
50               #  push_eax              # 0
B8 00000000 #   mov_eax, %0
8B5D00          #   mov_ebx,[ebp]         # return
53 #    push_ebx
C3 #    ret
 #
:f_find_define #:f_find_define
58 #    pop_eax
894500 #    mov_[ebp],eax
58 #    pop_eax
50               #  push_eax              # name (local)
8D85 04000000 # lea_eax,[ebp+DWORD] %4
5B                # pop_ebx               # =:
8918 #  mov_[eax],ebx
58 #    pop_eax
 ## M1.c 52
50               #  push_eax              # def (local)
8D85 08000000 # lea_eax,[ebp+DWORD] %8
50               #  push_eax              # defines (global)
B8 &g_defines # mov_eax, &g_defines
8B00          # mov_eax,[eax]         # ?
5B                # pop_ebx               # =
8903 #  mov_[ebx],eax
58                # pop_eax               # ;
:_find_define_loop1 #:_find_define_loop1
50               #  push_eax              # def (local)
8D85 08000000 # lea_eax,[ebp+DWORD] %8
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # 0
B8 00000000 #   mov_eax, %0
5B                # pop_ebx               # !=
39C3 #  cmp_eax_ebx
0F95C0 #    setne_al
0FB6C0 #    movzx_eax,al
85C0           #    test_eax,eax          # !
0F94C0 #    sete_al
0FB6C0 #    movzx_eax,al
85C0           #    test_eax,eax          # if
58 #    pop_eax
0F84 %_find_define_else2 #  je %_find_define_else2
E9 %_find_define_loop_end1 #    jmp %_find_define_loop_end1
 ## M1.c 53
:_find_define_else2  #:_find_define_else2 # no else
50               #  push_eax              # def (local)
8D85 08000000 # lea_eax,[ebp+DWORD] %8
8B00          # mov_eax,[eax]         # ->
81C0 00000000 # add_eax, %0
50               #  push_eax              # name (local)
8D85 04000000 # lea_eax,[ebp+DWORD] %4
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # strcmp (function)
B8 &f_strcmp #  mov_eax, &f_strcmp
81C5 0C000000          #    add_ebp, %12         # ()
FFD0 #  call_eax
81ED 0C000000 # sub_ebp, %12
50               #  push_eax              # 0
B8 00000000 #   mov_eax, %0
5B                # pop_ebx               # ==
39C3 #  cmp_eax_ebx
0F94C0 #    sete_al
0FB6C0 #    movzx_eax,al
85C0           #    test_eax,eax          # if
58 #    pop_eax
0F84 %_find_define_else3 #  je %_find_define_else3
 ## M1.c 54
50               #  push_eax              # def (local)
8D85 08000000 # lea_eax,[ebp+DWORD] %8
8B00          # mov_eax,[eax]         # ->
81C0 14000000 # add_eax, %20
8B5D00          #   mov_ebx,[ebp]         # return
53 #    push_ebx
C3 #    ret
:_find_define_else3  #:_find_define_else3 # no else
50               #  push_eax              # def (local)
8D85 08000000 # lea_eax,[ebp+DWORD] %8
50               #  push_eax              # def (local)
8D85 08000000 # lea_eax,[ebp+DWORD] %8
8B00          # mov_eax,[eax]         # ->
81C0 28000000 # add_eax, %40
8B00          # mov_eax,[eax]         # ?
5B                # pop_ebx               # =
8903 #  mov_[ebx],eax
58                # pop_eax               # ;
E9 %_find_define_loop1 #    jmp %_find_define_loop1
:_find_define_loop_end1 #:_find_define_loop_end1
 ## M1.c 55
50               #  push_eax              # name (local)
8D85 04000000 # lea_eax,[ebp+DWORD] %4
8B00          # mov_eax,[eax]         # ?
8B5D00          #   mov_ebx,[ebp]         # return
53 #    push_ebx
C3 #    ret
50               #  push_eax              # 0
B8 00000000 #   mov_eax, %0
8B5D00          #   mov_ebx,[ebp]         # return
53 #    push_ebx
C3 #    ret
 #
:f_output_hex #:f_output_hex
58 #    pop_eax
894500 #    mov_[ebp],eax
58 #    pop_eax
50               #  push_eax              # f (local)
8D85 04000000 # lea_eax,[ebp+DWORD] %4
5B                # pop_ebx               # =:
8918 #  mov_[eax],ebx
58 #    pop_eax
50               #  push_eax              # ch (local)
8D85 08000000 # lea_eax,[ebp+DWORD] %8
5B                # pop_ebx               # =:
8918 #  mov_[eax],ebx
58 #    pop_eax
 ## M1.c 60
50               #  push_eax              # ch (local)
8D85 08000000 # lea_eax,[ebp+DWORD] %8
8A00           #    mov_al,[eax]          # ?1
0FB6C0 #    movzx_eax,al
0FBEC0           #  movsx_eax,al          # char
50               #  push_eax              # ch (local)
8D85 08000000 # lea_eax,[ebp+DWORD] %8
8A00           #    mov_al,[eax]          # ?1
0FB6C0 #    movzx_eax,al
0FBEC0           #  movsx_eax,al          # char
50               #  push_eax              # 10
B8 0A000000 #   mov_eax, %10
5B                # pop_ebx               # <s
39C3 #  cmp_eax_ebx
0F9CC0 #    setl_al
0FB6C0 #    movzx_eax,al
85C0           #    test_eax,eax          # if
58 #    pop_eax
0F84 %_output_hex_else1 #   je %_output_hex_else1
50               #  push_eax              # 48
B8 30000000 #   mov_eax, %48
E9 %_output_hex_else_end1 # jmp %_output_hex_else_end1
:_output_hex_else1 #:_output_hex_else1
50               #  push_eax              # 65
B8 41000000 #   mov_eax, %65
50               #  push_eax              # 10
B8 0A000000 #   mov_eax, %10
5B                # pop_ebx               # -
29C3 #  sub_ebx,eax
89D8 #  mov_eax,ebx
:_output_hex_else_end1 #:_output_hex_else_end1
5B                # pop_ebx               # +
01D8 #  add_eax,ebx
50               #  push_eax              # f (local)
8D85 04000000 # lea_eax,[ebp+DWORD] %4
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # fputc (function)
B8 &f_fputc #   mov_eax, &f_fputc
81C5 0C000000          #    add_ebp, %12         # ()
FFD0 #  call_eax
81ED 0C000000 # sub_ebp, %12
58                # pop_eax               # ;
50               #  push_eax              # 0
B8 00000000 #   mov_eax, %0
8B5D00          #   mov_ebx,[ebp]         # return
53 #    push_ebx
C3 #    ret
 #
:f_main #:f_main
58 #    pop_eax
894500 #    mov_[ebp],eax
58 #    pop_eax
50               #  push_eax              # argv (local)
8D85 04000000 # lea_eax,[ebp+DWORD] %4
5B                # pop_ebx               # =:
8918 #  mov_[eax],ebx
58 #    pop_eax
50               #  push_eax              # argc (local)
8D85 08000000 # lea_eax,[ebp+DWORD] %8
5B                # pop_ebx               # =:
8918 #  mov_[eax],ebx
58 #    pop_eax
50               #  push_eax              # __init_globals__ (function)
B8 &f___init_globals__ #    mov_eax, &f___init_globals__
81C5 0C000000          #    add_ebp, %12         # ()
FFD0 #  call_eax
81ED 0C000000 # sub_ebp, %12
50               #  push_eax              # _sys_env (global)
B8 &g__sys_env #    mov_eax, &g__sys_env
50               #  push_eax              # argv (local)
8D85 04000000 # lea_eax,[ebp+DWORD] %4
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # argc (local)
8D85 08000000 # lea_eax,[ebp+DWORD] %8
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # 4
B8 04000000 #   mov_eax, %4
5B                # pop_ebx               # *
F7E3 #  mul_ebx
50               #  push_eax              # 4
B8 04000000 #   mov_eax, %4
5B                # pop_ebx               # +
01D8 #  add_eax,ebx
5B                # pop_ebx               # +
01D8 #  add_eax,ebx
5B                # pop_ebx               # =
8903 #  mov_[ebx],eax
58                # pop_eax               # ;
50               #  push_eax              # nr_input_files (local)
8D85 34000000 # lea_eax,[ebp+DWORD] %52
50               #  push_eax              # 0
B8 00000000 #   mov_eax, %0
5B                # pop_ebx               # =
8903 #  mov_[ebx],eax
58                # pop_eax               # ;
50               #  push_eax              # output_file (local)
8D85 38000000 # lea_eax,[ebp+DWORD] %56
50               #  push_eax              # 0
B8 00000000 #   mov_eax, %0
5B                # pop_ebx               # =
8903 #  mov_[ebx],eax
58                # pop_eax               # ;
 ## M1.c 68
50               #  push_eax              # i (local)
8D85 3C000000 # lea_eax,[ebp+DWORD] %60
50               #  push_eax              # 1
B8 01000000 #   mov_eax, %1
5B                # pop_ebx               # =
8903 #  mov_[ebx],eax
58                # pop_eax               # ;
:_main_loop1 #:_main_loop1
50               #  push_eax              # i (local)
8D85 3C000000 # lea_eax,[ebp+DWORD] %60
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # argc (local)
8D85 08000000 # lea_eax,[ebp+DWORD] %8
8B00          # mov_eax,[eax]         # ?
5B                # pop_ebx               # <s
39C3 #  cmp_eax_ebx
0F9CC0 #    setl_al
0FB6C0 #    movzx_eax,al
85C0           #    test_eax,eax          # !
0F94C0 #    sete_al
0FB6C0 #    movzx_eax,al
85C0           #    test_eax,eax          # if
58 #    pop_eax
0F84 %_main_else2 # je %_main_else2
E9 %_main_loop_end1 #   jmp %_main_loop_end1
 ## M1.c 69
:_main_else2  #:_main_else2 # no else
50               #  push_eax              # argv (local)
8D85 04000000 # lea_eax,[ebp+DWORD] %4
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # i (local)
8D85 3C000000 # lea_eax,[ebp+DWORD] %60
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # 4
B8 04000000 #   mov_eax, %4
5B                # pop_ebx               # *
F7E3 #  mul_ebx
5B                # pop_ebx               # +
01D8 #  add_eax,ebx
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # '-o'
B8 &string_12 # mov_eax, &string_12
50               #  push_eax              # strcmp (function)
B8 &f_strcmp #  mov_eax, &f_strcmp
81C5 40000000          #    add_ebp, %64         # ()
FFD0 #  call_eax
81ED 40000000 # sub_ebp, %64
50               #  push_eax              # 0
B8 00000000 #   mov_eax, %0
5B                # pop_ebx               # ==
39C3 #  cmp_eax_ebx
0F94C0 #    sete_al
0FB6C0 #    movzx_eax,al
85C0           #    test_eax,eax          # if
58 #    pop_eax
0F84 %_main_else3 # je %_main_else3
 ## M1.c 70
 ## M1.c 71
50               #  push_eax              # i (local)
8D85 3C000000 # lea_eax,[ebp+DWORD] %60
50               #  push_eax              # $ (dup)
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # 1
B8 01000000 #   mov_eax, %1
5B                # pop_ebx               # +
01D8 #  add_eax,ebx
5B                # pop_ebx               # =
8903 #  mov_[ebx],eax
50               #  push_eax              # 1
B8 01000000 #   mov_eax, %1
5B                # pop_ebx               # -
29C3 #  sub_ebx,eax
89D8 #  mov_eax,ebx
58                # pop_eax               # ;
 ## M1.c 72
50               #  push_eax              # output_file (local)
8D85 38000000 # lea_eax,[ebp+DWORD] %56
50               #  push_eax              # argv (local)
8D85 04000000 # lea_eax,[ebp+DWORD] %4
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # i (local)
8D85 3C000000 # lea_eax,[ebp+DWORD] %60
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # 4
B8 04000000 #   mov_eax, %4
5B                # pop_ebx               # *
F7E3 #  mul_ebx
5B                # pop_ebx               # +
01D8 #  add_eax,ebx
8B00          # mov_eax,[eax]         # ?
5B                # pop_ebx               # =
8903 #  mov_[ebx],eax
58                # pop_eax               # ;
E9 %_main_else_end3 #   jmp %_main_else_end3
:_main_else3 #:_main_else3
 ## M1.c 75
50               #  push_eax              # input_files (local)
8D85 0C000000 # lea_eax,[ebp+DWORD] %12
50               #  push_eax              # nr_input_files (local)
8D85 34000000 # lea_eax,[ebp+DWORD] %52
50               #  push_eax              # $ (dup)
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # 1
B8 01000000 #   mov_eax, %1
5B                # pop_ebx               # +
01D8 #  add_eax,ebx
5B                # pop_ebx               # =
8903 #  mov_[ebx],eax
50               #  push_eax              # 1
B8 01000000 #   mov_eax, %1
5B                # pop_ebx               # -
29C3 #  sub_ebx,eax
89D8 #  mov_eax,ebx
50               #  push_eax              # 4
B8 04000000 #   mov_eax, %4
5B                # pop_ebx               # *
F7E3 #  mul_ebx
5B                # pop_ebx               # +
01D8 #  add_eax,ebx
50               #  push_eax              # argv (local)
8D85 04000000 # lea_eax,[ebp+DWORD] %4
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # i (local)
8D85 3C000000 # lea_eax,[ebp+DWORD] %60
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # 4
B8 04000000 #   mov_eax, %4
5B                # pop_ebx               # *
F7E3 #  mul_ebx
5B                # pop_ebx               # +
01D8 #  add_eax,ebx
8B00          # mov_eax,[eax]         # ?
5B                # pop_ebx               # =
8903 #  mov_[ebx],eax
58                # pop_eax               # ;
:_main_else_end3 #:_main_else_end3
50               #  push_eax              # i (local)
8D85 3C000000 # lea_eax,[ebp+DWORD] %60
50               #  push_eax              # $ (dup)
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # 1
B8 01000000 #   mov_eax, %1
5B                # pop_ebx               # +
01D8 #  add_eax,ebx
5B                # pop_ebx               # =
8903 #  mov_[ebx],eax
50               #  push_eax              # 1
B8 01000000 #   mov_eax, %1
5B                # pop_ebx               # -
29C3 #  sub_ebx,eax
89D8 #  mov_eax,ebx
58                # pop_eax               # ;
E9 %_main_loop1 #   jmp %_main_loop1
:_main_loop_end1 #:_main_loop_end1
50               #  push_eax              # fout (local)
8D85 3C000000 # lea_eax,[ebp+DWORD] %60
50               #  push_eax              # stdout (global)
B8 &g_stdout #  mov_eax, &g_stdout
8B00          # mov_eax,[eax]         # ?
5B                # pop_ebx               # =
8903 #  mov_[ebx],eax
58                # pop_eax               # ;
 ## M1.c 78
50               #  push_eax              # output_file (local)
8D85 38000000 # lea_eax,[ebp+DWORD] %56
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # 0
B8 00000000 #   mov_eax, %0
5B                # pop_ebx               # !=
39C3 #  cmp_eax_ebx
0F95C0 #    setne_al
0FB6C0 #    movzx_eax,al
85C0           #    test_eax,eax          # if
58 #    pop_eax
0F84 %_main_else4 # je %_main_else4
 ## M1.c 79
 ## M1.c 80
50               #  push_eax              # fout (local)
8D85 3C000000 # lea_eax,[ebp+DWORD] %60
50               #  push_eax              # output_file (local)
8D85 38000000 # lea_eax,[ebp+DWORD] %56
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # 'w'
B8 &string_13 # mov_eax, &string_13
50               #  push_eax              # fopen (function)
B8 &f_fopen #   mov_eax, &f_fopen
81C5 40000000          #    add_ebp, %64         # ()
FFD0 #  call_eax
81ED 40000000 # sub_ebp, %64
5B                # pop_ebx               # =
8903 #  mov_[ebx],eax
58                # pop_eax               # ;
 ## M1.c 81
50               #  push_eax              # fout (local)
8D85 3C000000 # lea_eax,[ebp+DWORD] %60
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # 0
B8 00000000 #   mov_eax, %0
5B                # pop_ebx               # ==
39C3 #  cmp_eax_ebx
0F94C0 #    sete_al
0FB6C0 #    movzx_eax,al
85C0           #    test_eax,eax          # if
58 #    pop_eax
0F84 %_main_else5 # je %_main_else5
 ## M1.c 82
 ## M1.c 83
50               #  push_eax              # stderr (global)
B8 &g_stderr #  mov_eax, &g_stderr
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # 'Error: Cannot open file '%s' for writing'
B8 &string_14 # mov_eax, &string_14
50               #  push_eax              # __var_args (local)
8D85 40000000 # lea_eax,[ebp+DWORD] %64
50               #  push_eax              # output_file (local)
8D85 38000000 # lea_eax,[ebp+DWORD] %56
8B00          # mov_eax,[eax]         # ?
5B                # pop_ebx               # =
8903 #  mov_[ebx],eax
58                # pop_eax               # ;
50               #  push_eax              # __var_args (local)
8D85 40000000 # lea_eax,[ebp+DWORD] %64
50               #  push_eax              # fprintf (function)
B8 &f_fprintf # mov_eax, &f_fprintf
81C5 44000000          #    add_ebp, %68         # ()
FFD0 #  call_eax
81ED 44000000 # sub_ebp, %68
58                # pop_eax               # ;
 ## M1.c 84
50               #  push_eax              # 4294967295
B8 FFFFFFFF #   mov_eax, %4294967295
8B5D00          #   mov_ebx,[ebp]         # return
53 #    push_ebx
C3 #    ret
:_main_else5  #:_main_else5 # no else
 ## M1.c 88
:_main_else4  #:_main_else4 # no else
50               #  push_eax              # i (local)
8D85 40000000 # lea_eax,[ebp+DWORD] %64
50               #  push_eax              # 0
B8 00000000 #   mov_eax, %0
5B                # pop_ebx               # =
8903 #  mov_[ebx],eax
58                # pop_eax               # ;
:_main_loop6 #:_main_loop6
50               #  push_eax              # i (local)
8D85 40000000 # lea_eax,[ebp+DWORD] %64
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # nr_input_files (local)
8D85 34000000 # lea_eax,[ebp+DWORD] %52
8B00          # mov_eax,[eax]         # ?
5B                # pop_ebx               # <s
39C3 #  cmp_eax_ebx
0F9CC0 #    setl_al
0FB6C0 #    movzx_eax,al
85C0           #    test_eax,eax          # !
0F94C0 #    sete_al
0FB6C0 #    movzx_eax,al
85C0           #    test_eax,eax          # if
58 #    pop_eax
0F84 %_main_else7 # je %_main_else7
E9 %_main_loop_end6 #   jmp %_main_loop_end6
 ## M1.c 89
:_main_else7  #:_main_else7 # no else
50               #  push_eax              # fin (local)
8D85 44000000 # lea_eax,[ebp+DWORD] %68
50               #  push_eax              # input_files (local)
8D85 0C000000 # lea_eax,[ebp+DWORD] %12
50               #  push_eax              # i (local)
8D85 40000000 # lea_eax,[ebp+DWORD] %64
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # 4
B8 04000000 #   mov_eax, %4
5B                # pop_ebx               # *
F7E3 #  mul_ebx
5B                # pop_ebx               # +
01D8 #  add_eax,ebx
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # 'r'
B8 &string_15 # mov_eax, &string_15
50               #  push_eax              # fopen (function)
B8 &f_fopen #   mov_eax, &f_fopen
81C5 48000000          #    add_ebp, %72         # ()
FFD0 #  call_eax
81ED 48000000 # sub_ebp, %72
5B                # pop_ebx               # =
8903 #  mov_[ebx],eax
58                # pop_eax               # ;
 ## M1.c 91
50               #  push_eax              # fin (local)
8D85 44000000 # lea_eax,[ebp+DWORD] %68
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # 0
B8 00000000 #   mov_eax, %0
5B                # pop_ebx               # ==
39C3 #  cmp_eax_ebx
0F94C0 #    sete_al
0FB6C0 #    movzx_eax,al
85C0           #    test_eax,eax          # if
58 #    pop_eax
0F84 %_main_else8 # je %_main_else8
 ## M1.c 92
 ## M1.c 93
50               #  push_eax              # stderr (global)
B8 &g_stderr #  mov_eax, &g_stderr
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # 'Cannot open %s for reading\n'
B8 &string_16 # mov_eax, &string_16
50               #  push_eax              # __var_args (local)
8D85 48000000 # lea_eax,[ebp+DWORD] %72
50               #  push_eax              # input_files (local)
8D85 0C000000 # lea_eax,[ebp+DWORD] %12
50               #  push_eax              # i (local)
8D85 40000000 # lea_eax,[ebp+DWORD] %64
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # 4
B8 04000000 #   mov_eax, %4
5B                # pop_ebx               # *
F7E3 #  mul_ebx
5B                # pop_ebx               # +
01D8 #  add_eax,ebx
8B00          # mov_eax,[eax]         # ?
5B                # pop_ebx               # =
8903 #  mov_[ebx],eax
58                # pop_eax               # ;
50               #  push_eax              # __var_args (local)
8D85 48000000 # lea_eax,[ebp+DWORD] %72
50               #  push_eax              # fprintf (function)
B8 &f_fprintf # mov_eax, &f_fprintf
81C5 4C000000          #    add_ebp, %76         # ()
FFD0 #  call_eax
81ED 4C000000 # sub_ebp, %76
58                # pop_eax               # ;
 ## M1.c 94
50               #  push_eax              # 4294967295
B8 FFFFFFFF #   mov_eax, %4294967295
8B5D00          #   mov_ebx,[ebp]         # return
53 #    push_ebx
C3 #    ret
:_main_else8  #:_main_else8 # no else
 ## M1.c 98
:_main_loop9 #:_main_loop9
50               #  push_eax              # line (static)
B8 &static_0_line # mov_eax, &static_0_line
50               #  push_eax              # 99999
B8 9F860100 #   mov_eax, %99999
50               #  push_eax              # fin (local)
8D85 44000000 # lea_eax,[ebp+DWORD] %68
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # fgets (function)
B8 &f_fgets #   mov_eax, &f_fgets
81C5 48000000          #    add_ebp, %72         # ()
FFD0 #  call_eax
81ED 48000000 # sub_ebp, %72
85C0           #    test_eax,eax          # !
0F94C0 #    sete_al
0FB6C0 #    movzx_eax,al
85C0           #    test_eax,eax          # if
58 #    pop_eax
0F84 %_main_else10 #    je %_main_else10
E9 %_main_loop_end9 #   jmp %_main_loop_end9
 ## M1.c 99
 ## M1.c 100
:_main_else10  #:_main_else10 # no else
50               #  push_eax              # line (static)
B8 &static_0_line # mov_eax, &static_0_line
50               #  push_eax              # 'DEFINE '
B8 &string_17 # mov_eax, &string_17
50               #  push_eax              # 7
B8 07000000 #   mov_eax, %7
50               #  push_eax              # strncmp (function)
B8 &f_strncmp # mov_eax, &f_strncmp
81C5 48000000          #    add_ebp, %72         # ()
FFD0 #  call_eax
81ED 48000000 # sub_ebp, %72
50               #  push_eax              # 0
B8 00000000 #   mov_eax, %0
5B                # pop_ebx               # ==
39C3 #  cmp_eax_ebx
0F94C0 #    sete_al
0FB6C0 #    movzx_eax,al
85C0           #    test_eax,eax          # if
58 #    pop_eax
0F84 %_main_else11 #    je %_main_else11
 ## M1.c 101
50               #  push_eax              # s (local)
8D85 48000000 # lea_eax,[ebp+DWORD] %72
50               #  push_eax              # line (static)
B8 &static_0_line # mov_eax, &static_0_line
50               #  push_eax              # 7
B8 07000000 #   mov_eax, %7
5B                # pop_ebx               # +
01D8 #  add_eax,ebx
5B                # pop_ebx               # =
8903 #  mov_[ebx],eax
58                # pop_eax               # ;
 ## M1.c 103
:_main_loop12 #:_main_loop12
50               #  push_eax              # s (local)
8D85 48000000 # lea_eax,[ebp+DWORD] %72
8B00          # mov_eax,[eax]         # ?
8A00           #    mov_al,[eax]          # ?1
0FB6C0 #    movzx_eax,al
0FBEC0           #  movsx_eax,al          # char
50               #  push_eax              # 32
B8 20000000 #   mov_eax, %32
5B                # pop_ebx               # ==
39C3 #  cmp_eax_ebx
0F94C0 #    sete_al
0FB6C0 #    movzx_eax,al
85C0           #    test_eax,eax          # !
0F94C0 #    sete_al
0FB6C0 #    movzx_eax,al
85C0           #    test_eax,eax          # if
58 #    pop_eax
0F84 %_main_else13 #    je %_main_else13
E9 %_main_loop_end12 #  jmp %_main_loop_end12
 ## M1.c 103
:_main_else13  #:_main_else13 # no else
50               #  push_eax              # s (local)
8D85 48000000 # lea_eax,[ebp+DWORD] %72
50               #  push_eax              # $ (dup)
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # 1
B8 01000000 #   mov_eax, %1
5B                # pop_ebx               # +
01D8 #  add_eax,ebx
5B                # pop_ebx               # =
8903 #  mov_[ebx],eax
50               #  push_eax              # 1
B8 01000000 #   mov_eax, %1
5B                # pop_ebx               # -
29C3 #  sub_ebx,eax
89D8 #  mov_eax,ebx
58                # pop_eax               # ;
E9 %_main_loop12 #  jmp %_main_loop12
:_main_loop_end12 #:_main_loop_end12
50               #  push_eax              # name (local)
8D85 4C000000 # lea_eax,[ebp+DWORD] %76
50               #  push_eax              # s (local)
8D85 48000000 # lea_eax,[ebp+DWORD] %72
8B00          # mov_eax,[eax]         # ?
5B                # pop_ebx               # =
8903 #  mov_[ebx],eax
58                # pop_eax               # ;
 ## M1.c 105
:_main_loop14 #:_main_loop14
50               #  push_eax              # s (local)
8D85 48000000 # lea_eax,[ebp+DWORD] %72
8B00          # mov_eax,[eax]         # ?
8A00           #    mov_al,[eax]          # ?1
0FB6C0 #    movzx_eax,al
0FBEC0           #  movsx_eax,al          # char
50               #  push_eax              # 32
B8 20000000 #   mov_eax, %32
5B                # pop_ebx               # >s
39C3 #  cmp_eax_ebx
0F9FC0 #    setg_al
0FB6C0 #    movzx_eax,al
85C0           #    test_eax,eax          # !
0F94C0 #    sete_al
0FB6C0 #    movzx_eax,al
85C0           #    test_eax,eax          # if
58 #    pop_eax
0F84 %_main_else15 #    je %_main_else15
E9 %_main_loop_end14 #  jmp %_main_loop_end14
 ## M1.c 106
:_main_else15  #:_main_else15 # no else
50               #  push_eax              # s (local)
8D85 48000000 # lea_eax,[ebp+DWORD] %72
50               #  push_eax              # $ (dup)
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # 1
B8 01000000 #   mov_eax, %1
5B                # pop_ebx               # +
01D8 #  add_eax,ebx
5B                # pop_ebx               # =
8903 #  mov_[ebx],eax
50               #  push_eax              # 1
B8 01000000 #   mov_eax, %1
5B                # pop_ebx               # -
29C3 #  sub_ebx,eax
89D8 #  mov_eax,ebx
58                # pop_eax               # ;
E9 %_main_loop14 #  jmp %_main_loop14
:_main_loop_end14 #:_main_loop_end14
 ## M1.c 107
50               #  push_eax              # s (local)
8D85 48000000 # lea_eax,[ebp+DWORD] %72
8B00          # mov_eax,[eax]         # ?
8A00           #    mov_al,[eax]          # ?1
0FB6C0 #    movzx_eax,al
0FBEC0           #  movsx_eax,al          # char
50               #  push_eax              # 32
B8 20000000 #   mov_eax, %32
5B                # pop_ebx               # <=s
39C3 #  cmp_eax_ebx
0F9EC0 #    setle_al
0FB6C0 #    movzx_eax,al
85C0           #    test_eax,eax          # if
58 #    pop_eax
0F84 %_main_else16 #    je %_main_else16
 ## M1.c 108
50               #  push_eax              # s (local)
8D85 48000000 # lea_eax,[ebp+DWORD] %72
50               #  push_eax              # $ (dup)
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # 1
B8 01000000 #   mov_eax, %1
5B                # pop_ebx               # +
01D8 #  add_eax,ebx
5B                # pop_ebx               # =
8903 #  mov_[ebx],eax
50               #  push_eax              # 1
B8 01000000 #   mov_eax, %1
5B                # pop_ebx               # -
29C3 #  sub_ebx,eax
89D8 #  mov_eax,ebx
50               #  push_eax              # 0
B8 00000000 #   mov_eax, %0
5B                # pop_ebx               # =1
8803 #  mov_[ebx],al
58                # pop_eax               # ;
 ## M1.c 109
:_main_else16  #:_main_else16 # no else
:_main_loop17 #:_main_loop17
50               #  push_eax              # s (local)
8D85 48000000 # lea_eax,[ebp+DWORD] %72
8B00          # mov_eax,[eax]         # ?
8A00           #    mov_al,[eax]          # ?1
0FB6C0 #    movzx_eax,al
0FBEC0           #  movsx_eax,al          # char
50               #  push_eax              # 32
B8 20000000 #   mov_eax, %32
5B                # pop_ebx               # ==
39C3 #  cmp_eax_ebx
0F94C0 #    sete_al
0FB6C0 #    movzx_eax,al
85C0           #    test_eax,eax          # !
0F94C0 #    sete_al
0FB6C0 #    movzx_eax,al
85C0           #    test_eax,eax          # if
58 #    pop_eax
0F84 %_main_else18 #    je %_main_else18
E9 %_main_loop_end17 #  jmp %_main_loop_end17
 ## M1.c 109
:_main_else18  #:_main_else18 # no else
50               #  push_eax              # s (local)
8D85 48000000 # lea_eax,[ebp+DWORD] %72
50               #  push_eax              # $ (dup)
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # 1
B8 01000000 #   mov_eax, %1
5B                # pop_ebx               # +
01D8 #  add_eax,ebx
5B                # pop_ebx               # =
8903 #  mov_[ebx],eax
50               #  push_eax              # 1
B8 01000000 #   mov_eax, %1
5B                # pop_ebx               # -
29C3 #  sub_ebx,eax
89D8 #  mov_eax,ebx
58                # pop_eax               # ;
E9 %_main_loop17 #  jmp %_main_loop17
:_main_loop_end17 #:_main_loop_end17
50               #  push_eax              # value (local)
8D85 50000000 # lea_eax,[ebp+DWORD] %80
50               #  push_eax              # s (local)
8D85 48000000 # lea_eax,[ebp+DWORD] %72
8B00          # mov_eax,[eax]         # ?
5B                # pop_ebx               # =
8903 #  mov_[ebx],eax
58                # pop_eax               # ;
 ## M1.c 111
:_main_loop19 #:_main_loop19
50               #  push_eax              # s (local)
8D85 48000000 # lea_eax,[ebp+DWORD] %72
8B00          # mov_eax,[eax]         # ?
8A00           #    mov_al,[eax]          # ?1
0FB6C0 #    movzx_eax,al
0FBEC0           #  movsx_eax,al          # char
50               #  push_eax              # 32
B8 20000000 #   mov_eax, %32
5B                # pop_ebx               # >s
39C3 #  cmp_eax_ebx
0F9FC0 #    setg_al
0FB6C0 #    movzx_eax,al
85C0           #    test_eax,eax          # !
0F94C0 #    sete_al
0FB6C0 #    movzx_eax,al
85C0           #    test_eax,eax          # if
58 #    pop_eax
0F84 %_main_else20 #    je %_main_else20
E9 %_main_loop_end19 #  jmp %_main_loop_end19
 ## M1.c 112
:_main_else20  #:_main_else20 # no else
50               #  push_eax              # s (local)
8D85 48000000 # lea_eax,[ebp+DWORD] %72
50               #  push_eax              # $ (dup)
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # 1
B8 01000000 #   mov_eax, %1
5B                # pop_ebx               # +
01D8 #  add_eax,ebx
5B                # pop_ebx               # =
8903 #  mov_[ebx],eax
50               #  push_eax              # 1
B8 01000000 #   mov_eax, %1
5B                # pop_ebx               # -
29C3 #  sub_ebx,eax
89D8 #  mov_eax,ebx
58                # pop_eax               # ;
E9 %_main_loop19 #  jmp %_main_loop19
:_main_loop_end19 #:_main_loop_end19
 ## M1.c 113
50               #  push_eax              # s (local)
8D85 48000000 # lea_eax,[ebp+DWORD] %72
8B00          # mov_eax,[eax]         # ?
8A00           #    mov_al,[eax]          # ?1
0FB6C0 #    movzx_eax,al
0FBEC0           #  movsx_eax,al          # char
50               #  push_eax              # 32
B8 20000000 #   mov_eax, %32
5B                # pop_ebx               # <=s
39C3 #  cmp_eax_ebx
0F9EC0 #    setle_al
0FB6C0 #    movzx_eax,al
85C0           #    test_eax,eax          # if
58 #    pop_eax
0F84 %_main_else21 #    je %_main_else21
 ## M1.c 114
50               #  push_eax              # s (local)
8D85 48000000 # lea_eax,[ebp+DWORD] %72
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # 0
B8 00000000 #   mov_eax, %0
5B                # pop_ebx               # =1
8803 #  mov_[ebx],al
58                # pop_eax               # ;
 ## M1.c 115
:_main_else21  #:_main_else21 # no else
50               #  push_eax              # name (local)
8D85 4C000000 # lea_eax,[ebp+DWORD] %76
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # value (local)
8D85 50000000 # lea_eax,[ebp+DWORD] %80
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # add_define (function)
B8 &f_add_define #  mov_eax, &f_add_define
81C5 54000000          #    add_ebp, %84         # ()
FFD0 #  call_eax
81ED 54000000 # sub_ebp, %84
58                # pop_eax               # ;
E9 %_main_else_end11 #  jmp %_main_else_end11
:_main_else11 #:_main_else11
 ## M1.c 118
50               #  push_eax              # s (local)
8D85 48000000 # lea_eax,[ebp+DWORD] %72
50               #  push_eax              # line (static)
B8 &static_0_line # mov_eax, &static_0_line
5B                # pop_ebx               # =
8903 #  mov_[ebx],eax
58                # pop_eax               # ;
 ## M1.c 120
:_main_loop22 #:_main_loop22
50               #  push_eax              # s (local)
8D85 48000000 # lea_eax,[ebp+DWORD] %72
8B00          # mov_eax,[eax]         # ?
8A00           #    mov_al,[eax]          # ?1
0FB6C0 #    movzx_eax,al
0FBEC0           #  movsx_eax,al          # char
50               #  push_eax              # 32
B8 20000000 #   mov_eax, %32
5B                # pop_ebx               # ==
39C3 #  cmp_eax_ebx
0F94C0 #    sete_al
0FB6C0 #    movzx_eax,al
85C0           #    test_eax,eax          # ||
0F85 %_main_or_end23 #  jne %_main_or_end23
58 #    pop_eax
50               #  push_eax              # s (local)
8D85 48000000 # lea_eax,[ebp+DWORD] %72
8B00          # mov_eax,[eax]         # ?
8A00           #    mov_al,[eax]          # ?1
0FB6C0 #    movzx_eax,al
0FBEC0           #  movsx_eax,al          # char
50               #  push_eax              # 9
B8 09000000 #   mov_eax, %9
5B                # pop_ebx               # ==
39C3 #  cmp_eax_ebx
0F94C0 #    sete_al
0FB6C0 #    movzx_eax,al
:_main_or_end23 #:_main_or_end23
85C0           #    test_eax,eax          # !
0F94C0 #    sete_al
0FB6C0 #    movzx_eax,al
85C0           #    test_eax,eax          # if
58 #    pop_eax
0F84 %_main_else24 #    je %_main_else24
E9 %_main_loop_end22 #  jmp %_main_loop_end22
 ## M1.c 121
:_main_else24  #:_main_else24 # no else
50               #  push_eax              # s (local)
8D85 48000000 # lea_eax,[ebp+DWORD] %72
50               #  push_eax              # $ (dup)
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # 1
B8 01000000 #   mov_eax, %1
5B                # pop_ebx               # +
01D8 #  add_eax,ebx
5B                # pop_ebx               # =
8903 #  mov_[ebx],eax
50               #  push_eax              # 1
B8 01000000 #   mov_eax, %1
5B                # pop_ebx               # -
29C3 #  sub_ebx,eax
89D8 #  mov_eax,ebx
58                # pop_eax               # ;
E9 %_main_loop22 #  jmp %_main_loop22
:_main_loop_end22 #:_main_loop_end22
 ## M1.c 122
:_main_loop25 #:_main_loop25
50               #  push_eax              # s (local)
8D85 48000000 # lea_eax,[ebp+DWORD] %72
8B00          # mov_eax,[eax]         # ?
8A00           #    mov_al,[eax]          # ?1
0FB6C0 #    movzx_eax,al
0FBEC0           #  movsx_eax,al          # char
50               #  push_eax              # 0
B8 00000000 #   mov_eax, %0
5B                # pop_ebx               # !=
39C3 #  cmp_eax_ebx
0F95C0 #    setne_al
0FB6C0 #    movzx_eax,al
85C0           #    test_eax,eax          # &&
0F84 %_main_and_end26 # je %_main_and_end26
58 #    pop_eax
50               #  push_eax              # s (local)
8D85 48000000 # lea_eax,[ebp+DWORD] %72
8B00          # mov_eax,[eax]         # ?
8A00           #    mov_al,[eax]          # ?1
0FB6C0 #    movzx_eax,al
0FBEC0           #  movsx_eax,al          # char
50               #  push_eax              # 13
B8 0D000000 #   mov_eax, %13
5B                # pop_ebx               # !=
39C3 #  cmp_eax_ebx
0F95C0 #    setne_al
0FB6C0 #    movzx_eax,al
:_main_and_end26 #:_main_and_end26
85C0           #    test_eax,eax          # &&
0F84 %_main_and_end27 # je %_main_and_end27
58 #    pop_eax
50               #  push_eax              # s (local)
8D85 48000000 # lea_eax,[ebp+DWORD] %72
8B00          # mov_eax,[eax]         # ?
8A00           #    mov_al,[eax]          # ?1
0FB6C0 #    movzx_eax,al
0FBEC0           #  movsx_eax,al          # char
50               #  push_eax              # 10
B8 0A000000 #   mov_eax, %10
5B                # pop_ebx               # !=
39C3 #  cmp_eax_ebx
0F95C0 #    setne_al
0FB6C0 #    movzx_eax,al
:_main_and_end27 #:_main_and_end27
85C0           #    test_eax,eax          # &&
0F84 %_main_and_end28 # je %_main_and_end28
58 #    pop_eax
50               #  push_eax              # s (local)
8D85 48000000 # lea_eax,[ebp+DWORD] %72
8B00          # mov_eax,[eax]         # ?
8A00           #    mov_al,[eax]          # ?1
0FB6C0 #    movzx_eax,al
0FBEC0           #  movsx_eax,al          # char
50               #  push_eax              # 35
B8 23000000 #   mov_eax, %35
5B                # pop_ebx               # !=
39C3 #  cmp_eax_ebx
0F95C0 #    setne_al
0FB6C0 #    movzx_eax,al
:_main_and_end28 #:_main_and_end28
85C0           #    test_eax,eax          # !
0F94C0 #    sete_al
0FB6C0 #    movzx_eax,al
85C0           #    test_eax,eax          # if
58 #    pop_eax
0F84 %_main_else29 #    je %_main_else29
E9 %_main_loop_end25 #  jmp %_main_loop_end25
 ## M1.c 123
 ## M1.c 124
:_main_else29  #:_main_else29 # no else
50               #  push_eax              # s (local)
8D85 48000000 # lea_eax,[ebp+DWORD] %72
8B00          # mov_eax,[eax]         # ?
8A00           #    mov_al,[eax]          # ?1
0FB6C0 #    movzx_eax,al
0FBEC0           #  movsx_eax,al          # char
50               #  push_eax              # 32
B8 20000000 #   mov_eax, %32
5B                # pop_ebx               # <=s
39C3 #  cmp_eax_ebx
0F9EC0 #    setle_al
0FB6C0 #    movzx_eax,al
85C0           #    test_eax,eax          # if
58 #    pop_eax
0F84 %_main_else30 #    je %_main_else30
 ## M1.c 125
 ## M1.c 126
50               #  push_eax              # 32
B8 20000000 #   mov_eax, %32
50               #  push_eax              # fout (local)
8D85 3C000000 # lea_eax,[ebp+DWORD] %60
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # fputc (function)
B8 &f_fputc #   mov_eax, &f_fputc
81C5 4C000000          #    add_ebp, %76         # ()
FFD0 #  call_eax
81ED 4C000000 # sub_ebp, %76
58                # pop_eax               # ;
 ## M1.c 127
50               #  push_eax              # s (local)
8D85 48000000 # lea_eax,[ebp+DWORD] %72
50               #  push_eax              # $ (dup)
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # 1
B8 01000000 #   mov_eax, %1
5B                # pop_ebx               # +
01D8 #  add_eax,ebx
5B                # pop_ebx               # =
8903 #  mov_[ebx],eax
50               #  push_eax              # 1
B8 01000000 #   mov_eax, %1
5B                # pop_ebx               # -
29C3 #  sub_ebx,eax
89D8 #  mov_eax,ebx
58                # pop_eax               # ;
E9 %_main_else_end30 #  jmp %_main_else_end30
:_main_else30 #:_main_else30
 ## M1.c 129
50               #  push_eax              # s (local)
8D85 48000000 # lea_eax,[ebp+DWORD] %72
8B00          # mov_eax,[eax]         # ?
8A00           #    mov_al,[eax]          # ?1
0FB6C0 #    movzx_eax,al
0FBEC0           #  movsx_eax,al          # char
50               #  push_eax              # 37
B8 25000000 #   mov_eax, %37
5B                # pop_ebx               # ==
39C3 #  cmp_eax_ebx
0F94C0 #    sete_al
0FB6C0 #    movzx_eax,al
85C0           #    test_eax,eax          # ||
0F85 %_main_or_end31 #  jne %_main_or_end31
58 #    pop_eax
50               #  push_eax              # s (local)
8D85 48000000 # lea_eax,[ebp+DWORD] %72
8B00          # mov_eax,[eax]         # ?
8A00           #    mov_al,[eax]          # ?1
0FB6C0 #    movzx_eax,al
0FBEC0           #  movsx_eax,al          # char
50               #  push_eax              # 33
B8 21000000 #   mov_eax, %33
5B                # pop_ebx               # ==
39C3 #  cmp_eax_ebx
0F94C0 #    sete_al
0FB6C0 #    movzx_eax,al
:_main_or_end31 #:_main_or_end31
85C0           #    test_eax,eax          # &&
0F84 %_main_and_end32 # je %_main_and_end32
58 #    pop_eax
50               #  push_eax              # 48
B8 30000000 #   mov_eax, %48
50               #  push_eax              # s (local)
8D85 48000000 # lea_eax,[ebp+DWORD] %72
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # 1
B8 01000000 #   mov_eax, %1
5B                # pop_ebx               # +
01D8 #  add_eax,ebx
8A00           #    mov_al,[eax]          # ?1
0FB6C0 #    movzx_eax,al
0FBEC0           #  movsx_eax,al          # char
5B                # pop_ebx               # <=s
39C3 #  cmp_eax_ebx
0F9EC0 #    setle_al
0FB6C0 #    movzx_eax,al
85C0           #    test_eax,eax          # &&
0F84 %_main_and_end33 # je %_main_and_end33
58 #    pop_eax
50               #  push_eax              # s (local)
8D85 48000000 # lea_eax,[ebp+DWORD] %72
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # 1
B8 01000000 #   mov_eax, %1
5B                # pop_ebx               # +
01D8 #  add_eax,ebx
8A00           #    mov_al,[eax]          # ?1
0FB6C0 #    movzx_eax,al
0FBEC0           #  movsx_eax,al          # char
50               #  push_eax              # 57
B8 39000000 #   mov_eax, %57
5B                # pop_ebx               # <=s
39C3 #  cmp_eax_ebx
0F9EC0 #    setle_al
0FB6C0 #    movzx_eax,al
:_main_and_end33 #:_main_and_end33
85C0           #    test_eax,eax          # ||
0F85 %_main_or_end34 #  jne %_main_or_end34
58 #    pop_eax
50               #  push_eax              # s (local)
8D85 48000000 # lea_eax,[ebp+DWORD] %72
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # 1
B8 01000000 #   mov_eax, %1
5B                # pop_ebx               # +
01D8 #  add_eax,ebx
8A00           #    mov_al,[eax]          # ?1
0FB6C0 #    movzx_eax,al
0FBEC0           #  movsx_eax,al          # char
50               #  push_eax              # 45
B8 2D000000 #   mov_eax, %45
5B                # pop_ebx               # ==
39C3 #  cmp_eax_ebx
0F94C0 #    sete_al
0FB6C0 #    movzx_eax,al
:_main_or_end34 #:_main_or_end34
:_main_and_end32 #:_main_and_end32
85C0           #    test_eax,eax          # if
58 #    pop_eax
0F84 %_main_else35 #    je %_main_else35
 ## M1.c 130
50               #  push_eax              # nr_bits (local)
8D85 4C000000 # lea_eax,[ebp+DWORD] %76
50               #  push_eax              # s (local)
8D85 48000000 # lea_eax,[ebp+DWORD] %72
8B00          # mov_eax,[eax]         # ?
8A00           #    mov_al,[eax]          # ?1
0FB6C0 #    movzx_eax,al
0FBEC0           #  movsx_eax,al          # char
50               #  push_eax              # 37
B8 25000000 #   mov_eax, %37
5B                # pop_ebx               # ==
39C3 #  cmp_eax_ebx
0F94C0 #    sete_al
0FB6C0 #    movzx_eax,al
85C0           #    test_eax,eax          # if
58 #    pop_eax
0F84 %_main_else36 #    je %_main_else36
50               #  push_eax              # 32
B8 20000000 #   mov_eax, %32
E9 %_main_else_end36 #  jmp %_main_else_end36
:_main_else36 #:_main_else36
50               #  push_eax              # 8
B8 08000000 #   mov_eax, %8
:_main_else_end36 #:_main_else_end36
5B                # pop_ebx               # =
8903 #  mov_[ebx],eax
58                # pop_eax               # ;
 ## M1.c 132
50               #  push_eax              # s (local)
8D85 48000000 # lea_eax,[ebp+DWORD] %72
50               #  push_eax              # $ (dup)
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # 1
B8 01000000 #   mov_eax, %1
5B                # pop_ebx               # +
01D8 #  add_eax,ebx
5B                # pop_ebx               # =
8903 #  mov_[ebx],eax
50               #  push_eax              # 1
B8 01000000 #   mov_eax, %1
5B                # pop_ebx               # -
29C3 #  sub_ebx,eax
89D8 #  mov_eax,ebx
58                # pop_eax               # ;
50               #  push_eax              # sign (local)
8D85 50000000 # lea_eax,[ebp+DWORD] %80
50               #  push_eax              # 1
B8 01000000 #   mov_eax, %1
5B                # pop_ebx               # =
8903 #  mov_[ebx],eax
58                # pop_eax               # ;
 ## M1.c 134
50               #  push_eax              # s (local)
8D85 48000000 # lea_eax,[ebp+DWORD] %72
8B00          # mov_eax,[eax]         # ?
8A00           #    mov_al,[eax]          # ?1
0FB6C0 #    movzx_eax,al
0FBEC0           #  movsx_eax,al          # char
50               #  push_eax              # 45
B8 2D000000 #   mov_eax, %45
5B                # pop_ebx               # ==
39C3 #  cmp_eax_ebx
0F94C0 #    sete_al
0FB6C0 #    movzx_eax,al
85C0           #    test_eax,eax          # if
58 #    pop_eax
0F84 %_main_else37 #    je %_main_else37
 ## M1.c 135
 ## M1.c 136
50               #  push_eax              # sign (local)
8D85 50000000 # lea_eax,[ebp+DWORD] %80
50               #  push_eax              # 4294967295
B8 FFFFFFFF #   mov_eax, %4294967295
5B                # pop_ebx               # =
8903 #  mov_[ebx],eax
58                # pop_eax               # ;
 ## M1.c 137
50               #  push_eax              # s (local)
8D85 48000000 # lea_eax,[ebp+DWORD] %72
50               #  push_eax              # $ (dup)
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # 1
B8 01000000 #   mov_eax, %1
5B                # pop_ebx               # +
01D8 #  add_eax,ebx
5B                # pop_ebx               # =
8903 #  mov_[ebx],eax
50               #  push_eax              # 1
B8 01000000 #   mov_eax, %1
5B                # pop_ebx               # -
29C3 #  sub_ebx,eax
89D8 #  mov_eax,ebx
58                # pop_eax               # ;
:_main_else37  #:_main_else37 # no else
50               #  push_eax              # v (local)
8D85 54000000 # lea_eax,[ebp+DWORD] %84
50               #  push_eax              # 0
B8 00000000 #   mov_eax, %0
5B                # pop_ebx               # =
8903 #  mov_[ebx],eax
58                # pop_eax               # ;
 ## M1.c 140
:_main_loop38 #:_main_loop38
50               #  push_eax              # 48
B8 30000000 #   mov_eax, %48
50               #  push_eax              # s (local)
8D85 48000000 # lea_eax,[ebp+DWORD] %72
8B00          # mov_eax,[eax]         # ?
8A00           #    mov_al,[eax]          # ?1
0FB6C0 #    movzx_eax,al
0FBEC0           #  movsx_eax,al          # char
5B                # pop_ebx               # <=s
39C3 #  cmp_eax_ebx
0F9EC0 #    setle_al
0FB6C0 #    movzx_eax,al
85C0           #    test_eax,eax          # &&
0F84 %_main_and_end39 # je %_main_and_end39
58 #    pop_eax
50               #  push_eax              # s (local)
8D85 48000000 # lea_eax,[ebp+DWORD] %72
8B00          # mov_eax,[eax]         # ?
8A00           #    mov_al,[eax]          # ?1
0FB6C0 #    movzx_eax,al
0FBEC0           #  movsx_eax,al          # char
50               #  push_eax              # 57
B8 39000000 #   mov_eax, %57
5B                # pop_ebx               # <=s
39C3 #  cmp_eax_ebx
0F9EC0 #    setle_al
0FB6C0 #    movzx_eax,al
:_main_and_end39 #:_main_and_end39
85C0           #    test_eax,eax          # !
0F94C0 #    sete_al
0FB6C0 #    movzx_eax,al
85C0           #    test_eax,eax          # if
58 #    pop_eax
0F84 %_main_else40 #    je %_main_else40
E9 %_main_loop_end38 #  jmp %_main_loop_end38
 ## M1.c 141
:_main_else40  #:_main_else40 # no else
50               #  push_eax              # v (local)
8D85 54000000 # lea_eax,[ebp+DWORD] %84
50               #  push_eax              # 10
B8 0A000000 #   mov_eax, %10
50               #  push_eax              # v (local)
8D85 54000000 # lea_eax,[ebp+DWORD] %84
8B00          # mov_eax,[eax]         # ?
5B                # pop_ebx               # *
F7E3 #  mul_ebx
50               #  push_eax              # s (local)
8D85 48000000 # lea_eax,[ebp+DWORD] %72
8B00          # mov_eax,[eax]         # ?
8A00           #    mov_al,[eax]          # ?1
0FB6C0 #    movzx_eax,al
0FBEC0           #  movsx_eax,al          # char
5B                # pop_ebx               # +
01D8 #  add_eax,ebx
50               #  push_eax              # 48
B8 30000000 #   mov_eax, %48
5B                # pop_ebx               # -
29C3 #  sub_ebx,eax
89D8 #  mov_eax,ebx
5B                # pop_ebx               # =
8903 #  mov_[ebx],eax
58                # pop_eax               # ;
50               #  push_eax              # s (local)
8D85 48000000 # lea_eax,[ebp+DWORD] %72
50               #  push_eax              # $ (dup)
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # 1
B8 01000000 #   mov_eax, %1
5B                # pop_ebx               # +
01D8 #  add_eax,ebx
5B                # pop_ebx               # =
8903 #  mov_[ebx],eax
50               #  push_eax              # 1
B8 01000000 #   mov_eax, %1
5B                # pop_ebx               # -
29C3 #  sub_ebx,eax
89D8 #  mov_eax,ebx
58                # pop_eax               # ;
E9 %_main_loop38 #  jmp %_main_loop38
:_main_loop_end38 #:_main_loop_end38
 ## M1.c 142
50               #  push_eax              # v (local)
8D85 54000000 # lea_eax,[ebp+DWORD] %84
50               #  push_eax              # $ (dup)
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # sign (local)
8D85 50000000 # lea_eax,[ebp+DWORD] %80
8B00          # mov_eax,[eax]         # ?
5B                # pop_ebx               # *
F7E3 #  mul_ebx
5B                # pop_ebx               # =
8903 #  mov_[ebx],eax
58                # pop_eax               # ;
 ## M1.c 143
50               #  push_eax              # i (local)
8D85 58000000 # lea_eax,[ebp+DWORD] %88
50               #  push_eax              # 0
B8 00000000 #   mov_eax, %0
5B                # pop_ebx               # =
8903 #  mov_[ebx],eax
58                # pop_eax               # ;
:_main_loop41 #:_main_loop41
50               #  push_eax              # i (local)
8D85 58000000 # lea_eax,[ebp+DWORD] %88
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # nr_bits (local)
8D85 4C000000 # lea_eax,[ebp+DWORD] %76
8B00          # mov_eax,[eax]         # ?
5B                # pop_ebx               # <s
39C3 #  cmp_eax_ebx
0F9CC0 #    setl_al
0FB6C0 #    movzx_eax,al
85C0           #    test_eax,eax          # !
0F94C0 #    sete_al
0FB6C0 #    movzx_eax,al
85C0           #    test_eax,eax          # if
58 #    pop_eax
0F84 %_main_else42 #    je %_main_else42
E9 %_main_loop_end41 #  jmp %_main_loop_end41
 ## M1.c 144
 ## M1.c 145
:_main_else42  #:_main_else42 # no else
50               #  push_eax              # v (local)
8D85 54000000 # lea_eax,[ebp+DWORD] %84
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # i (local)
8D85 58000000 # lea_eax,[ebp+DWORD] %88
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # 4
B8 04000000 #   mov_eax, %4
5B                # pop_ebx               # +
01D8 #  add_eax,ebx
89C1            #   mov_ecx,eax           # >>
58 #    pop_eax
D3E8 #  shr_eax,cl
50               #  push_eax              # 15
B8 0F000000 #   mov_eax, %15
5B                # pop_ebx               # &
21D8 #  and_eax,ebx
50               #  push_eax              # fout (local)
8D85 3C000000 # lea_eax,[ebp+DWORD] %60
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # output_hex (function)
B8 &f_output_hex #  mov_eax, &f_output_hex
81C5 5C000000          #    add_ebp, %92         # ()
FFD0 #  call_eax
81ED 5C000000 # sub_ebp, %92
58                # pop_eax               # ;
 ## M1.c 146
50               #  push_eax              # v (local)
8D85 54000000 # lea_eax,[ebp+DWORD] %84
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # i (local)
8D85 58000000 # lea_eax,[ebp+DWORD] %88
8B00          # mov_eax,[eax]         # ?
89C1            #   mov_ecx,eax           # >>
58 #    pop_eax
D3E8 #  shr_eax,cl
50               #  push_eax              # 15
B8 0F000000 #   mov_eax, %15
5B                # pop_ebx               # &
21D8 #  and_eax,ebx
50               #  push_eax              # fout (local)
8D85 3C000000 # lea_eax,[ebp+DWORD] %60
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # output_hex (function)
B8 &f_output_hex #  mov_eax, &f_output_hex
81C5 5C000000          #    add_ebp, %92         # ()
FFD0 #  call_eax
81ED 5C000000 # sub_ebp, %92
58                # pop_eax               # ;
50               #  push_eax              # i (local)
8D85 58000000 # lea_eax,[ebp+DWORD] %88
50               #  push_eax              # $ (dup)
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # 8
B8 08000000 #   mov_eax, %8
5B                # pop_ebx               # +
01D8 #  add_eax,ebx
5B                # pop_ebx               # =
8903 #  mov_[ebx],eax
58                # pop_eax               # ;
E9 %_main_loop41 #  jmp %_main_loop41
:_main_loop_end41 #:_main_loop_end41
E9 %_main_else_end35 #  jmp %_main_else_end35
:_main_else35 #:_main_else35
 ## M1.c 149
50               #  push_eax              # s (local)
8D85 48000000 # lea_eax,[ebp+DWORD] %72
8B00          # mov_eax,[eax]         # ?
8A00           #    mov_al,[eax]          # ?1
0FB6C0 #    movzx_eax,al
0FBEC0           #  movsx_eax,al          # char
50               #  push_eax              # 37
B8 25000000 #   mov_eax, %37
5B                # pop_ebx               # ==
39C3 #  cmp_eax_ebx
0F94C0 #    sete_al
0FB6C0 #    movzx_eax,al
85C0           #    test_eax,eax          # ||
0F85 %_main_or_end43 #  jne %_main_or_end43
58 #    pop_eax
50               #  push_eax              # s (local)
8D85 48000000 # lea_eax,[ebp+DWORD] %72
8B00          # mov_eax,[eax]         # ?
8A00           #    mov_al,[eax]          # ?1
0FB6C0 #    movzx_eax,al
0FBEC0           #  movsx_eax,al          # char
50               #  push_eax              # 58
B8 3A000000 #   mov_eax, %58
5B                # pop_ebx               # ==
39C3 #  cmp_eax_ebx
0F94C0 #    sete_al
0FB6C0 #    movzx_eax,al
:_main_or_end43 #:_main_or_end43
85C0           #    test_eax,eax          # ||
0F85 %_main_or_end44 #  jne %_main_or_end44
58 #    pop_eax
50               #  push_eax              # s (local)
8D85 48000000 # lea_eax,[ebp+DWORD] %72
8B00          # mov_eax,[eax]         # ?
8A00           #    mov_al,[eax]          # ?1
0FB6C0 #    movzx_eax,al
0FBEC0           #  movsx_eax,al          # char
50               #  push_eax              # 35
B8 23000000 #   mov_eax, %35
5B                # pop_ebx               # ==
39C3 #  cmp_eax_ebx
0F94C0 #    sete_al
0FB6C0 #    movzx_eax,al
:_main_or_end44 #:_main_or_end44
85C0           #    test_eax,eax          # ||
0F85 %_main_or_end45 #  jne %_main_or_end45
58 #    pop_eax
50               #  push_eax              # s (local)
8D85 48000000 # lea_eax,[ebp+DWORD] %72
8B00          # mov_eax,[eax]         # ?
8A00           #    mov_al,[eax]          # ?1
0FB6C0 #    movzx_eax,al
0FBEC0           #  movsx_eax,al          # char
50               #  push_eax              # 38
B8 26000000 #   mov_eax, %38
5B                # pop_ebx               # ==
39C3 #  cmp_eax_ebx
0F94C0 #    sete_al
0FB6C0 #    movzx_eax,al
:_main_or_end45 #:_main_or_end45
85C0           #    test_eax,eax          # if
58 #    pop_eax
0F84 %_main_else46 #    je %_main_else46
 ## M1.c 150
 ## M1.c 151
:_main_loop47 #:_main_loop47
 ## M1.c 152
50               #  push_eax              # s (local)
8D85 48000000 # lea_eax,[ebp+DWORD] %72
50               #  push_eax              # $ (dup)
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # 1
B8 01000000 #   mov_eax, %1
5B                # pop_ebx               # +
01D8 #  add_eax,ebx
5B                # pop_ebx               # =
8903 #  mov_[ebx],eax
50               #  push_eax              # 1
B8 01000000 #   mov_eax, %1
5B                # pop_ebx               # -
29C3 #  sub_ebx,eax
89D8 #  mov_eax,ebx
8A00           #    mov_al,[eax]          # ?1
0FB6C0 #    movzx_eax,al
0FBEC0           #  movsx_eax,al          # char
50               #  push_eax              # fout (local)
8D85 3C000000 # lea_eax,[ebp+DWORD] %60
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # fputc (function)
B8 &f_fputc #   mov_eax, &f_fputc
81C5 4C000000          #    add_ebp, %76         # ()
FFD0 #  call_eax
81ED 4C000000 # sub_ebp, %76
58                # pop_eax               # ;
50               #  push_eax              # s (local)
8D85 48000000 # lea_eax,[ebp+DWORD] %72
8B00          # mov_eax,[eax]         # ?
8A00           #    mov_al,[eax]          # ?1
0FB6C0 #    movzx_eax,al
0FBEC0           #  movsx_eax,al          # char
50               #  push_eax              # 32
B8 20000000 #   mov_eax, %32
5B                # pop_ebx               # >s
39C3 #  cmp_eax_ebx
0F9FC0 #    setg_al
0FB6C0 #    movzx_eax,al
85C0           #    test_eax,eax          # !
0F94C0 #    sete_al
0FB6C0 #    movzx_eax,al
85C0           #    test_eax,eax          # if
58 #    pop_eax
0F84 %_main_else48 #    je %_main_else48
E9 %_main_loop_end47 #  jmp %_main_loop_end47
:_main_else48  #:_main_else48 # no else
E9 %_main_loop47 #  jmp %_main_loop47
:_main_loop_end47 #:_main_loop_end47
E9 %_main_else_end46 #  jmp %_main_else_end46
:_main_else46 #:_main_else46
 ## M1.c 155
50               #  push_eax              # s (local)
8D85 48000000 # lea_eax,[ebp+DWORD] %72
8B00          # mov_eax,[eax]         # ?
8A00           #    mov_al,[eax]          # ?1
0FB6C0 #    movzx_eax,al
0FBEC0           #  movsx_eax,al          # char
50               #  push_eax              # 34
B8 22000000 #   mov_eax, %34
5B                # pop_ebx               # ==
39C3 #  cmp_eax_ebx
0F94C0 #    sete_al
0FB6C0 #    movzx_eax,al
85C0           #    test_eax,eax          # if
58 #    pop_eax
0F84 %_main_else49 #    je %_main_else49
 ## M1.c 156
 ## M1.c 157
50               #  push_eax              # s (local)
8D85 48000000 # lea_eax,[ebp+DWORD] %72
50               #  push_eax              # $ (dup)
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # 1
B8 01000000 #   mov_eax, %1
5B                # pop_ebx               # +
01D8 #  add_eax,ebx
5B                # pop_ebx               # =
8903 #  mov_[ebx],eax
50               #  push_eax              # 1
B8 01000000 #   mov_eax, %1
5B                # pop_ebx               # -
29C3 #  sub_ebx,eax
89D8 #  mov_eax,ebx
58                # pop_eax               # ;
 ## M1.c 158
:_main_loop50 #:_main_loop50
50               #  push_eax              # s (local)
8D85 48000000 # lea_eax,[ebp+DWORD] %72
8B00          # mov_eax,[eax]         # ?
8A00           #    mov_al,[eax]          # ?1
0FB6C0 #    movzx_eax,al
0FBEC0           #  movsx_eax,al          # char
50               #  push_eax              # 34
B8 22000000 #   mov_eax, %34
5B                # pop_ebx               # !=
39C3 #  cmp_eax_ebx
0F95C0 #    setne_al
0FB6C0 #    movzx_eax,al
85C0           #    test_eax,eax          # &&
0F84 %_main_and_end51 # je %_main_and_end51
58 #    pop_eax
50               #  push_eax              # s (local)
8D85 48000000 # lea_eax,[ebp+DWORD] %72
8B00          # mov_eax,[eax]         # ?
8A00           #    mov_al,[eax]          # ?1
0FB6C0 #    movzx_eax,al
0FBEC0           #  movsx_eax,al          # char
50               #  push_eax              # 0
B8 00000000 #   mov_eax, %0
5B                # pop_ebx               # !=
39C3 #  cmp_eax_ebx
0F95C0 #    setne_al
0FB6C0 #    movzx_eax,al
:_main_and_end51 #:_main_and_end51
85C0           #    test_eax,eax          # !
0F94C0 #    sete_al
0FB6C0 #    movzx_eax,al
85C0           #    test_eax,eax          # if
58 #    pop_eax
0F84 %_main_else52 #    je %_main_else52
E9 %_main_loop_end50 #  jmp %_main_loop_end50
 ## M1.c 159
:_main_else52  #:_main_else52 # no else
50               #  push_eax              # v (local)
8D85 4C000000 # lea_eax,[ebp+DWORD] %76
50               #  push_eax              # s (local)
8D85 48000000 # lea_eax,[ebp+DWORD] %72
50               #  push_eax              # $ (dup)
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # 1
B8 01000000 #   mov_eax, %1
5B                # pop_ebx               # +
01D8 #  add_eax,ebx
5B                # pop_ebx               # =
8903 #  mov_[ebx],eax
50               #  push_eax              # 1
B8 01000000 #   mov_eax, %1
5B                # pop_ebx               # -
29C3 #  sub_ebx,eax
89D8 #  mov_eax,ebx
8A00           #    mov_al,[eax]          # ?1
0FB6C0 #    movzx_eax,al
0FBEC0           #  movsx_eax,al          # char
5B                # pop_ebx               # =
8903 #  mov_[ebx],eax
58                # pop_eax               # ;
 ## M1.c 161
50               #  push_eax              # v (local)
8D85 4C000000 # lea_eax,[ebp+DWORD] %76
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # 4
B8 04000000 #   mov_eax, %4
89C1            #   mov_ecx,eax           # >>
58 #    pop_eax
D3E8 #  shr_eax,cl
50               #  push_eax              # 15
B8 0F000000 #   mov_eax, %15
5B                # pop_ebx               # &
21D8 #  and_eax,ebx
50               #  push_eax              # fout (local)
8D85 3C000000 # lea_eax,[ebp+DWORD] %60
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # output_hex (function)
B8 &f_output_hex #  mov_eax, &f_output_hex
81C5 50000000          #    add_ebp, %80         # ()
FFD0 #  call_eax
81ED 50000000 # sub_ebp, %80
58                # pop_eax               # ;
 ## M1.c 162
50               #  push_eax              # v (local)
8D85 4C000000 # lea_eax,[ebp+DWORD] %76
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # 15
B8 0F000000 #   mov_eax, %15
5B                # pop_ebx               # &
21D8 #  and_eax,ebx
50               #  push_eax              # fout (local)
8D85 3C000000 # lea_eax,[ebp+DWORD] %60
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # output_hex (function)
B8 &f_output_hex #  mov_eax, &f_output_hex
81C5 50000000          #    add_ebp, %80         # ()
FFD0 #  call_eax
81ED 50000000 # sub_ebp, %80
58                # pop_eax               # ;
E9 %_main_loop50 #  jmp %_main_loop50
:_main_loop_end50 #:_main_loop_end50
 ## M1.c 164
50               #  push_eax              # fout (local)
8D85 3C000000 # lea_eax,[ebp+DWORD] %60
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # '00 '
B8 &string_18 # mov_eax, &string_18
50               #  push_eax              # 0
B8 00000000 #   mov_eax, %0
50               #  push_eax              # fprintf (function)
B8 &f_fprintf # mov_eax, &f_fprintf
81C5 4C000000          #    add_ebp, %76         # ()
FFD0 #  call_eax
81ED 4C000000 # sub_ebp, %76
58                # pop_eax               # ;
 ## M1.c 165
50               #  push_eax              # s (local)
8D85 48000000 # lea_eax,[ebp+DWORD] %72
8B00          # mov_eax,[eax]         # ?
8A00           #    mov_al,[eax]          # ?1
0FB6C0 #    movzx_eax,al
0FBEC0           #  movsx_eax,al          # char
50               #  push_eax              # 34
B8 22000000 #   mov_eax, %34
5B                # pop_ebx               # ==
39C3 #  cmp_eax_ebx
0F94C0 #    sete_al
0FB6C0 #    movzx_eax,al
85C0           #    test_eax,eax          # if
58 #    pop_eax
0F84 %_main_else53 #    je %_main_else53
 ## M1.c 166
50               #  push_eax              # s (local)
8D85 48000000 # lea_eax,[ebp+DWORD] %72
50               #  push_eax              # $ (dup)
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # 1
B8 01000000 #   mov_eax, %1
5B                # pop_ebx               # +
01D8 #  add_eax,ebx
5B                # pop_ebx               # =
8903 #  mov_[ebx],eax
50               #  push_eax              # 1
B8 01000000 #   mov_eax, %1
5B                # pop_ebx               # -
29C3 #  sub_ebx,eax
89D8 #  mov_eax,ebx
58                # pop_eax               # ;
:_main_else53  #:_main_else53 # no else
E9 %_main_else_end49 #  jmp %_main_else_end49
:_main_else49 #:_main_else49
 ## M1.c 169
50               #  push_eax              # i (local)
8D85 4C000000 # lea_eax,[ebp+DWORD] %76
50               #  push_eax              # 1
B8 01000000 #   mov_eax, %1
5B                # pop_ebx               # =
8903 #  mov_[ebx],eax
58                # pop_eax               # ;
 ## M1.c 171
:_main_loop54 #:_main_loop54
50               #  push_eax              # s (local)
8D85 48000000 # lea_eax,[ebp+DWORD] %72
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # i (local)
8D85 4C000000 # lea_eax,[ebp+DWORD] %76
8B00          # mov_eax,[eax]         # ?
5B                # pop_ebx               # +
01D8 #  add_eax,ebx
8A00           #    mov_al,[eax]          # ?1
0FB6C0 #    movzx_eax,al
0FBEC0           #  movsx_eax,al          # char
50               #  push_eax              # 32
B8 20000000 #   mov_eax, %32
5B                # pop_ebx               # >s
39C3 #  cmp_eax_ebx
0F9FC0 #    setg_al
0FB6C0 #    movzx_eax,al
85C0           #    test_eax,eax          # !
0F94C0 #    sete_al
0FB6C0 #    movzx_eax,al
85C0           #    test_eax,eax          # if
58 #    pop_eax
0F84 %_main_else55 #    je %_main_else55
E9 %_main_loop_end54 #  jmp %_main_loop_end54
 ## M1.c 172
:_main_else55  #:_main_else55 # no else
50               #  push_eax              # i (local)
8D85 4C000000 # lea_eax,[ebp+DWORD] %76
50               #  push_eax              # $ (dup)
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # 1
B8 01000000 #   mov_eax, %1
5B                # pop_ebx               # +
01D8 #  add_eax,ebx
5B                # pop_ebx               # =
8903 #  mov_[ebx],eax
50               #  push_eax              # 1
B8 01000000 #   mov_eax, %1
5B                # pop_ebx               # -
29C3 #  sub_ebx,eax
89D8 #  mov_eax,ebx
58                # pop_eax               # ;
E9 %_main_loop54 #  jmp %_main_loop54
:_main_loop_end54 #:_main_loop_end54
50               #  push_eax              # ch (local)
8D85 50000000 # lea_eax,[ebp+DWORD] %80
50               #  push_eax              # s (local)
8D85 48000000 # lea_eax,[ebp+DWORD] %72
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # i (local)
8D85 4C000000 # lea_eax,[ebp+DWORD] %76
8B00          # mov_eax,[eax]         # ?
5B                # pop_ebx               # +
01D8 #  add_eax,ebx
8A00           #    mov_al,[eax]          # ?1
0FB6C0 #    movzx_eax,al
0FBEC0           #  movsx_eax,al          # char
5B                # pop_ebx               # =1
8803 #  mov_[ebx],al
58                # pop_eax               # ;
 ## M1.c 174
50               #  push_eax              # s (local)
8D85 48000000 # lea_eax,[ebp+DWORD] %72
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # i (local)
8D85 4C000000 # lea_eax,[ebp+DWORD] %76
8B00          # mov_eax,[eax]         # ?
5B                # pop_ebx               # +
01D8 #  add_eax,ebx
50               #  push_eax              # 0
B8 00000000 #   mov_eax, %0
5B                # pop_ebx               # =1
8803 #  mov_[ebx],al
58                # pop_eax               # ;
 ## M1.c 175
50               #  push_eax              # fout (local)
8D85 3C000000 # lea_eax,[ebp+DWORD] %60
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # '%s'
B8 &string_19 # mov_eax, &string_19
50               #  push_eax              # __var_args (local)
8D85 54000000 # lea_eax,[ebp+DWORD] %84
50               #  push_eax              # s (local)
8D85 48000000 # lea_eax,[ebp+DWORD] %72
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # find_define (function)
B8 &f_find_define # mov_eax, &f_find_define
81C5 58000000          #    add_ebp, %88         # ()
FFD0 #  call_eax
81ED 58000000 # sub_ebp, %88
5B                # pop_ebx               # =
8903 #  mov_[ebx],eax
58                # pop_eax               # ;
50               #  push_eax              # __var_args (local)
8D85 54000000 # lea_eax,[ebp+DWORD] %84
50               #  push_eax              # fprintf (function)
B8 &f_fprintf # mov_eax, &f_fprintf
81C5 58000000          #    add_ebp, %88         # ()
FFD0 #  call_eax
81ED 58000000 # sub_ebp, %88
58                # pop_eax               # ;
 ## M1.c 176
50               #  push_eax              # s (local)
8D85 48000000 # lea_eax,[ebp+DWORD] %72
50               #  push_eax              # $ (dup)
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # i (local)
8D85 4C000000 # lea_eax,[ebp+DWORD] %76
8B00          # mov_eax,[eax]         # ?
5B                # pop_ebx               # +
01D8 #  add_eax,ebx
5B                # pop_ebx               # =
8903 #  mov_[ebx],eax
58                # pop_eax               # ;
 ## M1.c 177
50               #  push_eax              # s (local)
8D85 48000000 # lea_eax,[ebp+DWORD] %72
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # ch (local)
8D85 50000000 # lea_eax,[ebp+DWORD] %80
8A00           #    mov_al,[eax]          # ?1
0FB6C0 #    movzx_eax,al
0FBEC0           #  movsx_eax,al          # char
5B                # pop_ebx               # =1
8803 #  mov_[ebx],al
58                # pop_eax               # ;
:_main_else_end49 #:_main_else_end49
:_main_else_end46 #:_main_else_end46
:_main_else_end35 #:_main_else_end35
:_main_else_end30 #:_main_else_end30
E9 %_main_loop25 #  jmp %_main_loop25
:_main_loop_end25 #:_main_loop_end25
 ## M1.c 180
50               #  push_eax              # ' #'
B8 &string_20 # mov_eax, &string_20
50               #  push_eax              # fout (local)
8D85 3C000000 # lea_eax,[ebp+DWORD] %60
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # fputs (function)
B8 &f_fputs #   mov_eax, &f_fputs
81C5 4C000000          #    add_ebp, %76         # ()
FFD0 #  call_eax
81ED 4C000000 # sub_ebp, %76
58                # pop_eax               # ;
 ## M1.c 181
50               #  push_eax              # s (local)
8D85 4C000000 # lea_eax,[ebp+DWORD] %76
50               #  push_eax              # line (static)
B8 &static_0_line # mov_eax, &static_0_line
5B                # pop_ebx               # =
8903 #  mov_[ebx],eax
58                # pop_eax               # ;
:_main_loop56 #:_main_loop56
50               #  push_eax              # s (local)
8D85 4C000000 # lea_eax,[ebp+DWORD] %76
8B00          # mov_eax,[eax]         # ?
8A00           #    mov_al,[eax]          # ?1
0FB6C0 #    movzx_eax,al
0FBEC0           #  movsx_eax,al          # char
50               #  push_eax              # 10
B8 0A000000 #   mov_eax, %10
5B                # pop_ebx               # !=
39C3 #  cmp_eax_ebx
0F95C0 #    setne_al
0FB6C0 #    movzx_eax,al
85C0           #    test_eax,eax          # !
0F94C0 #    sete_al
0FB6C0 #    movzx_eax,al
85C0           #    test_eax,eax          # if
58 #    pop_eax
0F84 %_main_else57 #    je %_main_else57
E9 %_main_loop_end56 #  jmp %_main_loop_end56
 ## M1.c 182
:_main_else57  #:_main_else57 # no else
50               #  push_eax              # s (local)
8D85 4C000000 # lea_eax,[ebp+DWORD] %76
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # line (static)
B8 &static_0_line # mov_eax, &static_0_line
50               #  push_eax              # 100
B8 64000000 #   mov_eax, %100
5B                # pop_ebx               # +
01D8 #  add_eax,ebx
5B                # pop_ebx               # >
39C3 #  cmp_eax_ebx
0F97C0 #    seta_al
0FB6C0 #    movzx_eax,al
85C0           #    test_eax,eax          # if
58 #    pop_eax
0F84 %_main_else58 #    je %_main_else58
 ## M1.c 183
 ## M1.c 184
50               #  push_eax              # ' ...'
B8 &string_21 # mov_eax, &string_21
50               #  push_eax              # fout (local)
8D85 3C000000 # lea_eax,[ebp+DWORD] %60
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # fputs (function)
B8 &f_fputs #   mov_eax, &f_fputs
81C5 50000000          #    add_ebp, %80         # ()
FFD0 #  call_eax
81ED 50000000 # sub_ebp, %80
58                # pop_eax               # ;
 ## M1.c 185
E9 %_main_loop_end56 #  jmp %_main_loop_end56
E9 %_main_else_end58 #  jmp %_main_else_end58
:_main_else58 #:_main_else58
 ## M1.c 188
50               #  push_eax              # s (local)
8D85 4C000000 # lea_eax,[ebp+DWORD] %76
8B00          # mov_eax,[eax]         # ?
8A00           #    mov_al,[eax]          # ?1
0FB6C0 #    movzx_eax,al
0FBEC0           #  movsx_eax,al          # char
50               #  push_eax              # fout (local)
8D85 3C000000 # lea_eax,[ebp+DWORD] %60
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # fputc (function)
B8 &f_fputc #   mov_eax, &f_fputc
81C5 50000000          #    add_ebp, %80         # ()
FFD0 #  call_eax
81ED 50000000 # sub_ebp, %80
58                # pop_eax               # ;
:_main_else_end58 #:_main_else_end58
50               #  push_eax              # s (local)
8D85 4C000000 # lea_eax,[ebp+DWORD] %76
50               #  push_eax              # $ (dup)
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # 1
B8 01000000 #   mov_eax, %1
5B                # pop_ebx               # +
01D8 #  add_eax,ebx
5B                # pop_ebx               # =
8903 #  mov_[ebx],eax
50               #  push_eax              # 1
B8 01000000 #   mov_eax, %1
5B                # pop_ebx               # -
29C3 #  sub_ebx,eax
89D8 #  mov_eax,ebx
58                # pop_eax               # ;
E9 %_main_loop56 #  jmp %_main_loop56
:_main_loop_end56 #:_main_loop_end56
 ## M1.c 189
50               #  push_eax              # 10
B8 0A000000 #   mov_eax, %10
50               #  push_eax              # fout (local)
8D85 3C000000 # lea_eax,[ebp+DWORD] %60
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # fputc (function)
B8 &f_fputc #   mov_eax, &f_fputc
81C5 4C000000          #    add_ebp, %76         # ()
FFD0 #  call_eax
81ED 4C000000 # sub_ebp, %76
58                # pop_eax               # ;
:_main_else_end11 #:_main_else_end11
E9 %_main_loop9 #   jmp %_main_loop9
:_main_loop_end9 #:_main_loop_end9
 ## M1.c 192
50               #  push_eax              # fout (local)
8D85 3C000000 # lea_eax,[ebp+DWORD] %60
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # fclose (function)
B8 &f_fclose #  mov_eax, &f_fclose
81C5 48000000          #    add_ebp, %72         # ()
FFD0 #  call_eax
81ED 48000000 # sub_ebp, %72
58                # pop_eax               # ;
50               #  push_eax              # i (local)
8D85 40000000 # lea_eax,[ebp+DWORD] %64
50               #  push_eax              # $ (dup)
8B00          # mov_eax,[eax]         # ?
50               #  push_eax              # 1
B8 01000000 #   mov_eax, %1
5B                # pop_ebx               # +
01D8 #  add_eax,ebx
5B                # pop_ebx               # =
8903 #  mov_[ebx],eax
50               #  push_eax              # 1
B8 01000000 #   mov_eax, %1
5B                # pop_ebx               # -
29C3 #  sub_ebx,eax
89D8 #  mov_eax,ebx
58                # pop_eax               # ;
E9 %_main_loop6 #   jmp %_main_loop6
:_main_loop_end6 #:_main_loop_end6
50               #  push_eax              # 0
B8 00000000 #   mov_eax, %0
8B5D00          #   mov_ebx,[ebp]         # return
53 #    push_ebx
C3 #    ret
 #
:f___init_globals__ #:f___init_globals__
58 #    pop_eax
894500 #    mov_[ebp],eax
58 #    pop_eax
50               #  push_eax              # __sys_stdin (global)
B8 &g___sys_stdin # mov_eax, &g___sys_stdin
50               #  push_eax              # $ (dup)
50               #  push_eax              # 0
B8 00000000 #   mov_eax, %0
5B                # pop_ebx               # =
8903 #  mov_[ebx],eax
58                # pop_eax               # ;
50               #  push_eax              # 4
B8 04000000 #   mov_eax, %4
5B                # pop_ebx               # +
01D8 #  add_eax,ebx
50               #  push_eax              # 0
B8 00000000 #   mov_eax, %0
5B                # pop_ebx               # =
8903 #  mov_[ebx],eax
58                # pop_eax               # ;
50               #  push_eax              # __sys_stdout (global)
B8 &g___sys_stdout #    mov_eax, &g___sys_stdout
50               #  push_eax              # $ (dup)
50               #  push_eax              # 1
B8 01000000 #   mov_eax, %1
5B                # pop_ebx               # =
8903 #  mov_[ebx],eax
58                # pop_eax               # ;
50               #  push_eax              # 4
B8 04000000 #   mov_eax, %4
5B                # pop_ebx               # +
01D8 #  add_eax,ebx
50               #  push_eax              # 0
B8 00000000 #   mov_eax, %0
5B                # pop_ebx               # =
8903 #  mov_[ebx],eax
58                # pop_eax               # ;
50               #  push_eax              # __sys_stderr (global)
B8 &g___sys_stderr #    mov_eax, &g___sys_stderr
50               #  push_eax              # $ (dup)
50               #  push_eax              # 2
B8 02000000 #   mov_eax, %2
5B                # pop_ebx               # =
8903 #  mov_[ebx],eax
58                # pop_eax               # ;
50               #  push_eax              # 4
B8 04000000 #   mov_eax, %4
5B                # pop_ebx               # +
01D8 #  add_eax,ebx
50               #  push_eax              # 0
B8 00000000 #   mov_eax, %0
5B                # pop_ebx               # =
8903 #  mov_[ebx],eax
58                # pop_eax               # ;
50               #  push_eax              # stdin (global)
B8 &g_stdin #   mov_eax, &g_stdin
50               #  push_eax              # __sys_stdin (global)
B8 &g___sys_stdin # mov_eax, &g___sys_stdin
5B                # pop_ebx               # =
8903 #  mov_[ebx],eax
58                # pop_eax               # ;
50               #  push_eax              # stdout (global)
B8 &g_stdout #  mov_eax, &g_stdout
50               #  push_eax              # __sys_stdout (global)
B8 &g___sys_stdout #    mov_eax, &g___sys_stdout
5B                # pop_ebx               # =
8903 #  mov_[ebx],eax
58                # pop_eax               # ;
50               #  push_eax              # stderr (global)
B8 &g_stderr #  mov_eax, &g_stderr
50               #  push_eax              # __sys_stderr (global)
B8 &g___sys_stderr #    mov_eax, &g___sys_stderr
5B                # pop_ebx               # =
8903 #  mov_[ebx],eax
58                # pop_eax               # ;
50               #  push_eax              # LINE_MACRO_OUTPUT_FORMAT_GCC (global)
B8 &g_LINE_MACRO_OUTPUT_FORMAT_GCC #    mov_eax, &g_LINE_MACRO_OUTPUT_FORMAT_GCC
50               #  push_eax              # 0
B8 00000000 #   mov_eax, %0
5B                # pop_ebx               # =
8903 #  mov_[ebx],eax
58                # pop_eax               # ;
50               #  push_eax              # LINE_MACRO_OUTPUT_FORMAT_NONE (global)
B8 &g_LINE_MACRO_OUTPUT_FORMAT_NONE #   mov_eax, &g_LINE_MACRO_OUTPUT_FORMAT_NONE
50               #  push_eax              # 1
B8 01000000 #   mov_eax, %1
5B                # pop_ebx               # =
8903 #  mov_[ebx],eax
58                # pop_eax               # ;
50               #  push_eax              # LINE_MACRO_OUTPUT_FORMAT_STD (global)
B8 &g_LINE_MACRO_OUTPUT_FORMAT_STD #    mov_eax, &g_LINE_MACRO_OUTPUT_FORMAT_STD
50               #  push_eax              # 2
B8 02000000 #   mov_eax, %2
5B                # pop_ebx               # =
8903 #  mov_[ebx],eax
58                # pop_eax               # ;
50               #  push_eax              # LINE_MACRO_OUTPUT_FORMAT_P10 (global)
B8 &g_LINE_MACRO_OUTPUT_FORMAT_P10 #    mov_eax, &g_LINE_MACRO_OUTPUT_FORMAT_P10
50               #  push_eax              # 11
B8 0B000000 #   mov_eax, %11
5B                # pop_ebx               # =
8903 #  mov_[ebx],eax
58                # pop_eax               # ;
50               #  push_eax              # _sys_env (global)
B8 &g__sys_env #    mov_eax, &g__sys_env
50               #  push_eax              # 0
B8 00000000 #   mov_eax, %0
5B                # pop_ebx               # =
8903 #  mov_[ebx],eax
58                # pop_eax               # ;
50               #  push_eax              # defines (global)
B8 &g_defines # mov_eax, &g_defines
50               #  push_eax              # 0
B8 00000000 #   mov_eax, %0
5B                # pop_ebx               # =
8903 #  mov_[ebx],eax
58                # pop_eax               # ;
50               #  push_eax              # 0
B8 00000000 #   mov_eax, %0
8B5D00          #   mov_ebx,[ebp]         # return
53 #    push_ebx
C3 #    ret
 #
:ELF_data #:ELF_data
 #
:SYS_MALLOC 00000000 #:SYS_MALLOC NULL
:string_0  5F5F7379735F7072696E7466202500  #:string_0  "__sys_printf %"
:string_1  2000  #:string_1  " "
:string_2  0A 00 #:string_2  !10 !0
:string_3  4D 6F 64 65 20 25 73 20 73 68 6F 75 6C 64 20 62 65 #:string_3  !77 !111 !100 !101 !32 !37 !115 !32 !115 !104 !111 !117 !108 !100 !32 !98 !101
20 27 72 2F 77 28 62 29 28 2B 29 27 2C 20 27 77 27 2C 20 6F #  !32 !39 !114 !47 !119 !40 !98 !41 !40 !43 !41 !39 !44 !32 !39 !119 !39 !44 !32 !111
72 20 27 77 62 27 0A 00 #  !114 !32 !39 !119 !98 !39 !10 !0
:string_4  66 6F 70 65 6E 20 25 73 20 25 73 20 72 65 74 75 72 #:string_4  !102 !111 !112 !101 !110 !32 !37 !115 !32 !37 !115 !32 !114 !101 !116 !117 !114
6E 65 64 20 25 64 0A 00 #  !110 !101 !100 !32 !37 !100 !10 !0
:string_5  54 4F 44 4F 20 74 69 6D 65 0A 00 #:string_5  !84 !79 !68 !79 !32 !116 !105 !109 !101 !10 !0
:string_6  54 4F 44 4F 20 6C 6F 63 61 6C 74 69 6D 65 0A 00 #:string_6  !84 !79 !68 !79 !32 !108 !111 !99 !97 !108 !116 !105 !109 !101 !10 !0
:string_7  54 4F 44 4F 20 73 65 74 6A 6D 70 0A 00 #:string_7  !84 !79 !68 !79 !32 !115 !101 !116 !106 !109 !112 !10 !0
:string_8  54 4F 44 4F 20 6C 6F 6E 67 6A 6D 70 0A 00 #:string_8  !84 !79 !68 !79 !32 !108 !111 !110 !103 !106 !109 !112 !10 !0
:string_9  73 73 63 61 6E 66 3A 20 66 6F 72 6D 61 74 20 25 25 #:string_9  !115 !115 !99 !97 !110 !102 !58 !32 !102 !111 !114 !109 !97 !116 !32 !37 !37
25 63 20 6E 6F 74 20 73 75 70 70 6F 72 74 65 64 0A 00 #  !37 !99 !32 !110 !111 !116 !32 !115 !117 !112 !112 !111 !114 !116 !101 !100 !10 !0
:string_10  54 4F 44 4F 20 61 74 6F 69 0A 00 #:string_10  !84 !79 !68 !79 !32 !97 !116 !111 !105 !10 !0
:string_11  54 4F 44 4F 20 65 78 65 63 76 70 0A 00 #:string_11  !84 !79 !68 !79 !32 !101 !120 !101 !99 !118 !112 !10 !0
:string_12  2D6F00  #:string_12  "-o"
:string_13  7700  #:string_13  "w"
:string_14  4572726F723A2043616E6E6F74206F70656E2066696C65202725732720666F722077726974696E6700  #:string_14  "Error: Cannot open file '%s' for writing"
:string_15  7200  #:string_15  "r"
:string_16  43 61 6E 6E 6F 74 20 6F 70 65 6E 20 25 73 20 66 6F #:string_16  !67 !97 !110 !110 !111 !116 !32 !111 !112 !101 !110 !32 !37 !115 !32 !102 !111
72 20 72 65 61 64 69 6E 67 0A 00 #  !114 !32 !114 !101 !97 !100 !105 !110 !103 !10 !0
:string_17  444546494E452000  #:string_17  "DEFINE "
:string_18  30302000  #:string_18  "00 "
:string_19  257300  #:string_19  "%s"
:string_20  202300  #:string_20  " #"
:string_21  202E2E2E00  #:string_21  " ..."
:g___sys_stdin #:g___sys_stdin
00000000 00000000 # NULL NULL
:g___sys_stdout #:g___sys_stdout
00000000 00000000 # NULL NULL
:g___sys_stderr #:g___sys_stderr
00000000 00000000 # NULL NULL
:g_stdin #:g_stdin
00000000 #  NULL
:g_stdout #:g_stdout
00000000 #  NULL
:g_stderr #:g_stderr
00000000 #  NULL
:g_errno #:g_errno
00000000 #  NULL
:g_LINE_MACRO_OUTPUT_FORMAT_GCC #:g_LINE_MACRO_OUTPUT_FORMAT_GCC
00000000 #  NULL
:g_LINE_MACRO_OUTPUT_FORMAT_NONE #:g_LINE_MACRO_OUTPUT_FORMAT_NONE
00000000 #  NULL
:g_LINE_MACRO_OUTPUT_FORMAT_STD #:g_LINE_MACRO_OUTPUT_FORMAT_STD
00000000 #  NULL
:g_LINE_MACRO_OUTPUT_FORMAT_P10 #:g_LINE_MACRO_OUTPUT_FORMAT_P10
00000000 #  NULL
:g__sys_env #:g__sys_env
00000000 #  NULL
:g_defines #:g_defines
00000000 #  NULL
:static_0_line #:static_0_line
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 #   NULL NULL NULL NULL NULL NULL NULL NULL
 #
:ELF_end #:ELF_end

File /x86/M1_s.blood_elf

Source file is 'src/M1_s.blood_elf'.
No URL
# Generated sections
:ELF_shstr
00  # NULL
:ELF_shstr__text
".text"
:ELF_shstr__shstr
".shstrtab"
:ELF_shstr__sym
".symtab"
:ELF_shstr__str
".strtab"

:ELF_section_headers
00000000    #sh_name
00000000    #sh_type
00000000    #sh_flags
00000000    #sh_addr
00000000    #sh_offset
00000000    #sh_size
00000000    #sh_link
00000000    #sh_info
01000000    #sh_addralign
00000000    #sh_entsize

:ELF_section_header_text
%ELF_shstr__text>ELF_shstr  #sh_name
01000000    #sh_type
06000000    #sh_flags
&ELF_text   #sh_addr
%ELF_text>ELF_base  #sh_offset
%ELF_data>ELF_text  #sh_size
00000000    #sh_link
00000000    #sh_info
01000000    #sh_addralign
00000000    #sh_entsize

:ELF_section_header_shstr
%ELF_shstr__shstr>ELF_shstr #sh_name
03000000    #sh_type
00000000    #sh_flags
&ELF_shstr  #sh_addr
%ELF_shstr>ELF_base #sh_offset
%ELF_section_headers>ELF_shstr  #sh_size
00000000    #sh_link
00000000    #sh_info
01000000    #sh_addralign
00000000    #sh_entsize

:ELF_section_header_str
%ELF_shstr__str>ELF_shstr   #sh_name
03000000    #sh_type
00000000    #sh_flags
&ELF_str    #sh_addr
%ELF_str>ELF_base   #sh_offset
%ELF_sym>ELF_str    #sh_size
00000000    #sh_link
00000000    #sh_info
01000000    #sh_addralign
00000000    #sh_entsize

:ELF_section_header_sym
%ELF_shstr__sym>ELF_shstr   #sh_name
02000000    #sh_type
00000000    #sh_flags
&ELF_sym    #sh_addr
%ELF_sym>ELF_base   #sh_offset
%ELF_end>ELF_sym    #sh_size
03000000    #sh_link
A0010000    #sh_info
01000000    #sh_addralign
10000000    #sh_entsize

# Generated string table
:ELF_str
00  # NULL string
:ELF_str_ELF_text   "ELF_text" # "ELF_text"
:ELF_str__start "_start" # "_start"
:ELF_str_f_sys_int80    "f_sys_int80" # "f_sys_int80"
:ELF_str_f_sys_malloc   "f_sys_malloc" # "f_sys_malloc"
:ELF_str_SYS_MALLOC "SYS_MALLOC" # "SYS_MALLOC"
:ELF_str_f_exit "f_exit" # "f_exit"
:ELF_str_f_memcpy   "f_memcpy" # "f_memcpy"
:ELF_str__memcpy_loop1  "_memcpy_loop1" # "_memcpy_loop1"
:ELF_str__memcpy_else2  "_memcpy_else2" # "_memcpy_else2"
:ELF_str__memcpy_loop_end1  "_memcpy_loop_end1" # "_memcpy_loop_end1"
:ELF_str_f_memmove  "f_memmove" # "f_memmove"
:ELF_str__memmove_loop2 "_memmove_loop2" # "_memmove_loop2"
:ELF_str__memmove_else3 "_memmove_else3" # "_memmove_else3"
:ELF_str__memmove_loop_end2 "_memmove_loop_end2" # "_memmove_loop_end2"
:ELF_str__memmove_else1 "_memmove_else1" # "_memmove_else1"
:ELF_str__memmove_loop5 "_memmove_loop5" # "_memmove_loop5"
:ELF_str__memmove_else6 "_memmove_else6" # "_memmove_else6"
:ELF_str__memmove_loop_end5 "_memmove_loop_end5" # "_memmove_loop_end5"
:ELF_str__memmove_else4 "_memmove_else4" # "_memmove_else4"
:ELF_str__memmove_else_end1 "_memmove_else_end1" # "_memmove_else_end1"
:ELF_str_f_memset   "f_memset" # "f_memset"
:ELF_str__memset_loop1  "_memset_loop1" # "_memset_loop1"
:ELF_str__memset_else2  "_memset_else2" # "_memset_else2"
:ELF_str__memset_loop_end1  "_memset_loop_end1" # "_memset_loop_end1"
:ELF_str_f_memcmp   "f_memcmp" # "f_memcmp"
:ELF_str__memcmp_loop1  "_memcmp_loop1" # "_memcmp_loop1"
:ELF_str__memcmp_else2  "_memcmp_else2" # "_memcmp_else2"
:ELF_str__memcmp_else3  "_memcmp_else3" # "_memcmp_else3"
:ELF_str__memcmp_loop_end1  "_memcmp_loop_end1" # "_memcmp_loop_end1"
:ELF_str_f_strlen   "f_strlen" # "f_strlen"
:ELF_str__strlen_loop1  "_strlen_loop1" # "_strlen_loop1"
:ELF_str__strlen_else2  "_strlen_else2" # "_strlen_else2"
:ELF_str__strlen_loop_end1  "_strlen_loop_end1" # "_strlen_loop_end1"
:ELF_str_f_strcpy   "f_strcpy" # "f_strcpy"
:ELF_str__strcpy_loop1  "_strcpy_loop1" # "_strcpy_loop1"
:ELF_str__strcpy_else2  "_strcpy_else2" # "_strcpy_else2"
:ELF_str__strcpy_loop_end1  "_strcpy_loop_end1" # "_strcpy_loop_end1"
:ELF_str_f_strncpy  "f_strncpy" # "f_strncpy"
:ELF_str__strncpy_loop1 "_strncpy_loop1" # "_strncpy_loop1"
:ELF_str__strncpy_else2 "_strncpy_else2" # "_strncpy_else2"
:ELF_str__strncpy_else3 "_strncpy_else3" # "_strncpy_else3"
:ELF_str__strncpy_loop_end1 "_strncpy_loop_end1" # "_strncpy_loop_end1"
:ELF_str_f_strcat   "f_strcat" # "f_strcat"
:ELF_str_f_strchr   "f_strchr" # "f_strchr"
:ELF_str__strchr_loop1  "_strchr_loop1" # "_strchr_loop1"
:ELF_str__strchr_else2  "_strchr_else2" # "_strchr_else2"
:ELF_str__strchr_else3  "_strchr_else3" # "_strchr_else3"
:ELF_str__strchr_loop_end1  "_strchr_loop_end1" # "_strchr_loop_end1"
:ELF_str__strchr_else4  "_strchr_else4" # "_strchr_else4"
:ELF_str__strchr_else_end4  "_strchr_else_end4" # "_strchr_else_end4"
:ELF_str_f_strrchr  "f_strrchr" # "f_strrchr"
:ELF_str__strrchr_loop1 "_strrchr_loop1" # "_strrchr_loop1"
:ELF_str__strrchr_else2 "_strrchr_else2" # "_strrchr_else2"
:ELF_str__strrchr_else3 "_strrchr_else3" # "_strrchr_else3"
:ELF_str__strrchr_loop_end1 "_strrchr_loop_end1" # "_strrchr_loop_end1"
:ELF_str_f_strcmp   "f_strcmp" # "f_strcmp"
:ELF_str__strcmp_loop1  "_strcmp_loop1" # "_strcmp_loop1"
:ELF_str__strcmp_or_end2    "_strcmp_or_end2" # "_strcmp_or_end2"
:ELF_str__strcmp_else3  "_strcmp_else3" # "_strcmp_else3"
:ELF_str__strcmp_loop_end1  "_strcmp_loop_end1" # "_strcmp_loop_end1"
:ELF_str_f_strncmp  "f_strncmp" # "f_strncmp"
:ELF_str__strncmp_loop1 "_strncmp_loop1" # "_strncmp_loop1"
:ELF_str__strncmp_else2 "_strncmp_else2" # "_strncmp_else2"
:ELF_str__strncmp_or_end3   "_strncmp_or_end3" # "_strncmp_or_end3"
:ELF_str__strncmp_else4 "_strncmp_else4" # "_strncmp_else4"
:ELF_str__strncmp_loop_end1 "_strncmp_loop_end1" # "_strncmp_loop_end1"
:ELF_str_f_strstr   "f_strstr" # "f_strstr"
:ELF_str__strstr_loop1  "_strstr_loop1" # "_strstr_loop1"
:ELF_str__strstr_else2  "_strstr_else2" # "_strstr_else2"
:ELF_str__strstr_else3  "_strstr_else3" # "_strstr_else3"
:ELF_str__strstr_loop_end1  "_strstr_loop_end1" # "_strstr_loop_end1"
:ELF_str_f_strtoul  "f_strtoul" # "f_strtoul"
:ELF_str__strtoul_or_end3   "_strtoul_or_end3" # "_strtoul_or_end3"
:ELF_str__strtoul_else4 "_strtoul_else4" # "_strtoul_else4"
:ELF_str__strtoul_else2 "_strtoul_else2" # "_strtoul_else2"
:ELF_str__strtoul_else1 "_strtoul_else1" # "_strtoul_else1"
:ELF_str__strtoul_else5 "_strtoul_else5" # "_strtoul_else5"
:ELF_str__strtoul_else_end5 "_strtoul_else_end5" # "_strtoul_else_end5"
:ELF_str__strtoul_loop6 "_strtoul_loop6" # "_strtoul_loop6"
:ELF_str__strtoul_and_end7  "_strtoul_and_end7" # "_strtoul_and_end7"
:ELF_str__strtoul_else8 "_strtoul_else8" # "_strtoul_else8"
:ELF_str__strtoul_and_end9  "_strtoul_and_end9" # "_strtoul_and_end9"
:ELF_str__strtoul_else10    "_strtoul_else10" # "_strtoul_else10"
:ELF_str__strtoul_and_end11 "_strtoul_and_end11" # "_strtoul_and_end11"
:ELF_str__strtoul_else12    "_strtoul_else12" # "_strtoul_else12"
:ELF_str__strtoul_else_end12    "_strtoul_else_end12" # "_strtoul_else_end12"
:ELF_str__strtoul_else_end10    "_strtoul_else_end10" # "_strtoul_else_end10"
:ELF_str__strtoul_else_end8 "_strtoul_else_end8" # "_strtoul_else_end8"
:ELF_str__strtoul_loop_end6 "_strtoul_loop_end6" # "_strtoul_loop_end6"
:ELF_str__strtoul_else13    "_strtoul_else13" # "_strtoul_else13"
:ELF_str_f_strtol   "f_strtol" # "f_strtol"
:ELF_str__strtol_else1  "_strtol_else1" # "_strtol_else1"
:ELF_str_f_strtoll  "f_strtoll" # "f_strtoll"
:ELF_str_f_strtoull "f_strtoull" # "f_strtoull"
:ELF_str_f_strtof   "f_strtof" # "f_strtof"
:ELF_str_f_malloc   "f_malloc" # "f_malloc"
:ELF_str_f_realloc  "f_realloc" # "f_realloc"
:ELF_str__realloc_loop2 "_realloc_loop2" # "_realloc_loop2"
:ELF_str__realloc_else3 "_realloc_else3" # "_realloc_else3"
:ELF_str__realloc_loop_end2 "_realloc_loop_end2" # "_realloc_loop_end2"
:ELF_str__realloc_else1 "_realloc_else1" # "_realloc_else1"
:ELF_str_f_calloc   "f_calloc" # "f_calloc"
:ELF_str__calloc_loop1  "_calloc_loop1" # "_calloc_loop1"
:ELF_str__calloc_else2  "_calloc_else2" # "_calloc_else2"
:ELF_str__calloc_loop_end1  "_calloc_loop_end1" # "_calloc_loop_end1"
:ELF_str_f_free "f_free" # "f_free"
:ELF_str_f_fwrite   "f_fwrite" # "f_fwrite"
:ELF_str_f_fputc    "f_fputc" # "f_fputc"
:ELF_str_f_fputs    "f_fputs" # "f_fputs"
:ELF_str_f___sys_printf "f___sys_printf" # "f___sys_printf"
:ELF_str____sys_printf_loop1    "___sys_printf_loop1" # "___sys_printf_loop1"
:ELF_str____sys_printf_else2    "___sys_printf_else2" # "___sys_printf_else2"
:ELF_str____sys_printf_else4    "___sys_printf_else4" # "___sys_printf_else4"
:ELF_str____sys_printf_else5    "___sys_printf_else5" # "___sys_printf_else5"
:ELF_str____sys_printf_else_end4    "___sys_printf_else_end4" # "___sys_printf_else_end4"
:ELF_str____sys_printf_else6    "___sys_printf_else6" # "___sys_printf_else6"
:ELF_str____sys_printf_else3    "___sys_printf_else3" # "___sys_printf_else3"
:ELF_str____sys_printf_else8    "___sys_printf_else8" # "___sys_printf_else8"
:ELF_str____sys_printf_else10   "___sys_printf_else10" # "___sys_printf_else10"
:ELF_str____sys_printf_else11   "___sys_printf_else11" # "___sys_printf_else11"
:ELF_str____sys_printf_loop12   "___sys_printf_loop12" # "___sys_printf_loop12"
:ELF_str____sys_printf_and_end13    "___sys_printf_and_end13" # "___sys_printf_and_end13"
:ELF_str____sys_printf_else14   "___sys_printf_else14" # "___sys_printf_else14"
:ELF_str____sys_printf_loop_end12   "___sys_printf_loop_end12" # "___sys_printf_loop_end12"
:ELF_str____sys_printf_else15   "___sys_printf_else15" # "___sys_printf_else15"
:ELF_str____sys_printf_else17   "___sys_printf_else17" # "___sys_printf_else17"
:ELF_str____sys_printf_else18   "___sys_printf_else18" # "___sys_printf_else18"
:ELF_str____sys_printf_loop19   "___sys_printf_loop19" # "___sys_printf_loop19"
:ELF_str____sys_printf_else20   "___sys_printf_else20" # "___sys_printf_else20"
:ELF_str____sys_printf_loop_end19   "___sys_printf_loop_end19" # "___sys_printf_loop_end19"
:ELF_str____sys_printf_else21   "___sys_printf_else21" # "___sys_printf_else21"
:ELF_str____sys_printf_else_end17   "___sys_printf_else_end17" # "___sys_printf_else_end17"
:ELF_str____sys_printf_loop25   "___sys_printf_loop25" # "___sys_printf_loop25"
:ELF_str____sys_printf_else26   "___sys_printf_else26" # "___sys_printf_else26"
:ELF_str____sys_printf_else27   "___sys_printf_else27" # "___sys_printf_else27"
:ELF_str____sys_printf_else_end27   "___sys_printf_else_end27" # "___sys_printf_else_end27"
:ELF_str____sys_printf_loop_end25   "___sys_printf_loop_end25" # "___sys_printf_loop_end25"
:ELF_str____sys_printf_else24   "___sys_printf_else24" # "___sys_printf_else24"
:ELF_str____sys_printf_loop28   "___sys_printf_loop28" # "___sys_printf_loop28"
:ELF_str____sys_printf_else29   "___sys_printf_else29" # "___sys_printf_else29"
:ELF_str____sys_printf_loop_end28   "___sys_printf_loop_end28" # "___sys_printf_loop_end28"
:ELF_str____sys_printf_else_end24   "___sys_printf_else_end24" # "___sys_printf_else_end24"
:ELF_str____sys_printf_else23   "___sys_printf_else23" # "___sys_printf_else23"
:ELF_str____sys_printf_else22   "___sys_printf_else22" # "___sys_printf_else22"
:ELF_str____sys_printf_else16   "___sys_printf_else16" # "___sys_printf_else16"
:ELF_str____sys_printf_else31   "___sys_printf_else31" # "___sys_printf_else31"
:ELF_str____sys_printf_loop32   "___sys_printf_loop32" # "___sys_printf_loop32"
:ELF_str____sys_printf_else33   "___sys_printf_else33" # "___sys_printf_else33"
:ELF_str____sys_printf_loop_end32   "___sys_printf_loop_end32" # "___sys_printf_loop_end32"
:ELF_str____sys_printf_else_end31   "___sys_printf_else_end31" # "___sys_printf_else_end31"
:ELF_str____sys_printf_else30   "___sys_printf_else30" # "___sys_printf_else30"
:ELF_str____sys_printf_or_end34 "___sys_printf_or_end34" # "___sys_printf_or_end34"
:ELF_str____sys_printf_else36   "___sys_printf_else36" # "___sys_printf_else36"
:ELF_str____sys_printf_loop37   "___sys_printf_loop37" # "___sys_printf_loop37"
:ELF_str____sys_printf_else38   "___sys_printf_else38" # "___sys_printf_else38"
:ELF_str____sys_printf_else39   "___sys_printf_else39" # "___sys_printf_else39"
:ELF_str____sys_printf_else_end39   "___sys_printf_else_end39" # "___sys_printf_else_end39"
:ELF_str____sys_printf_loop_end37   "___sys_printf_loop_end37" # "___sys_printf_loop_end37"
:ELF_str____sys_printf_else_end36   "___sys_printf_else_end36" # "___sys_printf_else_end36"
:ELF_str____sys_printf_else35   "___sys_printf_else35" # "___sys_printf_else35"
:ELF_str____sys_printf_else40   "___sys_printf_else40" # "___sys_printf_else40"
:ELF_str____sys_printf_else_end40   "___sys_printf_else_end40" # "___sys_printf_else_end40"
:ELF_str____sys_printf_else_end35   "___sys_printf_else_end35" # "___sys_printf_else_end35"
:ELF_str____sys_printf_else_end30   "___sys_printf_else_end30" # "___sys_printf_else_end30"
:ELF_str____sys_printf_else_end16   "___sys_printf_else_end16" # "___sys_printf_else_end16"
:ELF_str____sys_printf_else_end15   "___sys_printf_else_end15" # "___sys_printf_else_end15"
:ELF_str____sys_printf_else_end10   "___sys_printf_else_end10" # "___sys_printf_else_end10"
:ELF_str____sys_printf_else9    "___sys_printf_else9" # "___sys_printf_else9"
:ELF_str____sys_printf_else_end9    "___sys_printf_else_end9" # "___sys_printf_else_end9"
:ELF_str____sys_printf_else7    "___sys_printf_else7" # "___sys_printf_else7"
:ELF_str____sys_printf_loop_end1    "___sys_printf_loop_end1" # "___sys_printf_loop_end1"
:ELF_str____sys_printf_and_end41    "___sys_printf_and_end41" # "___sys_printf_and_end41"
:ELF_str____sys_printf_else42   "___sys_printf_else42" # "___sys_printf_else42"
:ELF_str_f_va_end   "f_va_end" # "f_va_end"
:ELF_str_f_fprintf  "f_fprintf" # "f_fprintf"
:ELF_str_f_printf   "f_printf" # "f_printf"
:ELF_str_f_sprintf  "f_sprintf" # "f_sprintf"
:ELF_str_f_snprintf "f_snprintf" # "f_snprintf"
:ELF_str_f_vsnprintf    "f_vsnprintf" # "f_vsnprintf"
:ELF_str_f_open "f_open" # "f_open"
:ELF_str__open_else1    "_open_else1" # "_open_else1"
:ELF_str_f_close    "f_close" # "f_close"
:ELF_str_f_read "f_read" # "f_read"
:ELF_str_f_lseek    "f_lseek" # "f_lseek"
:ELF_str_f_fopen    "f_fopen" # "f_fopen"
:ELF_str__fopen_or_end1 "_fopen_or_end1" # "_fopen_or_end1"
:ELF_str__fopen_else2   "_fopen_else2" # "_fopen_else2"
:ELF_str__fopen_else3   "_fopen_else3" # "_fopen_else3"
:ELF_str__fopen_else4   "_fopen_else4" # "_fopen_else4"
:ELF_str__fopen_else5   "_fopen_else5" # "_fopen_else5"
:ELF_str__fopen_else7   "_fopen_else7" # "_fopen_else7"
:ELF_str__fopen_else_end7   "_fopen_else_end7" # "_fopen_else_end7"
:ELF_str__fopen_else6   "_fopen_else6" # "_fopen_else6"
:ELF_str__fopen_else8   "_fopen_else8" # "_fopen_else8"
:ELF_str__fopen_else_end8   "_fopen_else_end8" # "_fopen_else_end8"
:ELF_str__fopen_else_end6   "_fopen_else_end6" # "_fopen_else_end6"
:ELF_str__fopen_else9   "_fopen_else9" # "_fopen_else9"
:ELF_str_f_fdopen   "f_fdopen" # "f_fdopen"
:ELF_str_f_fclose   "f_fclose" # "f_fclose"
:ELF_str_f_fflush   "f_fflush" # "f_fflush"
:ELF_str_f_fseek    "f_fseek" # "f_fseek"
:ELF_str_f_ftell    "f_ftell" # "f_ftell"
:ELF_str_f_fread    "f_fread" # "f_fread"
:ELF_str__fread_loop1   "_fread_loop1" # "_fread_loop1"
:ELF_str__fread_else2   "_fread_else2" # "_fread_else2"
:ELF_str__fread_else3   "_fread_else3" # "_fread_else3"
:ELF_str__fread_loop_end1   "_fread_loop_end1" # "_fread_loop_end1"
:ELF_str_f_lseek    "f_lseek" # "f_lseek"
:ELF_str_f_feof "f_feof" # "f_feof"
:ELF_str_f_fgetc    "f_fgetc" # "f_fgetc"
:ELF_str__fgetc_else1   "_fgetc_else1" # "_fgetc_else1"
:ELF_str__fgetc_else2   "_fgetc_else2" # "_fgetc_else2"
:ELF_str_f_ldexp    "f_ldexp" # "f_ldexp"
:ELF_str__ldexp_loop1   "_ldexp_loop1" # "_ldexp_loop1"
:ELF_str__ldexp_else2   "_ldexp_else2" # "_ldexp_else2"
:ELF_str__ldexp_loop_end1   "_ldexp_loop_end1" # "_ldexp_loop_end1"
:ELF_str_f_time "f_time" # "f_time"
:ELF_str_f_localtime    "f_localtime" # "f_localtime"
:ELF_str_f_gettimeofday "f_gettimeofday" # "f_gettimeofday"
:ELF_str_f_write    "f_write" # "f_write"
:ELF_str_f_fileno   "f_fileno" # "f_fileno"
:ELF_str_f_getcwd   "f_getcwd" # "f_getcwd"
:ELF_str_f_getenv   "f_getenv" # "f_getenv"
:ELF_str__getenv_loop1  "_getenv_loop1" # "_getenv_loop1"
:ELF_str__getenv_else2  "_getenv_else2" # "_getenv_else2"
:ELF_str__getenv_and_end3   "_getenv_and_end3" # "_getenv_and_end3"
:ELF_str__getenv_else4  "_getenv_else4" # "_getenv_else4"
:ELF_str__getenv_loop_end1  "_getenv_loop_end1" # "_getenv_loop_end1"
:ELF_str_f_qsort    "f_qsort" # "f_qsort"
:ELF_str__qsort_loop1   "_qsort_loop1" # "_qsort_loop1"
:ELF_str__qsort_else2   "_qsort_else2" # "_qsort_else2"
:ELF_str__qsort_loop3   "_qsort_loop3" # "_qsort_loop3"
:ELF_str__qsort_else4   "_qsort_else4" # "_qsort_else4"
:ELF_str__qsort_loop6   "_qsort_loop6" # "_qsort_loop6"
:ELF_str__qsort_else7   "_qsort_else7" # "_qsort_else7"
:ELF_str__qsort_else8   "_qsort_else8" # "_qsort_else8"
:ELF_str__qsort_else_end8   "_qsort_else_end8" # "_qsort_else_end8"
:ELF_str__qsort_loop_end6   "_qsort_loop_end6" # "_qsort_loop_end6"
:ELF_str__qsort_else5   "_qsort_else5" # "_qsort_else5"
:ELF_str__qsort_loop_end3   "_qsort_loop_end3" # "_qsort_loop_end3"
:ELF_str__qsort_loop_end1   "_qsort_loop_end1" # "_qsort_loop_end1"
:ELF_str_f_time "f_time" # "f_time"
:ELF_str_f_setjmp   "f_setjmp" # "f_setjmp"
:ELF_str_f_longjmp  "f_longjmp" # "f_longjmp"
:ELF_str_f_unlink   "f_unlink" # "f_unlink"
:ELF_str_f_sscanf   "f_sscanf" # "f_sscanf"
:ELF_str__sscanf_loop1  "_sscanf_loop1" # "_sscanf_loop1"
:ELF_str__sscanf_else2  "_sscanf_else2" # "_sscanf_else2"
:ELF_str__sscanf_else3  "_sscanf_else3" # "_sscanf_else3"
:ELF_str__sscanf_loop6  "_sscanf_loop6" # "_sscanf_loop6"
:ELF_str__sscanf_and_end7   "_sscanf_and_end7" # "_sscanf_and_end7"
:ELF_str__sscanf_else8  "_sscanf_else8" # "_sscanf_else8"
:ELF_str__sscanf_loop_end6  "_sscanf_loop_end6" # "_sscanf_loop_end6"
:ELF_str__sscanf_else5  "_sscanf_else5" # "_sscanf_else5"
:ELF_str__sscanf_else_end5  "_sscanf_else_end5" # "_sscanf_else_end5"
:ELF_str__sscanf_else4  "_sscanf_else4" # "_sscanf_else4"
:ELF_str__sscanf_else9  "_sscanf_else9" # "_sscanf_else9"
:ELF_str__sscanf_else_end4  "_sscanf_else_end4" # "_sscanf_else_end4"
:ELF_str__sscanf_else_end3  "_sscanf_else_end3" # "_sscanf_else_end3"
:ELF_str__sscanf_loop_end1  "_sscanf_loop_end1" # "_sscanf_loop_end1"
:ELF_str_f_atoi "f_atoi" # "f_atoi"
:ELF_str_f_remove   "f_remove" # "f_remove"
:ELF_str_f_execvp   "f_execvp" # "f_execvp"
:ELF_str_f_mkdir    "f_mkdir" # "f_mkdir"
:ELF_str_f_chdir    "f_chdir" # "f_chdir"
:ELF_str_f_access   "f_access" # "f_access"
:ELF_str_f_chmod    "f_chmod" # "f_chmod"
:ELF_str_f_symlink  "f_symlink" # "f_symlink"
:ELF_str_f_uname    "f_uname" # "f_uname"
:ELF_str_f_execve   "f_execve" # "f_execve"
:ELF_str_f_fgets    "f_fgets" # "f_fgets"
:ELF_str__fgets_else1   "_fgets_else1" # "_fgets_else1"
:ELF_str__fgets_loop2   "_fgets_loop2" # "_fgets_loop2"
:ELF_str__fgets_else3   "_fgets_else3" # "_fgets_else3"
:ELF_str__fgets_else4   "_fgets_else4" # "_fgets_else4"
:ELF_str__fgets_else5   "_fgets_else5" # "_fgets_else5"
:ELF_str__fgets_loop_end2   "_fgets_loop_end2" # "_fgets_loop_end2"
:ELF_str_f_fgets    "f_fgets" # "f_fgets"
:ELF_str__fgets_loop1   "_fgets_loop1" # "_fgets_loop1"
:ELF_str__fgets_else2   "_fgets_else2" # "_fgets_else2"
:ELF_str__fgets_else4   "_fgets_else4" # "_fgets_else4"
:ELF_str__fgets_else3   "_fgets_else3" # "_fgets_else3"
:ELF_str__fgets_else5   "_fgets_else5" # "_fgets_else5"
:ELF_str__fgets_loop_end1   "_fgets_loop_end1" # "_fgets_loop_end1"
:ELF_str_f_add_define   "f_add_define" # "f_add_define"
:ELF_str_f_find_define  "f_find_define" # "f_find_define"
:ELF_str__find_define_loop1 "_find_define_loop1" # "_find_define_loop1"
:ELF_str__find_define_else2 "_find_define_else2" # "_find_define_else2"
:ELF_str__find_define_else3 "_find_define_else3" # "_find_define_else3"
:ELF_str__find_define_loop_end1 "_find_define_loop_end1" # "_find_define_loop_end1"
:ELF_str_f_output_hex   "f_output_hex" # "f_output_hex"
:ELF_str__output_hex_else1  "_output_hex_else1" # "_output_hex_else1"
:ELF_str__output_hex_else_end1  "_output_hex_else_end1" # "_output_hex_else_end1"
:ELF_str_f_main "f_main" # "f_main"
:ELF_str__main_loop1    "_main_loop1" # "_main_loop1"
:ELF_str__main_else2    "_main_else2" # "_main_else2"
:ELF_str__main_else3    "_main_else3" # "_main_else3"
:ELF_str__main_else_end3    "_main_else_end3" # "_main_else_end3"
:ELF_str__main_loop_end1    "_main_loop_end1" # "_main_loop_end1"
:ELF_str__main_else5    "_main_else5" # "_main_else5"
:ELF_str__main_else4    "_main_else4" # "_main_else4"
:ELF_str__main_loop6    "_main_loop6" # "_main_loop6"
:ELF_str__main_else7    "_main_else7" # "_main_else7"
:ELF_str__main_else8    "_main_else8" # "_main_else8"
:ELF_str__main_loop9    "_main_loop9" # "_main_loop9"
:ELF_str__main_else10   "_main_else10" # "_main_else10"
:ELF_str__main_loop12   "_main_loop12" # "_main_loop12"
:ELF_str__main_else13   "_main_else13" # "_main_else13"
:ELF_str__main_loop_end12   "_main_loop_end12" # "_main_loop_end12"
:ELF_str__main_loop14   "_main_loop14" # "_main_loop14"
:ELF_str__main_else15   "_main_else15" # "_main_else15"
:ELF_str__main_loop_end14   "_main_loop_end14" # "_main_loop_end14"
:ELF_str__main_else16   "_main_else16" # "_main_else16"
:ELF_str__main_loop17   "_main_loop17" # "_main_loop17"
:ELF_str__main_else18   "_main_else18" # "_main_else18"
:ELF_str__main_loop_end17   "_main_loop_end17" # "_main_loop_end17"
:ELF_str__main_loop19   "_main_loop19" # "_main_loop19"
:ELF_str__main_else20   "_main_else20" # "_main_else20"
:ELF_str__main_loop_end19   "_main_loop_end19" # "_main_loop_end19"
:ELF_str__main_else21   "_main_else21" # "_main_else21"
:ELF_str__main_else11   "_main_else11" # "_main_else11"
:ELF_str__main_loop22   "_main_loop22" # "_main_loop22"
:ELF_str__main_or_end23 "_main_or_end23" # "_main_or_end23"
:ELF_str__main_else24   "_main_else24" # "_main_else24"
:ELF_str__main_loop_end22   "_main_loop_end22" # "_main_loop_end22"
:ELF_str__main_loop25   "_main_loop25" # "_main_loop25"
:ELF_str__main_and_end26    "_main_and_end26" # "_main_and_end26"
:ELF_str__main_and_end27    "_main_and_end27" # "_main_and_end27"
:ELF_str__main_and_end28    "_main_and_end28" # "_main_and_end28"
:ELF_str__main_else29   "_main_else29" # "_main_else29"
:ELF_str__main_else30   "_main_else30" # "_main_else30"
:ELF_str__main_or_end31 "_main_or_end31" # "_main_or_end31"
:ELF_str__main_and_end33    "_main_and_end33" # "_main_and_end33"
:ELF_str__main_or_end34 "_main_or_end34" # "_main_or_end34"
:ELF_str__main_and_end32    "_main_and_end32" # "_main_and_end32"
:ELF_str__main_else36   "_main_else36" # "_main_else36"
:ELF_str__main_else_end36   "_main_else_end36" # "_main_else_end36"
:ELF_str__main_else37   "_main_else37" # "_main_else37"
:ELF_str__main_loop38   "_main_loop38" # "_main_loop38"
:ELF_str__main_and_end39    "_main_and_end39" # "_main_and_end39"
:ELF_str__main_else40   "_main_else40" # "_main_else40"
:ELF_str__main_loop_end38   "_main_loop_end38" # "_main_loop_end38"
:ELF_str__main_loop41   "_main_loop41" # "_main_loop41"
:ELF_str__main_else42   "_main_else42" # "_main_else42"
:ELF_str__main_loop_end41   "_main_loop_end41" # "_main_loop_end41"
:ELF_str__main_else35   "_main_else35" # "_main_else35"
:ELF_str__main_or_end43 "_main_or_end43" # "_main_or_end43"
:ELF_str__main_or_end44 "_main_or_end44" # "_main_or_end44"
:ELF_str__main_or_end45 "_main_or_end45" # "_main_or_end45"
:ELF_str__main_loop47   "_main_loop47" # "_main_loop47"
:ELF_str__main_else48   "_main_else48" # "_main_else48"
:ELF_str__main_loop_end47   "_main_loop_end47" # "_main_loop_end47"
:ELF_str__main_else46   "_main_else46" # "_main_else46"
:ELF_str__main_loop50   "_main_loop50" # "_main_loop50"
:ELF_str__main_and_end51    "_main_and_end51" # "_main_and_end51"
:ELF_str__main_else52   "_main_else52" # "_main_else52"
:ELF_str__main_loop_end50   "_main_loop_end50" # "_main_loop_end50"
:ELF_str__main_else53   "_main_else53" # "_main_else53"
:ELF_str__main_else49   "_main_else49" # "_main_else49"
:ELF_str__main_loop54   "_main_loop54" # "_main_loop54"
:ELF_str__main_else55   "_main_else55" # "_main_else55"
:ELF_str__main_loop_end54   "_main_loop_end54" # "_main_loop_end54"
:ELF_str__main_else_end49   "_main_else_end49" # "_main_else_end49"
:ELF_str__main_else_end46   "_main_else_end46" # "_main_else_end46"
:ELF_str__main_else_end35   "_main_else_end35" # "_main_else_end35"
:ELF_str__main_else_end30   "_main_else_end30" # "_main_else_end30"
:ELF_str__main_loop_end25   "_main_loop_end25" # "_main_loop_end25"
:ELF_str__main_loop56   "_main_loop56" # "_main_loop56"
:ELF_str__main_else57   "_main_else57" # "_main_else57"
:ELF_str__main_else58   "_main_else58" # "_main_else58"
:ELF_str__main_else_end58   "_main_else_end58" # "_main_else_end58"
:ELF_str__main_loop_end56   "_main_loop_end56" # "_main_loop_end56"
:ELF_str__main_else_end11   "_main_else_end11" # "_main_else_end11"
:ELF_str__main_loop_end9    "_main_loop_end9" # "_main_loop_end9"
:ELF_str__main_loop_end6    "_main_loop_end6" # "_main_loop_end6"
:ELF_str_f___init_globals__ "f___init_globals__" # "f___init_globals__"
:ELF_str_ELF_data   "ELF_data" # "ELF_data"
:ELF_str_SYS_MALLOC "SYS_MALLOC" # "SYS_MALLOC"
:ELF_str_string_0   "string_0" # "string_0"
:ELF_str_string_1   "string_1" # "string_1"
:ELF_str_string_2   "string_2" # "string_2"
:ELF_str_string_3   "string_3" # "string_3"
:ELF_str_string_4   "string_4" # "string_4"
:ELF_str_string_5   "string_5" # "string_5"
:ELF_str_string_6   "string_6" # "string_6"
:ELF_str_string_7   "string_7" # "string_7"
:ELF_str_string_8   "string_8" # "string_8"
:ELF_str_string_9   "string_9" # "string_9"
:ELF_str_string_10  "string_10" # "string_10"
:ELF_str_string_11  "string_11" # "string_11"
:ELF_str_string_12  "string_12" # "string_12"
:ELF_str_string_13  "string_13" # "string_13"
:ELF_str_string_14  "string_14" # "string_14"
:ELF_str_string_15  "string_15" # "string_15"
:ELF_str_string_16  "string_16" # "string_16"
:ELF_str_string_17  "string_17" # "string_17"
:ELF_str_string_18  "string_18" # "string_18"
:ELF_str_string_19  "string_19" # "string_19"
:ELF_str_string_20  "string_20" # "string_20"
:ELF_str_string_21  "string_21" # "string_21"
:ELF_str_g___sys_stdin  "g___sys_stdin" # "g___sys_stdin"
:ELF_str_g___sys_stdout "g___sys_stdout" # "g___sys_stdout"
:ELF_str_g___sys_stderr "g___sys_stderr" # "g___sys_stderr"
:ELF_str_g_stdin    "g_stdin" # "g_stdin"
:ELF_str_g_stdout   "g_stdout" # "g_stdout"
:ELF_str_g_stderr   "g_stderr" # "g_stderr"
:ELF_str_g_errno    "g_errno" # "g_errno"
:ELF_str_g_LINE_MACRO_OUTPUT_FORMAT_GCC "g_LINE_MACRO_OUTPUT_FORMAT_GCC" # "g_LINE_MACRO_OUTPUT_FORMAT_GCC"
:ELF_str_g_LINE_MACRO_OUTPUT_FORMAT_NONE    "g_LINE_MACRO_OUTPUT_FORMAT_NONE" # "g_LINE_MACRO_OUTPUT_FORMAT_NONE"
:ELF_str_g_LINE_MACRO_OUTPUT_FORMAT_STD "g_LINE_MACRO_OUTPUT_FORMAT_STD" # "g_LINE_MACRO_OUTPUT_FORMAT_STD"
:ELF_str_g_LINE_MACRO_OUTPUT_FORMAT_P10 "g_LINE_MACRO_OUTPUT_FORMAT_P10" # "g_LINE_MACRO_OUTPUT_FORMAT_P10"
:ELF_str_g__sys_env "g__sys_env" # "g__sys_env"
:ELF_str_g_defines  "g_defines" # "g_defines"
:ELF_str_static_0_line  "static_0_line" # "static_0_line"
:ELF_str_ELF_end    "ELF_end" # "ELF_end"
# END Generated string table


# Generated symbol table
:ELF_sym
# Required NULL symbol entry
00000000    # st_name
00000000    # st_value
00000000    # st_size
00  # st_info
00  # st_other
0100    # st_shndx

%ELF_str_ELF_text>ELF_str   # st_name
&ELF_text   #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
00  # st_other (default)
0100    # st_shndx

%ELF_str__start>ELF_str # st_name
&_start #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
02  # st_other (hidden)
0100    # st_shndx

%ELF_str_f_sys_int80>ELF_str    # st_name
&f_sys_int80    #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
00  # st_other (default)
0100    # st_shndx

%ELF_str_f_sys_malloc>ELF_str   # st_name
&f_sys_malloc   #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
00  # st_other (default)
0100    # st_shndx

%ELF_str_SYS_MALLOC>ELF_str # st_name
&SYS_MALLOC #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
00  # st_other (default)
0100    # st_shndx

%ELF_str_f_exit>ELF_str # st_name
&f_exit #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
00  # st_other (default)
0100    # st_shndx

%ELF_str_f_memcpy>ELF_str   # st_name
&f_memcpy   #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
00  # st_other (default)
0100    # st_shndx

%ELF_str__memcpy_loop1>ELF_str  # st_name
&_memcpy_loop1  #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
02  # st_other (hidden)
0100    # st_shndx

%ELF_str__memcpy_else2>ELF_str  # st_name
&_memcpy_else2  #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
02  # st_other (hidden)
0100    # st_shndx

%ELF_str__memcpy_loop_end1>ELF_str  # st_name
&_memcpy_loop_end1  #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
02  # st_other (hidden)
0100    # st_shndx

%ELF_str_f_memmove>ELF_str  # st_name
&f_memmove  #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
00  # st_other (default)
0100    # st_shndx

%ELF_str__memmove_loop2>ELF_str # st_name
&_memmove_loop2 #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
02  # st_other (hidden)
0100    # st_shndx

%ELF_str__memmove_else3>ELF_str # st_name
&_memmove_else3 #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
02  # st_other (hidden)
0100    # st_shndx

%ELF_str__memmove_loop_end2>ELF_str # st_name
&_memmove_loop_end2 #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
02  # st_other (hidden)
0100    # st_shndx

%ELF_str__memmove_else1>ELF_str # st_name
&_memmove_else1 #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
02  # st_other (hidden)
0100    # st_shndx

%ELF_str__memmove_loop5>ELF_str # st_name
&_memmove_loop5 #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
02  # st_other (hidden)
0100    # st_shndx

%ELF_str__memmove_else6>ELF_str # st_name
&_memmove_else6 #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
02  # st_other (hidden)
0100    # st_shndx

%ELF_str__memmove_loop_end5>ELF_str # st_name
&_memmove_loop_end5 #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
02  # st_other (hidden)
0100    # st_shndx

%ELF_str__memmove_else4>ELF_str # st_name
&_memmove_else4 #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
02  # st_other (hidden)
0100    # st_shndx

%ELF_str__memmove_else_end1>ELF_str # st_name
&_memmove_else_end1 #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
02  # st_other (hidden)
0100    # st_shndx

%ELF_str_f_memset>ELF_str   # st_name
&f_memset   #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
00  # st_other (default)
0100    # st_shndx

%ELF_str__memset_loop1>ELF_str  # st_name
&_memset_loop1  #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
02  # st_other (hidden)
0100    # st_shndx

%ELF_str__memset_else2>ELF_str  # st_name
&_memset_else2  #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
02  # st_other (hidden)
0100    # st_shndx

%ELF_str__memset_loop_end1>ELF_str  # st_name
&_memset_loop_end1  #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
02  # st_other (hidden)
0100    # st_shndx

%ELF_str_f_memcmp>ELF_str   # st_name
&f_memcmp   #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
00  # st_other (default)
0100    # st_shndx

%ELF_str__memcmp_loop1>ELF_str  # st_name
&_memcmp_loop1  #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
02  # st_other (hidden)
0100    # st_shndx

%ELF_str__memcmp_else2>ELF_str  # st_name
&_memcmp_else2  #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
02  # st_other (hidden)
0100    # st_shndx

%ELF_str__memcmp_else3>ELF_str  # st_name
&_memcmp_else3  #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
02  # st_other (hidden)
0100    # st_shndx

%ELF_str__memcmp_loop_end1>ELF_str  # st_name
&_memcmp_loop_end1  #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
02  # st_other (hidden)
0100    # st_shndx

%ELF_str_f_strlen>ELF_str   # st_name
&f_strlen   #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
00  # st_other (default)
0100    # st_shndx

%ELF_str__strlen_loop1>ELF_str  # st_name
&_strlen_loop1  #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
02  # st_other (hidden)
0100    # st_shndx

%ELF_str__strlen_else2>ELF_str  # st_name
&_strlen_else2  #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
02  # st_other (hidden)
0100    # st_shndx

%ELF_str__strlen_loop_end1>ELF_str  # st_name
&_strlen_loop_end1  #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
02  # st_other (hidden)
0100    # st_shndx

%ELF_str_f_strcpy>ELF_str   # st_name
&f_strcpy   #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
00  # st_other (default)
0100    # st_shndx

%ELF_str__strcpy_loop1>ELF_str  # st_name
&_strcpy_loop1  #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
02  # st_other (hidden)
0100    # st_shndx

%ELF_str__strcpy_else2>ELF_str  # st_name
&_strcpy_else2  #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
02  # st_other (hidden)
0100    # st_shndx

%ELF_str__strcpy_loop_end1>ELF_str  # st_name
&_strcpy_loop_end1  #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
02  # st_other (hidden)
0100    # st_shndx

%ELF_str_f_strncpy>ELF_str  # st_name
&f_strncpy  #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
00  # st_other (default)
0100    # st_shndx

%ELF_str__strncpy_loop1>ELF_str # st_name
&_strncpy_loop1 #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
02  # st_other (hidden)
0100    # st_shndx

%ELF_str__strncpy_else2>ELF_str # st_name
&_strncpy_else2 #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
02  # st_other (hidden)
0100    # st_shndx

%ELF_str__strncpy_else3>ELF_str # st_name
&_strncpy_else3 #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
02  # st_other (hidden)
0100    # st_shndx

%ELF_str__strncpy_loop_end1>ELF_str # st_name
&_strncpy_loop_end1 #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
02  # st_other (hidden)
0100    # st_shndx

%ELF_str_f_strcat>ELF_str   # st_name
&f_strcat   #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
00  # st_other (default)
0100    # st_shndx

%ELF_str_f_strchr>ELF_str   # st_name
&f_strchr   #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
00  # st_other (default)
0100    # st_shndx

%ELF_str__strchr_loop1>ELF_str  # st_name
&_strchr_loop1  #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
02  # st_other (hidden)
0100    # st_shndx

%ELF_str__strchr_else2>ELF_str  # st_name
&_strchr_else2  #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
02  # st_other (hidden)
0100    # st_shndx

%ELF_str__strchr_else3>ELF_str  # st_name
&_strchr_else3  #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
02  # st_other (hidden)
0100    # st_shndx

%ELF_str__strchr_loop_end1>ELF_str  # st_name
&_strchr_loop_end1  #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
02  # st_other (hidden)
0100    # st_shndx

%ELF_str__strchr_else4>ELF_str  # st_name
&_strchr_else4  #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
02  # st_other (hidden)
0100    # st_shndx

%ELF_str__strchr_else_end4>ELF_str  # st_name
&_strchr_else_end4  #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
02  # st_other (hidden)
0100    # st_shndx

%ELF_str_f_strrchr>ELF_str  # st_name
&f_strrchr  #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
00  # st_other (default)
0100    # st_shndx

%ELF_str__strrchr_loop1>ELF_str # st_name
&_strrchr_loop1 #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
02  # st_other (hidden)
0100    # st_shndx

%ELF_str__strrchr_else2>ELF_str # st_name
&_strrchr_else2 #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
02  # st_other (hidden)
0100    # st_shndx

%ELF_str__strrchr_else3>ELF_str # st_name
&_strrchr_else3 #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
02  # st_other (hidden)
0100    # st_shndx

%ELF_str__strrchr_loop_end1>ELF_str # st_name
&_strrchr_loop_end1 #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
02  # st_other (hidden)
0100    # st_shndx

%ELF_str_f_strcmp>ELF_str   # st_name
&f_strcmp   #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
00  # st_other (default)
0100    # st_shndx

%ELF_str__strcmp_loop1>ELF_str  # st_name
&_strcmp_loop1  #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
02  # st_other (hidden)
0100    # st_shndx

%ELF_str__strcmp_or_end2>ELF_str    # st_name
&_strcmp_or_end2    #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
02  # st_other (hidden)
0100    # st_shndx

%ELF_str__strcmp_else3>ELF_str  # st_name
&_strcmp_else3  #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
02  # st_other (hidden)
0100    # st_shndx

%ELF_str__strcmp_loop_end1>ELF_str  # st_name
&_strcmp_loop_end1  #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
02  # st_other (hidden)
0100    # st_shndx

%ELF_str_f_strncmp>ELF_str  # st_name
&f_strncmp  #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
00  # st_other (default)
0100    # st_shndx

%ELF_str__strncmp_loop1>ELF_str # st_name
&_strncmp_loop1 #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
02  # st_other (hidden)
0100    # st_shndx

%ELF_str__strncmp_else2>ELF_str # st_name
&_strncmp_else2 #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
02  # st_other (hidden)
0100    # st_shndx

%ELF_str__strncmp_or_end3>ELF_str   # st_name
&_strncmp_or_end3   #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
02  # st_other (hidden)
0100    # st_shndx

%ELF_str__strncmp_else4>ELF_str # st_name
&_strncmp_else4 #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
02  # st_other (hidden)
0100    # st_shndx

%ELF_str__strncmp_loop_end1>ELF_str # st_name
&_strncmp_loop_end1 #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
02  # st_other (hidden)
0100    # st_shndx

%ELF_str_f_strstr>ELF_str   # st_name
&f_strstr   #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
00  # st_other (default)
0100    # st_shndx

%ELF_str__strstr_loop1>ELF_str  # st_name
&_strstr_loop1  #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
02  # st_other (hidden)
0100    # st_shndx

%ELF_str__strstr_else2>ELF_str  # st_name
&_strstr_else2  #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
02  # st_other (hidden)
0100    # st_shndx

%ELF_str__strstr_else3>ELF_str  # st_name
&_strstr_else3  #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
02  # st_other (hidden)
0100    # st_shndx

%ELF_str__strstr_loop_end1>ELF_str  # st_name
&_strstr_loop_end1  #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
02  # st_other (hidden)
0100    # st_shndx

%ELF_str_f_strtoul>ELF_str  # st_name
&f_strtoul  #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
00  # st_other (default)
0100    # st_shndx

%ELF_str__strtoul_or_end3>ELF_str   # st_name
&_strtoul_or_end3   #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
02  # st_other (hidden)
0100    # st_shndx

%ELF_str__strtoul_else4>ELF_str # st_name
&_strtoul_else4 #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
02  # st_other (hidden)
0100    # st_shndx

%ELF_str__strtoul_else2>ELF_str # st_name
&_strtoul_else2 #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
02  # st_other (hidden)
0100    # st_shndx

%ELF_str__strtoul_else1>ELF_str # st_name
&_strtoul_else1 #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
02  # st_other (hidden)
0100    # st_shndx

%ELF_str__strtoul_else5>ELF_str # st_name
&_strtoul_else5 #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
02  # st_other (hidden)
0100    # st_shndx

%ELF_str__strtoul_else_end5>ELF_str # st_name
&_strtoul_else_end5 #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
02  # st_other (hidden)
0100    # st_shndx

%ELF_str__strtoul_loop6>ELF_str # st_name
&_strtoul_loop6 #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
02  # st_other (hidden)
0100    # st_shndx

%ELF_str__strtoul_and_end7>ELF_str  # st_name
&_strtoul_and_end7  #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
02  # st_other (hidden)
0100    # st_shndx

%ELF_str__strtoul_else8>ELF_str # st_name
&_strtoul_else8 #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
02  # st_other (hidden)
0100    # st_shndx

%ELF_str__strtoul_and_end9>ELF_str  # st_name
&_strtoul_and_end9  #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
02  # st_other (hidden)
0100    # st_shndx

%ELF_str__strtoul_else10>ELF_str    # st_name
&_strtoul_else10    #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
02  # st_other (hidden)
0100    # st_shndx

%ELF_str__strtoul_and_end11>ELF_str # st_name
&_strtoul_and_end11 #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
02  # st_other (hidden)
0100    # st_shndx

%ELF_str__strtoul_else12>ELF_str    # st_name
&_strtoul_else12    #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
02  # st_other (hidden)
0100    # st_shndx

%ELF_str__strtoul_else_end12>ELF_str    # st_name
&_strtoul_else_end12    #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
02  # st_other (hidden)
0100    # st_shndx

%ELF_str__strtoul_else_end10>ELF_str    # st_name
&_strtoul_else_end10    #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
02  # st_other (hidden)
0100    # st_shndx

%ELF_str__strtoul_else_end8>ELF_str # st_name
&_strtoul_else_end8 #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
02  # st_other (hidden)
0100    # st_shndx

%ELF_str__strtoul_loop_end6>ELF_str # st_name
&_strtoul_loop_end6 #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
02  # st_other (hidden)
0100    # st_shndx

%ELF_str__strtoul_else13>ELF_str    # st_name
&_strtoul_else13    #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
02  # st_other (hidden)
0100    # st_shndx

%ELF_str_f_strtol>ELF_str   # st_name
&f_strtol   #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
00  # st_other (default)
0100    # st_shndx

%ELF_str__strtol_else1>ELF_str  # st_name
&_strtol_else1  #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
02  # st_other (hidden)
0100    # st_shndx

%ELF_str_f_strtoll>ELF_str  # st_name
&f_strtoll  #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
00  # st_other (default)
0100    # st_shndx

%ELF_str_f_strtoull>ELF_str # st_name
&f_strtoull #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
00  # st_other (default)
0100    # st_shndx

%ELF_str_f_strtof>ELF_str   # st_name
&f_strtof   #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
00  # st_other (default)
0100    # st_shndx

%ELF_str_f_malloc>ELF_str   # st_name
&f_malloc   #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
00  # st_other (default)
0100    # st_shndx

%ELF_str_f_realloc>ELF_str  # st_name
&f_realloc  #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
00  # st_other (default)
0100    # st_shndx

%ELF_str__realloc_loop2>ELF_str # st_name
&_realloc_loop2 #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
02  # st_other (hidden)
0100    # st_shndx

%ELF_str__realloc_else3>ELF_str # st_name
&_realloc_else3 #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
02  # st_other (hidden)
0100    # st_shndx

%ELF_str__realloc_loop_end2>ELF_str # st_name
&_realloc_loop_end2 #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
02  # st_other (hidden)
0100    # st_shndx

%ELF_str__realloc_else1>ELF_str # st_name
&_realloc_else1 #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
02  # st_other (hidden)
0100    # st_shndx

%ELF_str_f_calloc>ELF_str   # st_name
&f_calloc   #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
00  # st_other (default)
0100    # st_shndx

%ELF_str__calloc_loop1>ELF_str  # st_name
&_calloc_loop1  #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
02  # st_other (hidden)
0100    # st_shndx

%ELF_str__calloc_else2>ELF_str  # st_name
&_calloc_else2  #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
02  # st_other (hidden)
0100    # st_shndx

%ELF_str__calloc_loop_end1>ELF_str  # st_name
&_calloc_loop_end1  #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
02  # st_other (hidden)
0100    # st_shndx

%ELF_str_f_free>ELF_str # st_name
&f_free #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
00  # st_other (default)
0100    # st_shndx

%ELF_str_f_fwrite>ELF_str   # st_name
&f_fwrite   #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
00  # st_other (default)
0100    # st_shndx

%ELF_str_f_fputc>ELF_str    # st_name
&f_fputc    #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
00  # st_other (default)
0100    # st_shndx

%ELF_str_f_fputs>ELF_str    # st_name
&f_fputs    #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
00  # st_other (default)
0100    # st_shndx

%ELF_str_f___sys_printf>ELF_str # st_name
&f___sys_printf #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
00  # st_other (default)
0100    # st_shndx

%ELF_str____sys_printf_loop1>ELF_str    # st_name
&___sys_printf_loop1    #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
02  # st_other (hidden)
0100    # st_shndx

%ELF_str____sys_printf_else2>ELF_str    # st_name
&___sys_printf_else2    #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
02  # st_other (hidden)
0100    # st_shndx

%ELF_str____sys_printf_else4>ELF_str    # st_name
&___sys_printf_else4    #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
02  # st_other (hidden)
0100    # st_shndx

%ELF_str____sys_printf_else5>ELF_str    # st_name
&___sys_printf_else5    #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
02  # st_other (hidden)
0100    # st_shndx

%ELF_str____sys_printf_else_end4>ELF_str    # st_name
&___sys_printf_else_end4    #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
02  # st_other (hidden)
0100    # st_shndx

%ELF_str____sys_printf_else6>ELF_str    # st_name
&___sys_printf_else6    #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
02  # st_other (hidden)
0100    # st_shndx

%ELF_str____sys_printf_else3>ELF_str    # st_name
&___sys_printf_else3    #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
02  # st_other (hidden)
0100    # st_shndx

%ELF_str____sys_printf_else8>ELF_str    # st_name
&___sys_printf_else8    #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
02  # st_other (hidden)
0100    # st_shndx

%ELF_str____sys_printf_else10>ELF_str   # st_name
&___sys_printf_else10   #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
02  # st_other (hidden)
0100    # st_shndx

%ELF_str____sys_printf_else11>ELF_str   # st_name
&___sys_printf_else11   #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
02  # st_other (hidden)
0100    # st_shndx

%ELF_str____sys_printf_loop12>ELF_str   # st_name
&___sys_printf_loop12   #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
02  # st_other (hidden)
0100    # st_shndx

%ELF_str____sys_printf_and_end13>ELF_str    # st_name
&___sys_printf_and_end13    #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
02  # st_other (hidden)
0100    # st_shndx

%ELF_str____sys_printf_else14>ELF_str   # st_name
&___sys_printf_else14   #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
02  # st_other (hidden)
0100    # st_shndx

%ELF_str____sys_printf_loop_end12>ELF_str   # st_name
&___sys_printf_loop_end12   #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
02  # st_other (hidden)
0100    # st_shndx

%ELF_str____sys_printf_else15>ELF_str   # st_name
&___sys_printf_else15   #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
02  # st_other (hidden)
0100    # st_shndx

%ELF_str____sys_printf_else17>ELF_str   # st_name
&___sys_printf_else17   #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
02  # st_other (hidden)
0100    # st_shndx

%ELF_str____sys_printf_else18>ELF_str   # st_name
&___sys_printf_else18   #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
02  # st_other (hidden)
0100    # st_shndx

%ELF_str____sys_printf_loop19>ELF_str   # st_name
&___sys_printf_loop19   #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
02  # st_other (hidden)
0100    # st_shndx

%ELF_str____sys_printf_else20>ELF_str   # st_name
&___sys_printf_else20   #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
02  # st_other (hidden)
0100    # st_shndx

%ELF_str____sys_printf_loop_end19>ELF_str   # st_name
&___sys_printf_loop_end19   #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
02  # st_other (hidden)
0100    # st_shndx

%ELF_str____sys_printf_else21>ELF_str   # st_name
&___sys_printf_else21   #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
02  # st_other (hidden)
0100    # st_shndx

%ELF_str____sys_printf_else_end17>ELF_str   # st_name
&___sys_printf_else_end17   #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
02  # st_other (hidden)
0100    # st_shndx

%ELF_str____sys_printf_loop25>ELF_str   # st_name
&___sys_printf_loop25   #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
02  # st_other (hidden)
0100    # st_shndx

%ELF_str____sys_printf_else26>ELF_str   # st_name
&___sys_printf_else26   #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
02  # st_other (hidden)
0100    # st_shndx

%ELF_str____sys_printf_else27>ELF_str   # st_name
&___sys_printf_else27   #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
02  # st_other (hidden)
0100    # st_shndx

%ELF_str____sys_printf_else_end27>ELF_str   # st_name
&___sys_printf_else_end27   #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
02  # st_other (hidden)
0100    # st_shndx

%ELF_str____sys_printf_loop_end25>ELF_str   # st_name
&___sys_printf_loop_end25   #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
02  # st_other (hidden)
0100    # st_shndx

%ELF_str____sys_printf_else24>ELF_str   # st_name
&___sys_printf_else24   #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
02  # st_other (hidden)
0100    # st_shndx

%ELF_str____sys_printf_loop28>ELF_str   # st_name
&___sys_printf_loop28   #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
02  # st_other (hidden)
0100    # st_shndx

%ELF_str____sys_printf_else29>ELF_str   # st_name
&___sys_printf_else29   #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
02  # st_other (hidden)
0100    # st_shndx

%ELF_str____sys_printf_loop_end28>ELF_str   # st_name
&___sys_printf_loop_end28   #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
02  # st_other (hidden)
0100    # st_shndx

%ELF_str____sys_printf_else_end24>ELF_str   # st_name
&___sys_printf_else_end24   #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
02  # st_other (hidden)
0100    # st_shndx

%ELF_str____sys_printf_else23>ELF_str   # st_name
&___sys_printf_else23   #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
02  # st_other (hidden)
0100    # st_shndx

%ELF_str____sys_printf_else22>ELF_str   # st_name
&___sys_printf_else22   #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
02  # st_other (hidden)
0100    # st_shndx

%ELF_str____sys_printf_else16>ELF_str   # st_name
&___sys_printf_else16   #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
02  # st_other (hidden)
0100    # st_shndx

%ELF_str____sys_printf_else31>ELF_str   # st_name
&___sys_printf_else31   #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
02  # st_other (hidden)
0100    # st_shndx

%ELF_str____sys_printf_loop32>ELF_str   # st_name
&___sys_printf_loop32   #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
02  # st_other (hidden)
0100    # st_shndx

%ELF_str____sys_printf_else33>ELF_str   # st_name
&___sys_printf_else33   #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
02  # st_other (hidden)
0100    # st_shndx

%ELF_str____sys_printf_loop_end32>ELF_str   # st_name
&___sys_printf_loop_end32   #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
02  # st_other (hidden)
0100    # st_shndx

%ELF_str____sys_printf_else_end31>ELF_str   # st_name
&___sys_printf_else_end31   #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
02  # st_other (hidden)
0100    # st_shndx

%ELF_str____sys_printf_else30>ELF_str   # st_name
&___sys_printf_else30   #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
02  # st_other (hidden)
0100    # st_shndx

%ELF_str____sys_printf_or_end34>ELF_str # st_name
&___sys_printf_or_end34 #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
02  # st_other (hidden)
0100    # st_shndx

%ELF_str____sys_printf_else36>ELF_str   # st_name
&___sys_printf_else36   #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
02  # st_other (hidden)
0100    # st_shndx

%ELF_str____sys_printf_loop37>ELF_str   # st_name
&___sys_printf_loop37   #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
02  # st_other (hidden)
0100    # st_shndx

%ELF_str____sys_printf_else38>ELF_str   # st_name
&___sys_printf_else38   #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
02  # st_other (hidden)
0100    # st_shndx

%ELF_str____sys_printf_else39>ELF_str   # st_name
&___sys_printf_else39   #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
02  # st_other (hidden)
0100    # st_shndx

%ELF_str____sys_printf_else_end39>ELF_str   # st_name
&___sys_printf_else_end39   #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
02  # st_other (hidden)
0100    # st_shndx

%ELF_str____sys_printf_loop_end37>ELF_str   # st_name
&___sys_printf_loop_end37   #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
02  # st_other (hidden)
0100    # st_shndx

%ELF_str____sys_printf_else_end36>ELF_str   # st_name
&___sys_printf_else_end36   #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
02  # st_other (hidden)
0100    # st_shndx

%ELF_str____sys_printf_else35>ELF_str   # st_name
&___sys_printf_else35   #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
02  # st_other (hidden)
0100    # st_shndx

%ELF_str____sys_printf_else40>ELF_str   # st_name
&___sys_printf_else40   #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
02  # st_other (hidden)
0100    # st_shndx

%ELF_str____sys_printf_else_end40>ELF_str   # st_name
&___sys_printf_else_end40   #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
02  # st_other (hidden)
0100    # st_shndx

%ELF_str____sys_printf_else_end35>ELF_str   # st_name
&___sys_printf_else_end35   #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
02  # st_other (hidden)
0100    # st_shndx

%ELF_str____sys_printf_else_end30>ELF_str   # st_name
&___sys_printf_else_end30   #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
02  # st_other (hidden)
0100    # st_shndx

%ELF_str____sys_printf_else_end16>ELF_str   # st_name
&___sys_printf_else_end16   #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
02  # st_other (hidden)
0100    # st_shndx

%ELF_str____sys_printf_else_end15>ELF_str   # st_name
&___sys_printf_else_end15   #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
02  # st_other (hidden)
0100    # st_shndx

%ELF_str____sys_printf_else_end10>ELF_str   # st_name
&___sys_printf_else_end10   #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
02  # st_other (hidden)
0100    # st_shndx

%ELF_str____sys_printf_else9>ELF_str    # st_name
&___sys_printf_else9    #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
02  # st_other (hidden)
0100    # st_shndx

%ELF_str____sys_printf_else_end9>ELF_str    # st_name
&___sys_printf_else_end9    #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
02  # st_other (hidden)
0100    # st_shndx

%ELF_str____sys_printf_else7>ELF_str    # st_name
&___sys_printf_else7    #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
02  # st_other (hidden)
0100    # st_shndx

%ELF_str____sys_printf_loop_end1>ELF_str    # st_name
&___sys_printf_loop_end1    #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
02  # st_other (hidden)
0100    # st_shndx

%ELF_str____sys_printf_and_end41>ELF_str    # st_name
&___sys_printf_and_end41    #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
02  # st_other (hidden)
0100    # st_shndx

%ELF_str____sys_printf_else42>ELF_str   # st_name
&___sys_printf_else42   #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
02  # st_other (hidden)
0100    # st_shndx

%ELF_str_f_va_end>ELF_str   # st_name
&f_va_end   #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
00  # st_other (default)
0100    # st_shndx

%ELF_str_f_fprintf>ELF_str  # st_name
&f_fprintf  #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
00  # st_other (default)
0100    # st_shndx

%ELF_str_f_printf>ELF_str   # st_name
&f_printf   #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
00  # st_other (default)
0100    # st_shndx

%ELF_str_f_sprintf>ELF_str  # st_name
&f_sprintf  #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
00  # st_other (default)
0100    # st_shndx

%ELF_str_f_snprintf>ELF_str # st_name
&f_snprintf #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
00  # st_other (default)
0100    # st_shndx

%ELF_str_f_vsnprintf>ELF_str    # st_name
&f_vsnprintf    #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
00  # st_other (default)
0100    # st_shndx

%ELF_str_f_open>ELF_str # st_name
&f_open #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
00  # st_other (default)
0100    # st_shndx

%ELF_str__open_else1>ELF_str    # st_name
&_open_else1    #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
02  # st_other (hidden)
0100    # st_shndx

%ELF_str_f_close>ELF_str    # st_name
&f_close    #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
00  # st_other (default)
0100    # st_shndx

%ELF_str_f_read>ELF_str # st_name
&f_read #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
00  # st_other (default)
0100    # st_shndx

%ELF_str_f_lseek>ELF_str    # st_name
&f_lseek    #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
00  # st_other (default)
0100    # st_shndx

%ELF_str_f_fopen>ELF_str    # st_name
&f_fopen    #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
00  # st_other (default)
0100    # st_shndx

%ELF_str__fopen_or_end1>ELF_str # st_name
&_fopen_or_end1 #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
02  # st_other (hidden)
0100    # st_shndx

%ELF_str__fopen_else2>ELF_str   # st_name
&_fopen_else2   #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
02  # st_other (hidden)
0100    # st_shndx

%ELF_str__fopen_else3>ELF_str   # st_name
&_fopen_else3   #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
02  # st_other (hidden)
0100    # st_shndx

%ELF_str__fopen_else4>ELF_str   # st_name
&_fopen_else4   #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
02  # st_other (hidden)
0100    # st_shndx

%ELF_str__fopen_else5>ELF_str   # st_name
&_fopen_else5   #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
02  # st_other (hidden)
0100    # st_shndx

%ELF_str__fopen_else7>ELF_str   # st_name
&_fopen_else7   #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
02  # st_other (hidden)
0100    # st_shndx

%ELF_str__fopen_else_end7>ELF_str   # st_name
&_fopen_else_end7   #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
02  # st_other (hidden)
0100    # st_shndx

%ELF_str__fopen_else6>ELF_str   # st_name
&_fopen_else6   #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
02  # st_other (hidden)
0100    # st_shndx

%ELF_str__fopen_else8>ELF_str   # st_name
&_fopen_else8   #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
02  # st_other (hidden)
0100    # st_shndx

%ELF_str__fopen_else_end8>ELF_str   # st_name
&_fopen_else_end8   #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
02  # st_other (hidden)
0100    # st_shndx

%ELF_str__fopen_else_end6>ELF_str   # st_name
&_fopen_else_end6   #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
02  # st_other (hidden)
0100    # st_shndx

%ELF_str__fopen_else9>ELF_str   # st_name
&_fopen_else9   #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
02  # st_other (hidden)
0100    # st_shndx

%ELF_str_f_fdopen>ELF_str   # st_name
&f_fdopen   #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
00  # st_other (default)
0100    # st_shndx

%ELF_str_f_fclose>ELF_str   # st_name
&f_fclose   #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
00  # st_other (default)
0100    # st_shndx

%ELF_str_f_fflush>ELF_str   # st_name
&f_fflush   #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
00  # st_other (default)
0100    # st_shndx

%ELF_str_f_fseek>ELF_str    # st_name
&f_fseek    #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
00  # st_other (default)
0100    # st_shndx

%ELF_str_f_ftell>ELF_str    # st_name
&f_ftell    #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
00  # st_other (default)
0100    # st_shndx

%ELF_str_f_fread>ELF_str    # st_name
&f_fread    #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
00  # st_other (default)
0100    # st_shndx

%ELF_str__fread_loop1>ELF_str   # st_name
&_fread_loop1   #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
02  # st_other (hidden)
0100    # st_shndx

%ELF_str__fread_else2>ELF_str   # st_name
&_fread_else2   #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
02  # st_other (hidden)
0100    # st_shndx

%ELF_str__fread_else3>ELF_str   # st_name
&_fread_else3   #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
02  # st_other (hidden)
0100    # st_shndx

%ELF_str__fread_loop_end1>ELF_str   # st_name
&_fread_loop_end1   #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
02  # st_other (hidden)
0100    # st_shndx

%ELF_str_f_lseek>ELF_str    # st_name
&f_lseek    #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
00  # st_other (default)
0100    # st_shndx

%ELF_str_f_feof>ELF_str # st_name
&f_feof #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
00  # st_other (default)
0100    # st_shndx

%ELF_str_f_fgetc>ELF_str    # st_name
&f_fgetc    #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
00  # st_other (default)
0100    # st_shndx

%ELF_str__fgetc_else1>ELF_str   # st_name
&_fgetc_else1   #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
02  # st_other (hidden)
0100    # st_shndx

%ELF_str__fgetc_else2>ELF_str   # st_name
&_fgetc_else2   #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
02  # st_other (hidden)
0100    # st_shndx

%ELF_str_f_ldexp>ELF_str    # st_name
&f_ldexp    #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
00  # st_other (default)
0100    # st_shndx

%ELF_str__ldexp_loop1>ELF_str   # st_name
&_ldexp_loop1   #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
02  # st_other (hidden)
0100    # st_shndx

%ELF_str__ldexp_else2>ELF_str   # st_name
&_ldexp_else2   #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
02  # st_other (hidden)
0100    # st_shndx

%ELF_str__ldexp_loop_end1>ELF_str   # st_name
&_ldexp_loop_end1   #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
02  # st_other (hidden)
0100    # st_shndx

%ELF_str_f_time>ELF_str # st_name
&f_time #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
00  # st_other (default)
0100    # st_shndx

%ELF_str_f_localtime>ELF_str    # st_name
&f_localtime    #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
00  # st_other (default)
0100    # st_shndx

%ELF_str_f_gettimeofday>ELF_str # st_name
&f_gettimeofday #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
00  # st_other (default)
0100    # st_shndx

%ELF_str_f_write>ELF_str    # st_name
&f_write    #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
00  # st_other (default)
0100    # st_shndx

%ELF_str_f_fileno>ELF_str   # st_name
&f_fileno   #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
00  # st_other (default)
0100    # st_shndx

%ELF_str_f_getcwd>ELF_str   # st_name
&f_getcwd   #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
00  # st_other (default)
0100    # st_shndx

%ELF_str_f_getenv>ELF_str   # st_name
&f_getenv   #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
00  # st_other (default)
0100    # st_shndx

%ELF_str__getenv_loop1>ELF_str  # st_name
&_getenv_loop1  #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
02  # st_other (hidden)
0100    # st_shndx

%ELF_str__getenv_else2>ELF_str  # st_name
&_getenv_else2  #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
02  # st_other (hidden)
0100    # st_shndx

%ELF_str__getenv_and_end3>ELF_str   # st_name
&_getenv_and_end3   #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
02  # st_other (hidden)
0100    # st_shndx

%ELF_str__getenv_else4>ELF_str  # st_name
&_getenv_else4  #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
02  # st_other (hidden)
0100    # st_shndx

%ELF_str__getenv_loop_end1>ELF_str  # st_name
&_getenv_loop_end1  #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
02  # st_other (hidden)
0100    # st_shndx

%ELF_str_f_qsort>ELF_str    # st_name
&f_qsort    #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
00  # st_other (default)
0100    # st_shndx

%ELF_str__qsort_loop1>ELF_str   # st_name
&_qsort_loop1   #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
02  # st_other (hidden)
0100    # st_shndx

%ELF_str__qsort_else2>ELF_str   # st_name
&_qsort_else2   #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
02  # st_other (hidden)
0100    # st_shndx

%ELF_str__qsort_loop3>ELF_str   # st_name
&_qsort_loop3   #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
02  # st_other (hidden)
0100    # st_shndx

%ELF_str__qsort_else4>ELF_str   # st_name
&_qsort_else4   #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
02  # st_other (hidden)
0100    # st_shndx

%ELF_str__qsort_loop6>ELF_str   # st_name
&_qsort_loop6   #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
02  # st_other (hidden)
0100    # st_shndx

%ELF_str__qsort_else7>ELF_str   # st_name
&_qsort_else7   #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
02  # st_other (hidden)
0100    # st_shndx

%ELF_str__qsort_else8>ELF_str   # st_name
&_qsort_else8   #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
02  # st_other (hidden)
0100    # st_shndx

%ELF_str__qsort_else_end8>ELF_str   # st_name
&_qsort_else_end8   #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
02  # st_other (hidden)
0100    # st_shndx

%ELF_str__qsort_loop_end6>ELF_str   # st_name
&_qsort_loop_end6   #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
02  # st_other (hidden)
0100    # st_shndx

%ELF_str__qsort_else5>ELF_str   # st_name
&_qsort_else5   #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
02  # st_other (hidden)
0100    # st_shndx

%ELF_str__qsort_loop_end3>ELF_str   # st_name
&_qsort_loop_end3   #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
02  # st_other (hidden)
0100    # st_shndx

%ELF_str__qsort_loop_end1>ELF_str   # st_name
&_qsort_loop_end1   #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
02  # st_other (hidden)
0100    # st_shndx

%ELF_str_f_time>ELF_str # st_name
&f_time #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
00  # st_other (default)
0100    # st_shndx

%ELF_str_f_setjmp>ELF_str   # st_name
&f_setjmp   #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
00  # st_other (default)
0100    # st_shndx

%ELF_str_f_longjmp>ELF_str  # st_name
&f_longjmp  #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
00  # st_other (default)
0100    # st_shndx

%ELF_str_f_unlink>ELF_str   # st_name
&f_unlink   #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
00  # st_other (default)
0100    # st_shndx

%ELF_str_f_sscanf>ELF_str   # st_name
&f_sscanf   #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
00  # st_other (default)
0100    # st_shndx

%ELF_str__sscanf_loop1>ELF_str  # st_name
&_sscanf_loop1  #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
02  # st_other (hidden)
0100    # st_shndx

%ELF_str__sscanf_else2>ELF_str  # st_name
&_sscanf_else2  #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
02  # st_other (hidden)
0100    # st_shndx

%ELF_str__sscanf_else3>ELF_str  # st_name
&_sscanf_else3  #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
02  # st_other (hidden)
0100    # st_shndx

%ELF_str__sscanf_loop6>ELF_str  # st_name
&_sscanf_loop6  #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
02  # st_other (hidden)
0100    # st_shndx

%ELF_str__sscanf_and_end7>ELF_str   # st_name
&_sscanf_and_end7   #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
02  # st_other (hidden)
0100    # st_shndx

%ELF_str__sscanf_else8>ELF_str  # st_name
&_sscanf_else8  #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
02  # st_other (hidden)
0100    # st_shndx

%ELF_str__sscanf_loop_end6>ELF_str  # st_name
&_sscanf_loop_end6  #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
02  # st_other (hidden)
0100    # st_shndx

%ELF_str__sscanf_else5>ELF_str  # st_name
&_sscanf_else5  #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
02  # st_other (hidden)
0100    # st_shndx

%ELF_str__sscanf_else_end5>ELF_str  # st_name
&_sscanf_else_end5  #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
02  # st_other (hidden)
0100    # st_shndx

%ELF_str__sscanf_else4>ELF_str  # st_name
&_sscanf_else4  #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
02  # st_other (hidden)
0100    # st_shndx

%ELF_str__sscanf_else9>ELF_str  # st_name
&_sscanf_else9  #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
02  # st_other (hidden)
0100    # st_shndx

%ELF_str__sscanf_else_end4>ELF_str  # st_name
&_sscanf_else_end4  #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
02  # st_other (hidden)
0100    # st_shndx

%ELF_str__sscanf_else_end3>ELF_str  # st_name
&_sscanf_else_end3  #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
02  # st_other (hidden)
0100    # st_shndx

%ELF_str__sscanf_loop_end1>ELF_str  # st_name
&_sscanf_loop_end1  #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
02  # st_other (hidden)
0100    # st_shndx

%ELF_str_f_atoi>ELF_str # st_name
&f_atoi #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
00  # st_other (default)
0100    # st_shndx

%ELF_str_f_remove>ELF_str   # st_name
&f_remove   #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
00  # st_other (default)
0100    # st_shndx

%ELF_str_f_execvp>ELF_str   # st_name
&f_execvp   #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
00  # st_other (default)
0100    # st_shndx

%ELF_str_f_mkdir>ELF_str    # st_name
&f_mkdir    #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
00  # st_other (default)
0100    # st_shndx

%ELF_str_f_chdir>ELF_str    # st_name
&f_chdir    #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
00  # st_other (default)
0100    # st_shndx

%ELF_str_f_access>ELF_str   # st_name
&f_access   #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
00  # st_other (default)
0100    # st_shndx

%ELF_str_f_chmod>ELF_str    # st_name
&f_chmod    #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
00  # st_other (default)
0100    # st_shndx

%ELF_str_f_symlink>ELF_str  # st_name
&f_symlink  #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
00  # st_other (default)
0100    # st_shndx

%ELF_str_f_uname>ELF_str    # st_name
&f_uname    #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
00  # st_other (default)
0100    # st_shndx

%ELF_str_f_execve>ELF_str   # st_name
&f_execve   #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
00  # st_other (default)
0100    # st_shndx

%ELF_str_f_fgets>ELF_str    # st_name
&f_fgets    #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
00  # st_other (default)
0100    # st_shndx

%ELF_str__fgets_else1>ELF_str   # st_name
&_fgets_else1   #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
02  # st_other (hidden)
0100    # st_shndx

%ELF_str__fgets_loop2>ELF_str   # st_name
&_fgets_loop2   #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
02  # st_other (hidden)
0100    # st_shndx

%ELF_str__fgets_else3>ELF_str   # st_name
&_fgets_else3   #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
02  # st_other (hidden)
0100    # st_shndx

%ELF_str__fgets_else4>ELF_str   # st_name
&_fgets_else4   #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
02  # st_other (hidden)
0100    # st_shndx

%ELF_str__fgets_else5>ELF_str   # st_name
&_fgets_else5   #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
02  # st_other (hidden)
0100    # st_shndx

%ELF_str__fgets_loop_end2>ELF_str   # st_name
&_fgets_loop_end2   #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
02  # st_other (hidden)
0100    # st_shndx

%ELF_str_f_fgets>ELF_str    # st_name
&f_fgets    #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
00  # st_other (default)
0100    # st_shndx

%ELF_str__fgets_loop1>ELF_str   # st_name
&_fgets_loop1   #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
02  # st_other (hidden)
0100    # st_shndx

%ELF_str__fgets_else2>ELF_str   # st_name
&_fgets_else2   #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
02  # st_other (hidden)
0100    # st_shndx

%ELF_str__fgets_else4>ELF_str   # st_name
&_fgets_else4   #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
02  # st_other (hidden)
0100    # st_shndx

%ELF_str__fgets_else3>ELF_str   # st_name
&_fgets_else3   #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
02  # st_other (hidden)
0100    # st_shndx

%ELF_str__fgets_else5>ELF_str   # st_name
&_fgets_else5   #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
02  # st_other (hidden)
0100    # st_shndx

%ELF_str__fgets_loop_end1>ELF_str   # st_name
&_fgets_loop_end1   #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
02  # st_other (hidden)
0100    # st_shndx

%ELF_str_f_add_define>ELF_str   # st_name
&f_add_define   #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
00  # st_other (default)
0100    # st_shndx

%ELF_str_f_find_define>ELF_str  # st_name
&f_find_define  #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
00  # st_other (default)
0100    # st_shndx

%ELF_str__find_define_loop1>ELF_str # st_name
&_find_define_loop1 #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
02  # st_other (hidden)
0100    # st_shndx

%ELF_str__find_define_else2>ELF_str # st_name
&_find_define_else2 #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
02  # st_other (hidden)
0100    # st_shndx

%ELF_str__find_define_else3>ELF_str # st_name
&_find_define_else3 #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
02  # st_other (hidden)
0100    # st_shndx

%ELF_str__find_define_loop_end1>ELF_str # st_name
&_find_define_loop_end1 #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
02  # st_other (hidden)
0100    # st_shndx

%ELF_str_f_output_hex>ELF_str   # st_name
&f_output_hex   #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
00  # st_other (default)
0100    # st_shndx

%ELF_str__output_hex_else1>ELF_str  # st_name
&_output_hex_else1  #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
02  # st_other (hidden)
0100    # st_shndx

%ELF_str__output_hex_else_end1>ELF_str  # st_name
&_output_hex_else_end1  #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
02  # st_other (hidden)
0100    # st_shndx

%ELF_str_f_main>ELF_str # st_name
&f_main #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
00  # st_other (default)
0100    # st_shndx

%ELF_str__main_loop1>ELF_str    # st_name
&_main_loop1    #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
02  # st_other (hidden)
0100    # st_shndx

%ELF_str__main_else2>ELF_str    # st_name
&_main_else2    #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
02  # st_other (hidden)
0100    # st_shndx

%ELF_str__main_else3>ELF_str    # st_name
&_main_else3    #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
02  # st_other (hidden)
0100    # st_shndx

%ELF_str__main_else_end3>ELF_str    # st_name
&_main_else_end3    #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
02  # st_other (hidden)
0100    # st_shndx

%ELF_str__main_loop_end1>ELF_str    # st_name
&_main_loop_end1    #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
02  # st_other (hidden)
0100    # st_shndx

%ELF_str__main_else5>ELF_str    # st_name
&_main_else5    #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
02  # st_other (hidden)
0100    # st_shndx

%ELF_str__main_else4>ELF_str    # st_name
&_main_else4    #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
02  # st_other (hidden)
0100    # st_shndx

%ELF_str__main_loop6>ELF_str    # st_name
&_main_loop6    #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
02  # st_other (hidden)
0100    # st_shndx

%ELF_str__main_else7>ELF_str    # st_name
&_main_else7    #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
02  # st_other (hidden)
0100    # st_shndx

%ELF_str__main_else8>ELF_str    # st_name
&_main_else8    #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
02  # st_other (hidden)
0100    # st_shndx

%ELF_str__main_loop9>ELF_str    # st_name
&_main_loop9    #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
02  # st_other (hidden)
0100    # st_shndx

%ELF_str__main_else10>ELF_str   # st_name
&_main_else10   #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
02  # st_other (hidden)
0100    # st_shndx

%ELF_str__main_loop12>ELF_str   # st_name
&_main_loop12   #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
02  # st_other (hidden)
0100    # st_shndx

%ELF_str__main_else13>ELF_str   # st_name
&_main_else13   #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
02  # st_other (hidden)
0100    # st_shndx

%ELF_str__main_loop_end12>ELF_str   # st_name
&_main_loop_end12   #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
02  # st_other (hidden)
0100    # st_shndx

%ELF_str__main_loop14>ELF_str   # st_name
&_main_loop14   #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
02  # st_other (hidden)
0100    # st_shndx

%ELF_str__main_else15>ELF_str   # st_name
&_main_else15   #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
02  # st_other (hidden)
0100    # st_shndx

%ELF_str__main_loop_end14>ELF_str   # st_name
&_main_loop_end14   #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
02  # st_other (hidden)
0100    # st_shndx

%ELF_str__main_else16>ELF_str   # st_name
&_main_else16   #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
02  # st_other (hidden)
0100    # st_shndx

%ELF_str__main_loop17>ELF_str   # st_name
&_main_loop17   #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
02  # st_other (hidden)
0100    # st_shndx

%ELF_str__main_else18>ELF_str   # st_name
&_main_else18   #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
02  # st_other (hidden)
0100    # st_shndx

%ELF_str__main_loop_end17>ELF_str   # st_name
&_main_loop_end17   #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
02  # st_other (hidden)
0100    # st_shndx

%ELF_str__main_loop19>ELF_str   # st_name
&_main_loop19   #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
02  # st_other (hidden)
0100    # st_shndx

%ELF_str__main_else20>ELF_str   # st_name
&_main_else20   #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
02  # st_other (hidden)
0100    # st_shndx

%ELF_str__main_loop_end19>ELF_str   # st_name
&_main_loop_end19   #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
02  # st_other (hidden)
0100    # st_shndx

%ELF_str__main_else21>ELF_str   # st_name
&_main_else21   #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
02  # st_other (hidden)
0100    # st_shndx

%ELF_str__main_else11>ELF_str   # st_name
&_main_else11   #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
02  # st_other (hidden)
0100    # st_shndx

%ELF_str__main_loop22>ELF_str   # st_name
&_main_loop22   #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
02  # st_other (hidden)
0100    # st_shndx

%ELF_str__main_or_end23>ELF_str # st_name
&_main_or_end23 #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
02  # st_other (hidden)
0100    # st_shndx

%ELF_str__main_else24>ELF_str   # st_name
&_main_else24   #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
02  # st_other (hidden)
0100    # st_shndx

%ELF_str__main_loop_end22>ELF_str   # st_name
&_main_loop_end22   #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
02  # st_other (hidden)
0100    # st_shndx

%ELF_str__main_loop25>ELF_str   # st_name
&_main_loop25   #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
02  # st_other (hidden)
0100    # st_shndx

%ELF_str__main_and_end26>ELF_str    # st_name
&_main_and_end26    #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
02  # st_other (hidden)
0100    # st_shndx

%ELF_str__main_and_end27>ELF_str    # st_name
&_main_and_end27    #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
02  # st_other (hidden)
0100    # st_shndx

%ELF_str__main_and_end28>ELF_str    # st_name
&_main_and_end28    #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
02  # st_other (hidden)
0100    # st_shndx

%ELF_str__main_else29>ELF_str   # st_name
&_main_else29   #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
02  # st_other (hidden)
0100    # st_shndx

%ELF_str__main_else30>ELF_str   # st_name
&_main_else30   #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
02  # st_other (hidden)
0100    # st_shndx

%ELF_str__main_or_end31>ELF_str # st_name
&_main_or_end31 #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
02  # st_other (hidden)
0100    # st_shndx

%ELF_str__main_and_end33>ELF_str    # st_name
&_main_and_end33    #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
02  # st_other (hidden)
0100    # st_shndx

%ELF_str__main_or_end34>ELF_str # st_name
&_main_or_end34 #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
02  # st_other (hidden)
0100    # st_shndx

%ELF_str__main_and_end32>ELF_str    # st_name
&_main_and_end32    #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
02  # st_other (hidden)
0100    # st_shndx

%ELF_str__main_else36>ELF_str   # st_name
&_main_else36   #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
02  # st_other (hidden)
0100    # st_shndx

%ELF_str__main_else_end36>ELF_str   # st_name
&_main_else_end36   #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
02  # st_other (hidden)
0100    # st_shndx

%ELF_str__main_else37>ELF_str   # st_name
&_main_else37   #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
02  # st_other (hidden)
0100    # st_shndx

%ELF_str__main_loop38>ELF_str   # st_name
&_main_loop38   #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
02  # st_other (hidden)
0100    # st_shndx

%ELF_str__main_and_end39>ELF_str    # st_name
&_main_and_end39    #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
02  # st_other (hidden)
0100    # st_shndx

%ELF_str__main_else40>ELF_str   # st_name
&_main_else40   #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
02  # st_other (hidden)
0100    # st_shndx

%ELF_str__main_loop_end38>ELF_str   # st_name
&_main_loop_end38   #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
02  # st_other (hidden)
0100    # st_shndx

%ELF_str__main_loop41>ELF_str   # st_name
&_main_loop41   #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
02  # st_other (hidden)
0100    # st_shndx

%ELF_str__main_else42>ELF_str   # st_name
&_main_else42   #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
02  # st_other (hidden)
0100    # st_shndx

%ELF_str__main_loop_end41>ELF_str   # st_name
&_main_loop_end41   #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
02  # st_other (hidden)
0100    # st_shndx

%ELF_str__main_else35>ELF_str   # st_name
&_main_else35   #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
02  # st_other (hidden)
0100    # st_shndx

%ELF_str__main_or_end43>ELF_str # st_name
&_main_or_end43 #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
02  # st_other (hidden)
0100    # st_shndx

%ELF_str__main_or_end44>ELF_str # st_name
&_main_or_end44 #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
02  # st_other (hidden)
0100    # st_shndx

%ELF_str__main_or_end45>ELF_str # st_name
&_main_or_end45 #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
02  # st_other (hidden)
0100    # st_shndx

%ELF_str__main_loop47>ELF_str   # st_name
&_main_loop47   #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
02  # st_other (hidden)
0100    # st_shndx

%ELF_str__main_else48>ELF_str   # st_name
&_main_else48   #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
02  # st_other (hidden)
0100    # st_shndx

%ELF_str__main_loop_end47>ELF_str   # st_name
&_main_loop_end47   #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
02  # st_other (hidden)
0100    # st_shndx

%ELF_str__main_else46>ELF_str   # st_name
&_main_else46   #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
02  # st_other (hidden)
0100    # st_shndx

%ELF_str__main_loop50>ELF_str   # st_name
&_main_loop50   #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
02  # st_other (hidden)
0100    # st_shndx

%ELF_str__main_and_end51>ELF_str    # st_name
&_main_and_end51    #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
02  # st_other (hidden)
0100    # st_shndx

%ELF_str__main_else52>ELF_str   # st_name
&_main_else52   #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
02  # st_other (hidden)
0100    # st_shndx

%ELF_str__main_loop_end50>ELF_str   # st_name
&_main_loop_end50   #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
02  # st_other (hidden)
0100    # st_shndx

%ELF_str__main_else53>ELF_str   # st_name
&_main_else53   #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
02  # st_other (hidden)
0100    # st_shndx

%ELF_str__main_else49>ELF_str   # st_name
&_main_else49   #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
02  # st_other (hidden)
0100    # st_shndx

%ELF_str__main_loop54>ELF_str   # st_name
&_main_loop54   #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
02  # st_other (hidden)
0100    # st_shndx

%ELF_str__main_else55>ELF_str   # st_name
&_main_else55   #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
02  # st_other (hidden)
0100    # st_shndx

%ELF_str__main_loop_end54>ELF_str   # st_name
&_main_loop_end54   #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
02  # st_other (hidden)
0100    # st_shndx

%ELF_str__main_else_end49>ELF_str   # st_name
&_main_else_end49   #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
02  # st_other (hidden)
0100    # st_shndx

%ELF_str__main_else_end46>ELF_str   # st_name
&_main_else_end46   #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
02  # st_other (hidden)
0100    # st_shndx

%ELF_str__main_else_end35>ELF_str   # st_name
&_main_else_end35   #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
02  # st_other (hidden)
0100    # st_shndx

%ELF_str__main_else_end30>ELF_str   # st_name
&_main_else_end30   #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
02  # st_other (hidden)
0100    # st_shndx

%ELF_str__main_loop_end25>ELF_str   # st_name
&_main_loop_end25   #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
02  # st_other (hidden)
0100    # st_shndx

%ELF_str__main_loop56>ELF_str   # st_name
&_main_loop56   #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
02  # st_other (hidden)
0100    # st_shndx

%ELF_str__main_else57>ELF_str   # st_name
&_main_else57   #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
02  # st_other (hidden)
0100    # st_shndx

%ELF_str__main_else58>ELF_str   # st_name
&_main_else58   #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
02  # st_other (hidden)
0100    # st_shndx

%ELF_str__main_else_end58>ELF_str   # st_name
&_main_else_end58   #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
02  # st_other (hidden)
0100    # st_shndx

%ELF_str__main_loop_end56>ELF_str   # st_name
&_main_loop_end56   #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
02  # st_other (hidden)
0100    # st_shndx

%ELF_str__main_else_end11>ELF_str   # st_name
&_main_else_end11   #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
02  # st_other (hidden)
0100    # st_shndx

%ELF_str__main_loop_end9>ELF_str    # st_name
&_main_loop_end9    #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
02  # st_other (hidden)
0100    # st_shndx

%ELF_str__main_loop_end6>ELF_str    # st_name
&_main_loop_end6    #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
02  # st_other (hidden)
0100    # st_shndx

%ELF_str_f___init_globals__>ELF_str # st_name
&f___init_globals__ #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
00  # st_other (default)
0100    # st_shndx

%ELF_str_ELF_data>ELF_str   # st_name
&ELF_data   #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
00  # st_other (default)
0100    # st_shndx

%ELF_str_SYS_MALLOC>ELF_str # st_name
&SYS_MALLOC #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
00  # st_other (default)
0100    # st_shndx

%ELF_str_string_0>ELF_str   # st_name
&string_0   #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
00  # st_other (default)
0100    # st_shndx

%ELF_str_string_1>ELF_str   # st_name
&string_1   #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
00  # st_other (default)
0100    # st_shndx

%ELF_str_string_2>ELF_str   # st_name
&string_2   #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
00  # st_other (default)
0100    # st_shndx

%ELF_str_string_3>ELF_str   # st_name
&string_3   #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
00  # st_other (default)
0100    # st_shndx

%ELF_str_string_4>ELF_str   # st_name
&string_4   #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
00  # st_other (default)
0100    # st_shndx

%ELF_str_string_5>ELF_str   # st_name
&string_5   #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
00  # st_other (default)
0100    # st_shndx

%ELF_str_string_6>ELF_str   # st_name
&string_6   #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
00  # st_other (default)
0100    # st_shndx

%ELF_str_string_7>ELF_str   # st_name
&string_7   #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
00  # st_other (default)
0100    # st_shndx

%ELF_str_string_8>ELF_str   # st_name
&string_8   #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
00  # st_other (default)
0100    # st_shndx

%ELF_str_string_9>ELF_str   # st_name
&string_9   #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
00  # st_other (default)
0100    # st_shndx

%ELF_str_string_10>ELF_str  # st_name
&string_10  #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
00  # st_other (default)
0100    # st_shndx

%ELF_str_string_11>ELF_str  # st_name
&string_11  #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
00  # st_other (default)
0100    # st_shndx

%ELF_str_string_12>ELF_str  # st_name
&string_12  #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
00  # st_other (default)
0100    # st_shndx

%ELF_str_string_13>ELF_str  # st_name
&string_13  #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
00  # st_other (default)
0100    # st_shndx

%ELF_str_string_14>ELF_str  # st_name
&string_14  #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
00  # st_other (default)
0100    # st_shndx

%ELF_str_string_15>ELF_str  # st_name
&string_15  #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
00  # st_other (default)
0100    # st_shndx

%ELF_str_string_16>ELF_str  # st_name
&string_16  #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
00  # st_other (default)
0100    # st_shndx

%ELF_str_string_17>ELF_str  # st_name
&string_17  #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
00  # st_other (default)
0100    # st_shndx

%ELF_str_string_18>ELF_str  # st_name
&string_18  #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
00  # st_other (default)
0100    # st_shndx

%ELF_str_string_19>ELF_str  # st_name
&string_19  #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
00  # st_other (default)
0100    # st_shndx

%ELF_str_string_20>ELF_str  # st_name
&string_20  #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
00  # st_other (default)
0100    # st_shndx

%ELF_str_string_21>ELF_str  # st_name
&string_21  #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
00  # st_other (default)
0100    # st_shndx

%ELF_str_g___sys_stdin>ELF_str  # st_name
&g___sys_stdin  #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
00  # st_other (default)
0100    # st_shndx

%ELF_str_g___sys_stdout>ELF_str # st_name
&g___sys_stdout #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
00  # st_other (default)
0100    # st_shndx

%ELF_str_g___sys_stderr>ELF_str # st_name
&g___sys_stderr #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
00  # st_other (default)
0100    # st_shndx

%ELF_str_g_stdin>ELF_str    # st_name
&g_stdin    #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
00  # st_other (default)
0100    # st_shndx

%ELF_str_g_stdout>ELF_str   # st_name
&g_stdout   #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
00  # st_other (default)
0100    # st_shndx

%ELF_str_g_stderr>ELF_str   # st_name
&g_stderr   #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
00  # st_other (default)
0100    # st_shndx

%ELF_str_g_errno>ELF_str    # st_name
&g_errno    #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
00  # st_other (default)
0100    # st_shndx

%ELF_str_g_LINE_MACRO_OUTPUT_FORMAT_GCC>ELF_str # st_name
&g_LINE_MACRO_OUTPUT_FORMAT_GCC #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
00  # st_other (default)
0100    # st_shndx

%ELF_str_g_LINE_MACRO_OUTPUT_FORMAT_NONE>ELF_str    # st_name
&g_LINE_MACRO_OUTPUT_FORMAT_NONE    #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
00  # st_other (default)
0100    # st_shndx

%ELF_str_g_LINE_MACRO_OUTPUT_FORMAT_STD>ELF_str # st_name
&g_LINE_MACRO_OUTPUT_FORMAT_STD #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
00  # st_other (default)
0100    # st_shndx

%ELF_str_g_LINE_MACRO_OUTPUT_FORMAT_P10>ELF_str # st_name
&g_LINE_MACRO_OUTPUT_FORMAT_P10 #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
00  # st_other (default)
0100    # st_shndx

%ELF_str_g__sys_env>ELF_str # st_name
&g__sys_env #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
00  # st_other (default)
0100    # st_shndx

%ELF_str_g_defines>ELF_str  # st_name
&g_defines  #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
00  # st_other (default)
0100    # st_shndx

%ELF_str_static_0_line>ELF_str  # st_name
&static_0_line  #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
00  # st_other (default)
0100    # st_shndx

%ELF_str_ELF_end>ELF_str    # st_name
&ELF_end    #st_value
00000000    # st_size (unknown size)
02  # st_info (FUNC)
00  # st_other (default)
0100    # st_shndx

# END Generated symbol table

:ELF_end

File /x86/stack_c_s.M1

Source file is 'src/stack_c_s.M1'.
No URL
DEFINE pop_eax 58
DEFINE pop_ebx 5B
DEFINE pop_ecx 59
DEFINE pop_edx 5A
DEFINE pop_edi 5F
DEFINE push_eax 50
DEFINE push_ebx 53
DEFINE push_edi 57
DEFINE mov_eax, B8
DEFINE mov_ebx, BB
DEFINE mov_edx, BA
DEFINE mov_eax,[DWORD] 8B05
DEFINE mov_ebx,[DWORD] 8B1D
DEFINE mov_eax,ebx 89D8
DEFINE mov_eax,edx 89D0
DEFINE mov_edx,eax 89C2
DEFINE mov_ebx,eax 89C3
DEFINE mov_ebx,esp 89E3
DEFINE mov_ecx,eax 89C1
DEFINE mov_ebp,eax 89C5
DEFINE mov_al,[eax] 8A00
DEFINE mov_ax,[eax] 668B00
DEFINE mov_eax,[eax] 8B00
DEFINE mov_ebx,[ebp] 8B5D00
DEFINE mov_eax,[ebp+DWORD] 8B85 
DEFINE lea_eax,[ebp+DWORD] 8D85
DEFINE lea_ecx,[ebp+DWORD] 8D8D
DEFINE mov_[DWORD],eax A3
DEFINE mov_[DWORD],ebx 891D
DEFINE mov_[ecx],eax 8901
DEFINE mov_[eax],ebx 8918
DEFINE mov_[ebx],al 8803
DEFINE mov_[ebx],ax 668903
DEFINE mov_[ebx],eax 8903
DEFINE mov_[ebp],eax 894500
DEFINE mov_[eax],bl 8818
DEFINE add_eax, 81C0
DEFINE add_eax,ebx 01D8
DEFINE add_ebx,eax 01C3
DEFINE sub_ebx,eax 29C3
DEFINE shl_eax,cl D3E0
DEFINE shr_eax,cl D3E8
DEFINE cdq 99
DEFINE mul_ebx F7E3
DEFINE div_ebx F7F3
DEFINE idiv_ebx F7FB
DEFINE and_eax, 25
DEFINE and_eax,ebx 21D8
DEFINE or_eax,ebx 09D8
DEFINE xor_eax,ebx 31D8
DEFINE not_eax F7D0
DEFINE add_ebp, 81C5
DEFINE sub_ebp, 81ED
DEFINE cmp_eax_ebx 39C3
DEFINE seta_al 0F97C0
DEFINE setae_al 0F93C0
DEFINE setb_al 0F92C0
DEFINE setbe_al 0F96C0
DEFINE sete_al 0F94C0
DEFINE setle_al 0F9EC0
DEFINE setl_al 0F9CC0
DEFINE setge_al 0F9DC0
DEFINE setg_al 0F9FC0
DEFINE setne_al 0F95C0
DEFINE movsx_eax,al 0FBEC0
DEFINE movzx_eax,al 0FB6C0
DEFINE test_eax,eax 85C0
DEFINE jmp E9
DEFINE je 0F84
DEFINE jne 0F85
DEFINE jle 0F8E
DEFINE call E8
DEFINE call_eax FFD0
DEFINE ret C3
DEFINE int_80 CD80
DEFINE NULL 00000000

:ELF_text

:_start
    mov_eax, %45                                # the Syscall # for SYS_BRK
    mov_ebx, %0                                 # Get current brk
    int_80                                      # Let the kernel do the work
    mov_[DWORD],eax &SYS_MALLOC                 # Set our malloc pointer

    # allocate memory for the second stack
    mov_eax, %100000
    push_eax                                    # (sys_malloc assums address)
    call %f_sys_malloc
    mov_ebp,eax
    
    # setup argc and argv for the main function
    mov_edx,eax
    pop_eax
    mov_ebx,esp
    push_eax
    push_ebx
    mov_eax,edx

    #call main
    call %f_main
    
    # program completed Successfully
    mov_ebx,eax                                 # All is well
    mov_eax, %1                                 # put the exit syscall number in eax
    int_80                                      # Call it a good day

# These sys_ function follow the same calling conventions
# as all the other functions. To access the arguments on the stack
# the return address is stored in the edi address (which is only possible
# because these functions do not call other function) and the function
# address (which is stored in the eax register, the top of the stack)
# needs to be popped as well.

:f_sys_int80
    pop_edi               # Save return address from the stack
    pop_edx               # Get the arguments from the stack
    pop_ecx
    pop_ebx
    pop_eax
    int_80                # call the Kernel
    push_edi              # restore return address to the stack
    ret

:f_sys_malloc
    pop_edi
    pop_eax
    mov_ebx,[DWORD] &SYS_MALLOC                 # Using the current pointer
    add_ebx,eax                                 # Request the number of desired bytes
    mov_eax, %45                                # the Syscall # for SYS_BRK
    int_80                                      # call the Kernel
    mov_eax,[DWORD] &SYS_MALLOC                 # Return pointer
    mov_[DWORD],ebx &SYS_MALLOC                 # Update pointer
    push_edi
    ret
:SYS_MALLOC
    NULL

    

:f_exit
    pop_eax
    mov_[ebp],eax
    pop_eax
    push_eax              # result (local)
    lea_eax,[ebp+DWORD] %4
    pop_ebx               # =:
    mov_[eax],ebx
    pop_eax
# stdlib.c 8
    push_eax              # 1
    mov_eax, %1
    push_eax              # result (local)
    lea_eax,[ebp+DWORD] %4
    mov_eax,[eax]         # ?
    push_eax              # 0
    mov_eax, %0
    push_eax              # 0
    mov_eax, %0
    push_eax              # sys_int80 (function)
    mov_eax, &f_sys_int80
    add_ebp, %8         # ()
    call_eax
    sub_ebp, %8
    pop_eax               # ;
    push_eax              # 0
    mov_eax, %0
    mov_ebx,[ebp]         # return
    push_ebx
    ret

:f_memcpy
    pop_eax
    mov_[ebp],eax
    pop_eax
    push_eax              # n (local)
    lea_eax,[ebp+DWORD] %4
    pop_ebx               # =:
    mov_[eax],ebx
    pop_eax
    push_eax              # src (local)
    lea_eax,[ebp+DWORD] %8
    pop_ebx               # =:
    mov_[eax],ebx
    pop_eax
    push_eax              # dest (local)
    lea_eax,[ebp+DWORD] %12
    pop_ebx               # =:
    mov_[eax],ebx
    pop_eax
    push_eax              # d (local)
    lea_eax,[ebp+DWORD] %16
    push_eax              # dest (local)
    lea_eax,[ebp+DWORD] %12
    mov_eax,[eax]         # ?
    pop_ebx               # =
    mov_[ebx],eax
    pop_eax               # ;
    push_eax              # s (local)
    lea_eax,[ebp+DWORD] %20
    push_eax              # src (local)
    lea_eax,[ebp+DWORD] %8
    mov_eax,[eax]         # ?
    pop_ebx               # =
    mov_[ebx],eax
    pop_eax               # ;
# stdlib.c 34
    push_eax              # i (local)
    lea_eax,[ebp+DWORD] %24
    push_eax              # 0
    mov_eax, %0
    pop_ebx               # =
    mov_[ebx],eax
    pop_eax               # ;
:_memcpy_loop1
    push_eax              # i (local)
    lea_eax,[ebp+DWORD] %24
    mov_eax,[eax]         # ?
    push_eax              # n (local)
    lea_eax,[ebp+DWORD] %4
    mov_eax,[eax]         # ?
    pop_ebx               # <s
    cmp_eax_ebx
    setl_al
    movzx_eax,al
    test_eax,eax          # !
    sete_al
    movzx_eax,al
    test_eax,eax          # if
    pop_eax
    je %_memcpy_else2
    jmp %_memcpy_loop_end1
# stdlib.c 35
:_memcpy_else2 # no else
    push_eax              # d (local)
    lea_eax,[ebp+DWORD] %16
    mov_eax,[eax]         # ?
    push_eax              # i (local)
    lea_eax,[ebp+DWORD] %24
    mov_eax,[eax]         # ?
    pop_ebx               # +
    add_eax,ebx
    push_eax              # s (local)
    lea_eax,[ebp+DWORD] %20
    mov_eax,[eax]         # ?
    push_eax              # i (local)
    lea_eax,[ebp+DWORD] %24
    mov_eax,[eax]         # ?
    pop_ebx               # +
    add_eax,ebx
    mov_al,[eax]          # ?1
    movzx_eax,al
    movsx_eax,al          # char
    pop_ebx               # =1
    mov_[ebx],al
    pop_eax               # ;
    push_eax              # i (local)
    lea_eax,[ebp+DWORD] %24
    push_eax              # $ (dup)
    mov_eax,[eax]         # ?
    push_eax              # 1
    mov_eax, %1
    pop_ebx               # +
    add_eax,ebx
    pop_ebx               # =
    mov_[ebx],eax
    push_eax              # 1
    mov_eax, %1
    pop_ebx               # -
    sub_ebx,eax
    mov_eax,ebx
    pop_eax               # ;
    jmp %_memcpy_loop1
:_memcpy_loop_end1
# stdlib.c 36
    push_eax              # dest (local)
    lea_eax,[ebp+DWORD] %12
    mov_eax,[eax]         # ?
    mov_ebx,[ebp]         # return
    push_ebx
    ret
    push_eax              # 0
    mov_eax, %0
    mov_ebx,[ebp]         # return
    push_ebx
    ret

:f_memmove
    pop_eax
    mov_[ebp],eax
    pop_eax
    push_eax              # n (local)
    lea_eax,[ebp+DWORD] %4
    pop_ebx               # =:
    mov_[eax],ebx
    pop_eax
    push_eax              # src (local)
    lea_eax,[ebp+DWORD] %8
    pop_ebx               # =:
    mov_[eax],ebx
    pop_eax
    push_eax              # dest (local)
    lea_eax,[ebp+DWORD] %12
    pop_ebx               # =:
    mov_[eax],ebx
    pop_eax
    push_eax              # d (local)
    lea_eax,[ebp+DWORD] %16
    push_eax              # dest (local)
    lea_eax,[ebp+DWORD] %12
    mov_eax,[eax]         # ?
    pop_ebx               # =
    mov_[ebx],eax
    pop_eax               # ;
    push_eax              # s (local)
    lea_eax,[ebp+DWORD] %20
    push_eax              # src (local)
    lea_eax,[ebp+DWORD] %8
    mov_eax,[eax]         # ?
    pop_ebx               # =
    mov_[ebx],eax
    pop_eax               # ;
# stdlib.c 43
    push_eax              # 1
    mov_eax, %1
    test_eax,eax          # if
    pop_eax
    je %_memmove_else1
# stdlib.c 44
# stdlib.c 45
    push_eax              # i (local)
    lea_eax,[ebp+DWORD] %24
    push_eax              # 0
    mov_eax, %0
    pop_ebx               # =
    mov_[ebx],eax
    pop_eax               # ;
:_memmove_loop2
    push_eax              # i (local)
    lea_eax,[ebp+DWORD] %24
    mov_eax,[eax]         # ?
    push_eax              # n (local)
    lea_eax,[ebp+DWORD] %4
    mov_eax,[eax]         # ?
    pop_ebx               # <
    cmp_eax_ebx
    setb_al
    movzx_eax,al
    test_eax,eax          # !
    sete_al
    movzx_eax,al
    test_eax,eax          # if
    pop_eax
    je %_memmove_else3
    jmp %_memmove_loop_end2
# stdlib.c 46
:_memmove_else3 # no else
    push_eax              # d (local)
    lea_eax,[ebp+DWORD] %16
    mov_eax,[eax]         # ?
    push_eax              # i (local)
    lea_eax,[ebp+DWORD] %24
    mov_eax,[eax]         # ?
    pop_ebx               # +
    add_eax,ebx
    push_eax              # s (local)
    lea_eax,[ebp+DWORD] %20
    mov_eax,[eax]         # ?
    push_eax              # i (local)
    lea_eax,[ebp+DWORD] %24
    mov_eax,[eax]         # ?
    pop_ebx               # +
    add_eax,ebx
    mov_al,[eax]          # ?1
    movzx_eax,al
    movsx_eax,al          # char
    pop_ebx               # =1
    mov_[ebx],al
    pop_eax               # ;
    push_eax              # i (local)
    lea_eax,[ebp+DWORD] %24
    push_eax              # $ (dup)
    mov_eax,[eax]         # ?
    push_eax              # 1
    mov_eax, %1
    pop_ebx               # +
    add_eax,ebx
    pop_ebx               # =
    mov_[ebx],eax
    push_eax              # 1
    mov_eax, %1
    pop_ebx               # -
    sub_ebx,eax
    mov_eax,ebx
    pop_eax               # ;
    jmp %_memmove_loop2
:_memmove_loop_end2
    jmp %_memmove_else_end1
:_memmove_else1
# stdlib.c 48
    push_eax              # src (local)
    lea_eax,[ebp+DWORD] %8
    mov_eax,[eax]         # ?
    push_eax              # dest (local)
    lea_eax,[ebp+DWORD] %12
    mov_eax,[eax]         # ?
    pop_ebx               # <
    cmp_eax_ebx
    setb_al
    movzx_eax,al
    test_eax,eax          # if
    pop_eax
    je %_memmove_else4
# stdlib.c 49
    push_eax              # j (local)
    lea_eax,[ebp+DWORD] %24
    push_eax              # n (local)
    lea_eax,[ebp+DWORD] %4
    mov_eax,[eax]         # ?
    push_eax              # 1
    mov_eax, %1
    pop_ebx               # -
    sub_ebx,eax
    mov_eax,ebx
    pop_ebx               # =
    mov_[ebx],eax
    pop_eax               # ;
# stdlib.c 51
    push_eax              # i (local)
    lea_eax,[ebp+DWORD] %28
    push_eax              # 0
    mov_eax, %0
    pop_ebx               # =
    mov_[ebx],eax
    pop_eax               # ;
:_memmove_loop5
    push_eax              # i (local)
    lea_eax,[ebp+DWORD] %28
    mov_eax,[eax]         # ?
    push_eax              # n (local)
    lea_eax,[ebp+DWORD] %4
    mov_eax,[eax]         # ?
    pop_ebx               # <
    cmp_eax_ebx
    setb_al
    movzx_eax,al
    test_eax,eax          # !
    sete_al
    movzx_eax,al
    test_eax,eax          # if
    pop_eax
    je %_memmove_else6
    jmp %_memmove_loop_end5
# stdlib.c 52
:_memmove_else6 # no else
    push_eax              # d (local)
    lea_eax,[ebp+DWORD] %16
    mov_eax,[eax]         # ?
    push_eax              # j (local)
    lea_eax,[ebp+DWORD] %24
    mov_eax,[eax]         # ?
    pop_ebx               # +
    add_eax,ebx
    push_eax              # s (local)
    lea_eax,[ebp+DWORD] %20
    mov_eax,[eax]         # ?
    push_eax              # j (local)
    lea_eax,[ebp+DWORD] %24
    mov_eax,[eax]         # ?
    pop_ebx               # +
    add_eax,ebx
    mov_al,[eax]          # ?1
    movzx_eax,al
    movsx_eax,al          # char
    pop_ebx               # =1
    mov_[ebx],al
    pop_eax               # ;
    push_eax              # i (local)
    lea_eax,[ebp+DWORD] %28
    push_eax              # $ (dup)
    mov_eax,[eax]         # ?
    push_eax              # 1
    mov_eax, %1
    pop_ebx               # +
    add_eax,ebx
    pop_ebx               # =
    mov_[ebx],eax
    push_eax              # 1
    mov_eax, %1
    pop_ebx               # -
    sub_ebx,eax
    mov_eax,ebx
    pop_eax               # ;
    push_eax              # j (local)
    lea_eax,[ebp+DWORD] %24
    push_eax              # $ (dup)
    mov_eax,[eax]         # ?
    push_eax              # 1
    mov_eax, %1
    pop_ebx               # -
    sub_ebx,eax
    mov_eax,ebx
    pop_ebx               # =
    mov_[ebx],eax
    push_eax              # 1
    mov_eax, %1
    pop_ebx               # +
    add_eax,ebx
    pop_eax               # ;
    jmp %_memmove_loop5
:_memmove_loop_end5
:_memmove_else4 # no else
:_memmove_else_end1
# stdlib.c 54
    push_eax              # dest (local)
    lea_eax,[ebp+DWORD] %12
    mov_eax,[eax]         # ?
    mov_ebx,[ebp]         # return
    push_ebx
    ret
    push_eax              # 0
    mov_eax, %0
    mov_ebx,[ebp]         # return
    push_ebx
    ret

:f_memset
    pop_eax
    mov_[ebp],eax
    pop_eax
    push_eax              # n (local)
    lea_eax,[ebp+DWORD] %4
    pop_ebx               # =:
    mov_[eax],ebx
    pop_eax
    push_eax              # c (local)
    lea_eax,[ebp+DWORD] %8
    pop_ebx               # =:
    mov_[eax],ebx
    pop_eax
    push_eax              # s (local)
    lea_eax,[ebp+DWORD] %12
    pop_ebx               # =:
    mov_[eax],ebx
    pop_eax
    push_eax              # p (local)
    lea_eax,[ebp+DWORD] %16
    push_eax              # s (local)
    lea_eax,[ebp+DWORD] %12
    mov_eax,[eax]         # ?
    pop_ebx               # =
    mov_[ebx],eax
    pop_eax               # ;
# stdlib.c 60
    push_eax              # i (local)
    lea_eax,[ebp+DWORD] %20
    push_eax              # 0
    mov_eax, %0
    pop_ebx               # =
    mov_[ebx],eax
    pop_eax               # ;
:_memset_loop1
    push_eax              # i (local)
    lea_eax,[ebp+DWORD] %20
    mov_eax,[eax]         # ?
    push_eax              # n (local)
    lea_eax,[ebp+DWORD] %4
    mov_eax,[eax]         # ?
    pop_ebx               # <
    cmp_eax_ebx
    setb_al
    movzx_eax,al
    test_eax,eax          # !
    sete_al
    movzx_eax,al
    test_eax,eax          # if
    pop_eax
    je %_memset_else2
    jmp %_memset_loop_end1
# stdlib.c 61
:_memset_else2 # no else
    push_eax              # p (local)
    lea_eax,[ebp+DWORD] %16
    mov_eax,[eax]         # ?
    push_eax              # i (local)
    lea_eax,[ebp+DWORD] %20
    mov_eax,[eax]         # ?
    pop_ebx               # +
    add_eax,ebx
    push_eax              # c (local)
    lea_eax,[ebp+DWORD] %8
    mov_eax,[eax]         # ?
    pop_ebx               # =1
    mov_[ebx],al
    pop_eax               # ;
    push_eax              # i (local)
    lea_eax,[ebp+DWORD] %20
    push_eax              # $ (dup)
    mov_eax,[eax]         # ?
    push_eax              # 1
    mov_eax, %1
    pop_ebx               # +
    add_eax,ebx
    pop_ebx               # =
    mov_[ebx],eax
    push_eax              # 1
    mov_eax, %1
    pop_ebx               # -
    sub_ebx,eax
    mov_eax,ebx
    pop_eax               # ;
    jmp %_memset_loop1
:_memset_loop_end1
# stdlib.c 62
    push_eax              # s (local)
    lea_eax,[ebp+DWORD] %12
    mov_eax,[eax]         # ?
    mov_ebx,[ebp]         # return
    push_ebx
    ret
    push_eax              # 0
    mov_eax, %0
    mov_ebx,[ebp]         # return
    push_ebx
    ret

:f_memcmp
    pop_eax
    mov_[ebp],eax
    pop_eax
    push_eax              # n (local)
    lea_eax,[ebp+DWORD] %4
    pop_ebx               # =:
    mov_[eax],ebx
    pop_eax
    push_eax              # s2 (local)
    lea_eax,[ebp+DWORD] %8
    pop_ebx               # =:
    mov_[eax],ebx
    pop_eax
    push_eax              # s1 (local)
    lea_eax,[ebp+DWORD] %12
    pop_ebx               # =:
    mov_[eax],ebx
    pop_eax
    push_eax              # p1 (local)
    lea_eax,[ebp+DWORD] %16
    push_eax              # s1 (local)
    lea_eax,[ebp+DWORD] %12
    mov_eax,[eax]         # ?
    pop_ebx               # =
    mov_[ebx],eax
    pop_eax               # ;
    push_eax              # p2 (local)
    lea_eax,[ebp+DWORD] %20
    push_eax              # s2 (local)
    lea_eax,[ebp+DWORD] %8
    mov_eax,[eax]         # ?
    pop_ebx               # =
    mov_[ebx],eax
    pop_eax               # ;
# stdlib.c 69
    push_eax              # i (local)
    lea_eax,[ebp+DWORD] %24
    push_eax              # 0
    mov_eax, %0
    pop_ebx               # =
    mov_[ebx],eax
    pop_eax               # ;
:_memcmp_loop1
    push_eax              # i (local)
    lea_eax,[ebp+DWORD] %24
    mov_eax,[eax]         # ?
    push_eax              # n (local)
    lea_eax,[ebp+DWORD] %4
    mov_eax,[eax]         # ?
    pop_ebx               # <
    cmp_eax_ebx
    setb_al
    movzx_eax,al
    test_eax,eax          # !
    sete_al
    movzx_eax,al
    test_eax,eax          # if
    pop_eax
    je %_memcmp_else2
    jmp %_memcmp_loop_end1
# stdlib.c 70
:_memcmp_else2 # no else
    push_eax              # result (local)
    lea_eax,[ebp+DWORD] %28
    push_eax              # p1 (local)
    lea_eax,[ebp+DWORD] %16
    mov_eax,[eax]         # ?
    mov_al,[eax]          # ?1
    movzx_eax,al
    movsx_eax,al          # char
    push_eax              # p2 (local)
    lea_eax,[ebp+DWORD] %20
    mov_eax,[eax]         # ?
    mov_al,[eax]          # ?1
    movzx_eax,al
    movsx_eax,al          # char
    pop_ebx               # -
    sub_ebx,eax
    mov_eax,ebx
    pop_ebx               # =
    mov_[ebx],eax
    pop_eax               # ;
# stdlib.c 72
    push_eax              # result (local)
    lea_eax,[ebp+DWORD] %28
    mov_eax,[eax]         # ?
    push_eax              # 0
    mov_eax, %0
    pop_ebx               # !=
    cmp_eax_ebx
    setne_al
    movzx_eax,al
    test_eax,eax          # if
    pop_eax
    je %_memcmp_else3
# stdlib.c 73
    push_eax              # result (local)
    lea_eax,[ebp+DWORD] %28
    mov_eax,[eax]         # ?
    mov_ebx,[ebp]         # return
    push_ebx
    ret
:_memcmp_else3 # no else
    push_eax              # i (local)
    lea_eax,[ebp+DWORD] %24
    push_eax              # $ (dup)
    mov_eax,[eax]         # ?
    push_eax              # 1
    mov_eax, %1
    pop_ebx               # +
    add_eax,ebx
    pop_ebx               # =
    mov_[ebx],eax
    push_eax              # 1
    mov_eax, %1
    pop_ebx               # -
    sub_ebx,eax
    mov_eax,ebx
    pop_eax               # ;
    push_eax              # p1 (local)
    lea_eax,[ebp+DWORD] %16
    push_eax              # $ (dup)
    mov_eax,[eax]         # ?
    push_eax              # 1
    mov_eax, %1
    pop_ebx               # +
    add_eax,ebx
    pop_ebx               # =
    mov_[ebx],eax
    push_eax              # 1
    mov_eax, %1
    pop_ebx               # -
    sub_ebx,eax
    mov_eax,ebx
    pop_eax               # ;
    push_eax              # p2 (local)
    lea_eax,[ebp+DWORD] %20
    push_eax              # $ (dup)
    mov_eax,[eax]         # ?
    push_eax              # 1
    mov_eax, %1
    pop_ebx               # +
    add_eax,ebx
    pop_ebx               # =
    mov_[ebx],eax
    push_eax              # 1
    mov_eax, %1
    pop_ebx               # -
    sub_ebx,eax
    mov_eax,ebx
    pop_eax               # ;
    jmp %_memcmp_loop1
:_memcmp_loop_end1
# stdlib.c 75
    push_eax              # 0
    mov_eax, %0
    mov_ebx,[ebp]         # return
    push_ebx
    ret
    push_eax              # 0
    mov_eax, %0
    mov_ebx,[ebp]         # return
    push_ebx
    ret

:f_strlen
    pop_eax
    mov_[ebp],eax
    pop_eax
    push_eax              # s (local)
    lea_eax,[ebp+DWORD] %4
    pop_ebx               # =:
    mov_[eax],ebx
    pop_eax
    push_eax              # len (local)
    lea_eax,[ebp+DWORD] %8
    push_eax              # 0
    mov_eax, %0
    pop_ebx               # =
    mov_[ebx],eax
    pop_eax               # ;
# stdlib.c 81
:_strlen_loop1
    push_eax              # s (local)
    lea_eax,[ebp+DWORD] %4
    mov_eax,[eax]         # ?
    mov_al,[eax]          # ?1
    movzx_eax,al
    movsx_eax,al          # char
    push_eax              # 0
    mov_eax, %0
    pop_ebx               # !=
    cmp_eax_ebx
    setne_al
    movzx_eax,al
    test_eax,eax          # !
    sete_al
    movzx_eax,al
    test_eax,eax          # if
    pop_eax
    je %_strlen_else2
    jmp %_strlen_loop_end1
# stdlib.c 82
:_strlen_else2 # no else
    push_eax              # len (local)
    lea_eax,[ebp+DWORD] %8
    push_eax              # $ (dup)
    mov_eax,[eax]         # ?
    push_eax              # 1
    mov_eax, %1
    pop_ebx               # +
    add_eax,ebx
    pop_ebx               # =
    mov_[ebx],eax
    push_eax              # 1
    mov_eax, %1
    pop_ebx               # -
    sub_ebx,eax
    mov_eax,ebx
    pop_eax               # ;
    push_eax              # s (local)
    lea_eax,[ebp+DWORD] %4
    push_eax              # $ (dup)
    mov_eax,[eax]         # ?
    push_eax              # 1
    mov_eax, %1
    pop_ebx               # +
    add_eax,ebx
    pop_ebx               # =
    mov_[ebx],eax
    push_eax              # 1
    mov_eax, %1
    pop_ebx               # -
    sub_ebx,eax
    mov_eax,ebx
    pop_eax               # ;
    jmp %_strlen_loop1
:_strlen_loop_end1
# stdlib.c 83
    push_eax              # len (local)
    lea_eax,[ebp+DWORD] %8
    mov_eax,[eax]         # ?
    mov_ebx,[ebp]         # return
    push_ebx
    ret
    push_eax              # 0
    mov_eax, %0
    mov_ebx,[ebp]         # return
    push_ebx
    ret

:f_strcpy
    pop_eax
    mov_[ebp],eax
    pop_eax
    push_eax              # src (local)
    lea_eax,[ebp+DWORD] %4
    pop_ebx               # =:
    mov_[eax],ebx
    pop_eax
    push_eax              # dest (local)
    lea_eax,[ebp+DWORD] %8
    pop_ebx               # =:
    mov_[eax],ebx
    pop_eax
    push_eax              # result (local)
    lea_eax,[ebp+DWORD] %12
    push_eax              # dest (local)
    lea_eax,[ebp+DWORD] %8
    mov_eax,[eax]         # ?
    pop_ebx               # =
    mov_[ebx],eax
    pop_eax               # ;
# stdlib.c 89
:_strcpy_loop1
    push_eax              # src (local)
    lea_eax,[ebp+DWORD] %4
    mov_eax,[eax]         # ?
    mov_al,[eax]          # ?1
    movzx_eax,al
    movsx_eax,al          # char
    push_eax              # 0
    mov_eax, %0
    pop_ebx               # !=
    cmp_eax_ebx
    setne_al
    movzx_eax,al
    test_eax,eax          # !
    sete_al
    movzx_eax,al
    test_eax,eax          # if
    pop_eax
    je %_strcpy_else2
    jmp %_strcpy_loop_end1
# stdlib.c 90
:_strcpy_else2 # no else
    push_eax              # dest (local)
    lea_eax,[ebp+DWORD] %8
    push_eax              # $ (dup)
    mov_eax,[eax]         # ?
    push_eax              # 1
    mov_eax, %1
    pop_ebx               # +
    add_eax,ebx
    pop_ebx               # =
    mov_[ebx],eax
    push_eax              # 1
    mov_eax, %1
    pop_ebx               # -
    sub_ebx,eax
    mov_eax,ebx
    push_eax              # src (local)
    lea_eax,[ebp+DWORD] %4
    push_eax              # $ (dup)
    mov_eax,[eax]         # ?
    push_eax              # 1
    mov_eax, %1
    pop_ebx               # +
    add_eax,ebx
    pop_ebx               # =
    mov_[ebx],eax
    push_eax              # 1
    mov_eax, %1
    pop_ebx               # -
    sub_ebx,eax
    mov_eax,ebx
    mov_al,[eax]          # ?1
    movzx_eax,al
    movsx_eax,al          # char
    pop_ebx               # =1
    mov_[ebx],al
    pop_eax               # ;
    jmp %_strcpy_loop1
:_strcpy_loop_end1
# stdlib.c 91
    push_eax              # dest (local)
    lea_eax,[ebp+DWORD] %8
    mov_eax,[eax]         # ?
    push_eax              # 0
    mov_eax, %0
    pop_ebx               # =1
    mov_[ebx],al
    pop_eax               # ;
# stdlib.c 92
    push_eax              # result (local)
    lea_eax,[ebp+DWORD] %12
    mov_eax,[eax]         # ?
    mov_ebx,[ebp]         # return
    push_ebx
    ret
    push_eax              # 0
    mov_eax, %0
    mov_ebx,[ebp]         # return
    push_ebx
    ret

:f_strncpy
    pop_eax
    mov_[ebp],eax
    pop_eax
    push_eax              # n (local)
    lea_eax,[ebp+DWORD] %4
    pop_ebx               # =:
    mov_[eax],ebx
    pop_eax
    push_eax              # src (local)
    lea_eax,[ebp+DWORD] %8
    pop_ebx               # =:
    mov_[eax],ebx
    pop_eax
    push_eax              # dest (local)
    lea_eax,[ebp+DWORD] %12
    pop_ebx               # =:
    mov_[eax],ebx
    pop_eax
    push_eax              # d (local)
    lea_eax,[ebp+DWORD] %16
    push_eax              # dest (local)
    lea_eax,[ebp+DWORD] %12
    mov_eax,[eax]         # ?
    pop_ebx               # =
    mov_[ebx],eax
    pop_eax               # ;
    push_eax              # s (local)
    lea_eax,[ebp+DWORD] %20
    push_eax              # src (local)
    lea_eax,[ebp+DWORD] %8
    mov_eax,[eax]         # ?
    pop_ebx               # =
    mov_[ebx],eax
    pop_eax               # ;
# stdlib.c 99
    push_eax              # i (local)
    lea_eax,[ebp+DWORD] %24
    push_eax              # 0
    mov_eax, %0
    pop_ebx               # =
    mov_[ebx],eax
    pop_eax               # ;
:_strncpy_loop1
    push_eax              # i (local)
    lea_eax,[ebp+DWORD] %24
    mov_eax,[eax]         # ?
    push_eax              # n (local)
    lea_eax,[ebp+DWORD] %4
    mov_eax,[eax]         # ?
    pop_ebx               # <s
    cmp_eax_ebx
    setl_al
    movzx_eax,al
    test_eax,eax          # !
    sete_al
    movzx_eax,al
    test_eax,eax          # if
    pop_eax
    je %_strncpy_else2
    jmp %_strncpy_loop_end1
# stdlib.c 100
# stdlib.c 101
:_strncpy_else2 # no else
    push_eax              # d (local)
    lea_eax,[ebp+DWORD] %16
    mov_eax,[eax]         # ?
    push_eax              # i (local)
    lea_eax,[ebp+DWORD] %24
    mov_eax,[eax]         # ?
    pop_ebx               # +
    add_eax,ebx
    push_eax              # s (local)
    lea_eax,[ebp+DWORD] %20
    mov_eax,[eax]         # ?
    push_eax              # i (local)
    lea_eax,[ebp+DWORD] %24
    mov_eax,[eax]         # ?
    pop_ebx               # +
    add_eax,ebx
    mov_al,[eax]          # ?1
    movzx_eax,al
    movsx_eax,al          # char
    pop_ebx               # =1
    mov_[ebx],al
    pop_eax               # ;
# stdlib.c 102
    push_eax              # s (local)
    lea_eax,[ebp+DWORD] %20
    mov_eax,[eax]         # ?
    push_eax              # i (local)
    lea_eax,[ebp+DWORD] %24
    mov_eax,[eax]         # ?
    pop_ebx               # +
    add_eax,ebx
    mov_al,[eax]          # ?1
    movzx_eax,al
    movsx_eax,al          # char
    push_eax              # 0
    mov_eax, %0
    pop_ebx               # ==
    cmp_eax_ebx
    sete_al
    movzx_eax,al
    test_eax,eax          # if
    pop_eax
    je %_strncpy_else3
# stdlib.c 103
    jmp %_strncpy_loop_end1
:_strncpy_else3 # no else
    push_eax              # i (local)
    lea_eax,[ebp+DWORD] %24
    push_eax              # $ (dup)
    mov_eax,[eax]         # ?
    push_eax              # 1
    mov_eax, %1
    pop_ebx               # +
    add_eax,ebx
    pop_ebx               # =
    mov_[ebx],eax
    push_eax              # 1
    mov_eax, %1
    pop_ebx               # -
    sub_ebx,eax
    mov_eax,ebx
    pop_eax               # ;
    jmp %_strncpy_loop1
:_strncpy_loop_end1
# stdlib.c 105
    push_eax              # dest (local)
    lea_eax,[ebp+DWORD] %12
    mov_eax,[eax]         # ?
    mov_ebx,[ebp]         # return
    push_ebx
    ret
    push_eax              # 0
    mov_eax, %0
    mov_ebx,[ebp]         # return
    push_ebx
    ret

:f_strcat
    pop_eax
    mov_[ebp],eax
    pop_eax
    push_eax              # src (local)
    lea_eax,[ebp+DWORD] %4
    pop_ebx               # =:
    mov_[eax],ebx
    pop_eax
    push_eax              # dest (local)
    lea_eax,[ebp+DWORD] %8
    pop_ebx               # =:
    mov_[eax],ebx
    pop_eax
# stdlib.c 110
    push_eax              # dest (local)
    lea_eax,[ebp+DWORD] %8
    mov_eax,[eax]         # ?
    push_eax              # dest (local)
    lea_eax,[ebp+DWORD] %8
    mov_eax,[eax]         # ?
    push_eax              # strlen (function)
    mov_eax, &f_strlen
    add_ebp, %12         # ()
    call_eax
    sub_ebp, %12
    pop_ebx               # +
    add_eax,ebx
    push_eax              # src (local)
    lea_eax,[ebp+DWORD] %4
    mov_eax,[eax]         # ?
    push_eax              # strcpy (function)
    mov_eax, &f_strcpy
    add_ebp, %12         # ()
    call_eax
    sub_ebp, %12
    pop_eax               # ;
# stdlib.c 111
    push_eax              # dest (local)
    lea_eax,[ebp+DWORD] %8
    mov_eax,[eax]         # ?
    mov_ebx,[ebp]         # return
    push_ebx
    ret
    push_eax              # 0
    mov_eax, %0
    mov_ebx,[ebp]         # return
    push_ebx
    ret

:f_strchr
    pop_eax
    mov_[ebp],eax
    pop_eax
    push_eax              # c (local)
    lea_eax,[ebp+DWORD] %4
    pop_ebx               # =:
    mov_[eax],ebx
    pop_eax
    push_eax              # s (local)
    lea_eax,[ebp+DWORD] %8
    pop_ebx               # =:
    mov_[eax],ebx
    pop_eax
# stdlib.c 116
:_strchr_loop1
    push_eax              # s (local)
    lea_eax,[ebp+DWORD] %8
    mov_eax,[eax]         # ?
    mov_al,[eax]          # ?1
    movzx_eax,al
    movsx_eax,al          # char
    push_eax              # 0
    mov_eax, %0
    pop_ebx               # !=
    cmp_eax_ebx
    setne_al
    movzx_eax,al
    test_eax,eax          # !
    sete_al
    movzx_eax,al
    test_eax,eax          # if
    pop_eax
    je %_strchr_else2
    jmp %_strchr_loop_end1
# stdlib.c 117
:_strchr_else2 # no else
    push_eax              # s (local)
    lea_eax,[ebp+DWORD] %8
    mov_eax,[eax]         # ?
    mov_al,[eax]          # ?1
    movzx_eax,al
    movsx_eax,al          # char
    push_eax              # c (local)
    lea_eax,[ebp+DWORD] %4
    mov_eax,[eax]         # ?
    pop_ebx               # ==
    cmp_eax_ebx
    sete_al
    movzx_eax,al
    test_eax,eax          # if
    pop_eax
    je %_strchr_else3
# stdlib.c 118
    push_eax              # s (local)
    lea_eax,[ebp+DWORD] %8
    mov_eax,[eax]         # ?
    mov_ebx,[ebp]         # return
    push_ebx
    ret
:_strchr_else3 # no else
    push_eax              # s (local)
    lea_eax,[ebp+DWORD] %8
    push_eax              # $ (dup)
    mov_eax,[eax]         # ?
    push_eax              # 1
    mov_eax, %1
    pop_ebx               # +
    add_eax,ebx
    pop_ebx               # =
    mov_[ebx],eax
    push_eax              # 1
    mov_eax, %1
    pop_ebx               # -
    sub_ebx,eax
    mov_eax,ebx
    pop_eax               # ;
    jmp %_strchr_loop1
:_strchr_loop_end1
# stdlib.c 119
    push_eax              # c (local)
    lea_eax,[ebp+DWORD] %4
    mov_eax,[eax]         # ?
    push_eax              # 0
    mov_eax, %0
    pop_ebx               # ==
    cmp_eax_ebx
    sete_al
    movzx_eax,al
    test_eax,eax          # if
    pop_eax
    je %_strchr_else4
    push_eax              # s (local)
    lea_eax,[ebp+DWORD] %8
    mov_eax,[eax]         # ?
    jmp %_strchr_else_end4
:_strchr_else4
    push_eax              # 0
    mov_eax, %0
:_strchr_else_end4
    mov_ebx,[ebp]         # return
    push_ebx
    ret
    push_eax              # 0
    mov_eax, %0
    mov_ebx,[ebp]         # return
    push_ebx
    ret

:f_strrchr
    pop_eax
    mov_[ebp],eax
    pop_eax
    push_eax              # c (local)
    lea_eax,[ebp+DWORD] %4
    pop_ebx               # =:
    mov_[eax],ebx
    pop_eax
    push_eax              # s (local)
    lea_eax,[ebp+DWORD] %8
    pop_ebx               # =:
    mov_[eax],ebx
    pop_eax
    push_eax              # n (local)
    lea_eax,[ebp+DWORD] %12
    push_eax              # s (local)
    lea_eax,[ebp+DWORD] %8
    mov_eax,[eax]         # ?
    push_eax              # strlen (function)
    mov_eax, &f_strlen
    add_ebp, %16         # ()
    call_eax
    sub_ebp, %16
    pop_ebx               # =
    mov_[ebx],eax
    pop_eax               # ;
# stdlib.c 125
    push_eax              # i (local)
    lea_eax,[ebp+DWORD] %16
    push_eax              # n (local)
    lea_eax,[ebp+DWORD] %12
    mov_eax,[eax]         # ?
    pop_ebx               # =
    mov_[ebx],eax
    pop_eax               # ;
:_strrchr_loop1
    push_eax              # i (local)
    lea_eax,[ebp+DWORD] %16
    mov_eax,[eax]         # ?
    push_eax              # 0
    mov_eax, %0
    pop_ebx               # >=sfv
    cmp_eax_ebx
    setge_al
    movzx_eax,al
    test_eax,eax          # !
    sete_al
    movzx_eax,al
    test_eax,eax          # if
    pop_eax
    je %_strrchr_else2
    jmp %_strrchr_loop_end1
# stdlib.c 126
:_strrchr_else2 # no else
    push_eax              # s (local)
    lea_eax,[ebp+DWORD] %8
    mov_eax,[eax]         # ?
    push_eax              # i (local)
    lea_eax,[ebp+DWORD] %16
    mov_eax,[eax]         # ?
    pop_ebx               # +
    add_eax,ebx
    mov_al,[eax]          # ?1
    movzx_eax,al
    movsx_eax,al          # char
    push_eax              # c (local)
    lea_eax,[ebp+DWORD] %4
    mov_eax,[eax]         # ?
    pop_ebx               # ==
    cmp_eax_ebx
    sete_al
    movzx_eax,al
    test_eax,eax          # if
    pop_eax
    je %_strrchr_else3
# stdlib.c 127
    push_eax              # s (local)
    lea_eax,[ebp+DWORD] %8
    mov_eax,[eax]         # ?
    push_eax              # i (local)
    lea_eax,[ebp+DWORD] %16
    mov_eax,[eax]         # ?
    pop_ebx               # +
    add_eax,ebx
    mov_ebx,[ebp]         # return
    push_ebx
    ret
:_strrchr_else3 # no else
    push_eax              # i (local)
    lea_eax,[ebp+DWORD] %16
    push_eax              # $ (dup)
    mov_eax,[eax]         # ?
    push_eax              # 1
    mov_eax, %1
    pop_ebx               # -
    sub_ebx,eax
    mov_eax,ebx
    pop_ebx               # =
    mov_[ebx],eax
    push_eax              # 1
    mov_eax, %1
    pop_ebx               # +
    add_eax,ebx
    pop_eax               # ;
    jmp %_strrchr_loop1
:_strrchr_loop_end1
# stdlib.c 128
    push_eax              # 0
    mov_eax, %0
    mov_ebx,[ebp]         # return
    push_ebx
    ret
    push_eax              # 0
    mov_eax, %0
    mov_ebx,[ebp]         # return
    push_ebx
    ret

:f_strcmp
    pop_eax
    mov_[ebp],eax
    pop_eax
    push_eax              # s2 (local)
    lea_eax,[ebp+DWORD] %4
    pop_ebx               # =:
    mov_[eax],ebx
    pop_eax
    push_eax              # s1 (local)
    lea_eax,[ebp+DWORD] %8
    pop_ebx               # =:
    mov_[eax],ebx
    pop_eax
# stdlib.c 133
:_strcmp_loop1
# stdlib.c 134
    push_eax              # result (local)
    lea_eax,[ebp+DWORD] %12
    push_eax              # s1 (local)
    lea_eax,[ebp+DWORD] %8
    mov_eax,[eax]         # ?
    mov_al,[eax]          # ?1
    movzx_eax,al
    movsx_eax,al          # char
    push_eax              # s2 (local)
    lea_eax,[ebp+DWORD] %4
    mov_eax,[eax]         # ?
    mov_al,[eax]          # ?1
    movzx_eax,al
    movsx_eax,al          # char
    pop_ebx               # -
    sub_ebx,eax
    mov_eax,ebx
    pop_ebx               # =
    mov_[ebx],eax
    pop_eax               # ;
# stdlib.c 136
    push_eax              # result (local)
    lea_eax,[ebp+DWORD] %12
    mov_eax,[eax]         # ?
    push_eax              # 0
    mov_eax, %0
    pop_ebx               # !=
    cmp_eax_ebx
    setne_al
    movzx_eax,al
    test_eax,eax          # ||
    jne %_strcmp_or_end2
    pop_eax
    push_eax              # s1 (local)
    lea_eax,[ebp+DWORD] %8
    mov_eax,[eax]         # ?
    mov_al,[eax]          # ?1
    movzx_eax,al
    movsx_eax,al          # char
    push_eax              # 0
    mov_eax, %0
    pop_ebx               # ==
    cmp_eax_ebx
    sete_al
    movzx_eax,al
:_strcmp_or_end2
    test_eax,eax          # if
    pop_eax
    je %_strcmp_else3
# stdlib.c 137
    push_eax              # result (local)
    lea_eax,[ebp+DWORD] %12
    mov_eax,[eax]         # ?
    mov_ebx,[ebp]         # return
    push_ebx
    ret
# stdlib.c 138
:_strcmp_else3 # no else
    push_eax              # s1 (local)
    lea_eax,[ebp+DWORD] %8
    push_eax              # $ (dup)
    mov_eax,[eax]         # ?
    push_eax              # 1
    mov_eax, %1
    pop_ebx               # +
    add_eax,ebx
    pop_ebx               # =
    mov_[ebx],eax
    push_eax              # 1
    mov_eax, %1
    pop_ebx               # -
    sub_ebx,eax
    mov_eax,ebx
    pop_eax               # ;
# stdlib.c 139
    push_eax              # s2 (local)
    lea_eax,[ebp+DWORD] %4
    push_eax              # $ (dup)
    mov_eax,[eax]         # ?
    push_eax              # 1
    mov_eax, %1
    pop_ebx               # +
    add_eax,ebx
    pop_ebx               # =
    mov_[ebx],eax
    push_eax              # 1
    mov_eax, %1
    pop_ebx               # -
    sub_ebx,eax
    mov_eax,ebx
    pop_eax               # ;
    jmp %_strcmp_loop1
:_strcmp_loop_end1
# stdlib.c 141
    push_eax              # 0
    mov_eax, %0
    mov_ebx,[ebp]         # return
    push_ebx
    ret
    push_eax              # 0
    mov_eax, %0
    mov_ebx,[ebp]         # return
    push_ebx
    ret

:f_strncmp
    pop_eax
    mov_[ebp],eax
    pop_eax
    push_eax              # n (local)
    lea_eax,[ebp+DWORD] %4
    pop_ebx               # =:
    mov_[eax],ebx
    pop_eax
    push_eax              # s2 (local)
    lea_eax,[ebp+DWORD] %8
    pop_ebx               # =:
    mov_[eax],ebx
    pop_eax
    push_eax              # s1 (local)
    lea_eax,[ebp+DWORD] %12
    pop_ebx               # =:
    mov_[eax],ebx
    pop_eax
# stdlib.c 146
:_strncmp_loop1
    push_eax              # n (local)
    lea_eax,[ebp+DWORD] %4
    mov_eax,[eax]         # ?
    push_eax              # 0
    mov_eax, %0
    pop_ebx               # >
    cmp_eax_ebx
    seta_al
    movzx_eax,al
    test_eax,eax          # !
    sete_al
    movzx_eax,al
    test_eax,eax          # if
    pop_eax
    je %_strncmp_else2
    jmp %_strncmp_loop_end1
# stdlib.c 147
:_strncmp_else2 # no else
    push_eax              # result (local)
    lea_eax,[ebp+DWORD] %16
    push_eax              # s1 (local)
    lea_eax,[ebp+DWORD] %12
    mov_eax,[eax]         # ?
    mov_al,[eax]          # ?1
    movzx_eax,al
    movsx_eax,al          # char
    push_eax              # s2 (local)
    lea_eax,[ebp+DWORD] %8
    mov_eax,[eax]         # ?
    mov_al,[eax]          # ?1
    movzx_eax,al
    movsx_eax,al          # char
    pop_ebx               # -
    sub_ebx,eax
    mov_eax,ebx
    pop_ebx               # =
    mov_[ebx],eax
    pop_eax               # ;
# stdlib.c 149
    push_eax              # result (local)
    lea_eax,[ebp+DWORD] %16
    mov_eax,[eax]         # ?
    push_eax              # 0
    mov_eax, %0
    pop_ebx               # !=
    cmp_eax_ebx
    setne_al
    movzx_eax,al
    test_eax,eax          # ||
    jne %_strncmp_or_end3
    pop_eax
    push_eax              # s1 (local)
    lea_eax,[ebp+DWORD] %12
    mov_eax,[eax]         # ?
    mov_al,[eax]          # ?1
    movzx_eax,al
    movsx_eax,al          # char
    push_eax              # 0
    mov_eax, %0
    pop_ebx               # ==
    cmp_eax_ebx
    sete_al
    movzx_eax,al
:_strncmp_or_end3
    test_eax,eax          # if
    pop_eax
    je %_strncmp_else4
# stdlib.c 150
    push_eax              # result (local)
    lea_eax,[ebp+DWORD] %16
    mov_eax,[eax]         # ?
    mov_ebx,[ebp]         # return
    push_ebx
    ret
# stdlib.c 151
:_strncmp_else4 # no else
    push_eax              # s1 (local)
    lea_eax,[ebp+DWORD] %12
    push_eax              # $ (dup)
    mov_eax,[eax]         # ?
    push_eax              # 1
    mov_eax, %1
    pop_ebx               # +
    add_eax,ebx
    pop_ebx               # =
    mov_[ebx],eax
    push_eax              # 1
    mov_eax, %1
    pop_ebx               # -
    sub_ebx,eax
    mov_eax,ebx
    pop_eax               # ;
# stdlib.c 152
    push_eax              # s2 (local)
    lea_eax,[ebp+DWORD] %8
    push_eax              # $ (dup)
    mov_eax,[eax]         # ?
    push_eax              # 1
    mov_eax, %1
    pop_ebx               # +
    add_eax,ebx
    pop_ebx               # =
    mov_[ebx],eax
    push_eax              # 1
    mov_eax, %1
    pop_ebx               # -
    sub_ebx,eax
    mov_eax,ebx
    pop_eax               # ;
    push_eax              # n (local)
    lea_eax,[ebp+DWORD] %4
    push_eax              # $ (dup)
    mov_eax,[eax]         # ?
    push_eax              # 1
    mov_eax, %1
    pop_ebx               # -
    sub_ebx,eax
    mov_eax,ebx
    pop_ebx               # =
    mov_[ebx],eax
    push_eax              # 1
    mov_eax, %1
    pop_ebx               # +
    add_eax,ebx
    pop_eax               # ;
    jmp %_strncmp_loop1
:_strncmp_loop_end1
# stdlib.c 154
    push_eax              # 0
    mov_eax, %0
    mov_ebx,[ebp]         # return
    push_ebx
    ret
    push_eax              # 0
    mov_eax, %0
    mov_ebx,[ebp]         # return
    push_ebx
    ret

:f_strstr
    pop_eax
    mov_[ebp],eax
    pop_eax
    push_eax              # needle (local)
    lea_eax,[ebp+DWORD] %4
    pop_ebx               # =:
    mov_[eax],ebx
    pop_eax
    push_eax              # haystack (local)
    lea_eax,[ebp+DWORD] %8
    pop_ebx               # =:
    mov_[eax],ebx
    pop_eax
    push_eax              # n (local)
    lea_eax,[ebp+DWORD] %12
    push_eax              # needle (local)
    lea_eax,[ebp+DWORD] %4
    mov_eax,[eax]         # ?
    push_eax              # strlen (function)
    mov_eax, &f_strlen
    add_ebp, %16         # ()
    call_eax
    sub_ebp, %16
    pop_ebx               # =
    mov_[ebx],eax
    pop_eax               # ;
# stdlib.c 160
:_strstr_loop1
    push_eax              # haystack (local)
    lea_eax,[ebp+DWORD] %8
    mov_eax,[eax]         # ?
    mov_al,[eax]          # ?1
    movzx_eax,al
    movsx_eax,al          # char
    push_eax              # 0
    mov_eax, %0
    pop_ebx               # !=
    cmp_eax_ebx
    setne_al
    movzx_eax,al
    test_eax,eax          # !
    sete_al
    movzx_eax,al
    test_eax,eax          # if
    pop_eax
    je %_strstr_else2
    jmp %_strstr_loop_end1
# stdlib.c 161
:_strstr_else2 # no else
    push_eax              # haystack (local)
    lea_eax,[ebp+DWORD] %8
    mov_eax,[eax]         # ?
    push_eax              # needle (local)
    lea_eax,[ebp+DWORD] %4
    mov_eax,[eax]         # ?
    push_eax              # n (local)
    lea_eax,[ebp+DWORD] %12
    mov_eax,[eax]         # ?
    push_eax              # strncmp (function)
    mov_eax, &f_strncmp
    add_ebp, %16         # ()
    call_eax
    sub_ebp, %16
    push_eax              # 0
    mov_eax, %0
    pop_ebx               # ==
    cmp_eax_ebx
    sete_al
    movzx_eax,al
    test_eax,eax          # if
    pop_eax
    je %_strstr_else3
# stdlib.c 162
    push_eax              # haystack (local)
    lea_eax,[ebp+DWORD] %8
    mov_eax,[eax]         # ?
    mov_ebx,[ebp]         # return
    push_ebx
    ret
:_strstr_else3 # no else
    push_eax              # haystack (local)
    lea_eax,[ebp+DWORD] %8
    push_eax              # $ (dup)
    mov_eax,[eax]         # ?
    push_eax              # 1
    mov_eax, %1
    pop_ebx               # +
    add_eax,ebx
    pop_ebx               # =
    mov_[ebx],eax
    push_eax              # 1
    mov_eax, %1
    pop_ebx               # -
    sub_ebx,eax
    mov_eax,ebx
    pop_eax               # ;
    jmp %_strstr_loop1
:_strstr_loop_end1
# stdlib.c 163
    push_eax              # 0
    mov_eax, %0
    mov_ebx,[ebp]         # return
    push_ebx
    ret
    push_eax              # 0
    mov_eax, %0
    mov_ebx,[ebp]         # return
    push_ebx
    ret

:f_strtoul
    pop_eax
    mov_[ebp],eax
    pop_eax
    push_eax              # base (local)
    lea_eax,[ebp+DWORD] %4
    pop_ebx               # =:
    mov_[eax],ebx
    pop_eax
    push_eax              # endptr (local)
    lea_eax,[ebp+DWORD] %8
    pop_ebx               # =:
    mov_[eax],ebx
    pop_eax
    push_eax              # nptr (local)
    lea_eax,[ebp+DWORD] %12
    pop_ebx               # =:
    mov_[eax],ebx
    pop_eax
# stdlib.c 169
    push_eax              # base (local)
    lea_eax,[ebp+DWORD] %4
    mov_eax,[eax]         # ?
    push_eax              # 0
    mov_eax, %0
    pop_ebx               # ==
    cmp_eax_ebx
    sete_al
    movzx_eax,al
    test_eax,eax          # if
    pop_eax
    je %_strtoul_else1
# stdlib.c 170
# stdlib.c 171
    push_eax              # base (local)
    lea_eax,[ebp+DWORD] %4
    push_eax              # 10
    mov_eax, %10
    pop_ebx               # =
    mov_[ebx],eax
    pop_eax               # ;
# stdlib.c 172
    push_eax              # nptr (local)
    lea_eax,[ebp+DWORD] %12
    mov_eax,[eax]         # ?
    mov_al,[eax]          # ?1
    movzx_eax,al
    movsx_eax,al          # char
    push_eax              # 48
    mov_eax, %48
    pop_ebx               # ==
    cmp_eax_ebx
    sete_al
    movzx_eax,al
    test_eax,eax          # if
    pop_eax
    je %_strtoul_else2
# stdlib.c 173
# stdlib.c 174
    push_eax              # base (local)
    lea_eax,[ebp+DWORD] %4
    push_eax              # 8
    mov_eax, %8
    pop_ebx               # =
    mov_[ebx],eax
    pop_eax               # ;
# stdlib.c 175
    push_eax              # nptr (local)
    lea_eax,[ebp+DWORD] %12
    push_eax              # $ (dup)
    mov_eax,[eax]         # ?
    push_eax              # 1
    mov_eax, %1
    pop_ebx               # +
    add_eax,ebx
    pop_ebx               # =
    mov_[ebx],eax
    push_eax              # 1
    mov_eax, %1
    pop_ebx               # -
    sub_ebx,eax
    mov_eax,ebx
    pop_eax               # ;
# stdlib.c 176
    push_eax              # nptr (local)
    lea_eax,[ebp+DWORD] %12
    mov_eax,[eax]         # ?
    mov_al,[eax]          # ?1
    movzx_eax,al
    movsx_eax,al          # char
    push_eax              # 120
    mov_eax, %120
    pop_ebx               # ==
    cmp_eax_ebx
    sete_al
    movzx_eax,al
    test_eax,eax          # ||
    jne %_strtoul_or_end3
    pop_eax
    push_eax              # nptr (local)
    lea_eax,[ebp+DWORD] %12
    mov_eax,[eax]         # ?
    mov_al,[eax]          # ?1
    movzx_eax,al
    movsx_eax,al          # char
    push_eax              # 88
    mov_eax, %88
    pop_ebx               # ==
    cmp_eax_ebx
    sete_al
    movzx_eax,al
:_strtoul_or_end3
    test_eax,eax          # if
    pop_eax
    je %_strtoul_else4
# stdlib.c 177
# stdlib.c 178
    push_eax              # base (local)
    lea_eax,[ebp+DWORD] %4
    push_eax              # 16
    mov_eax, %16
    pop_ebx               # =
    mov_[ebx],eax
    pop_eax               # ;
# stdlib.c 179
    push_eax              # nptr (local)
    lea_eax,[ebp+DWORD] %12
    push_eax              # $ (dup)
    mov_eax,[eax]         # ?
    push_eax              # 1
    mov_eax, %1
    pop_ebx               # +
    add_eax,ebx
    pop_ebx               # =
    mov_[ebx],eax
    push_eax              # 1
    mov_eax, %1
    pop_ebx               # -
    sub_ebx,eax
    mov_eax,ebx
    pop_eax               # ;
:_strtoul_else4 # no else
:_strtoul_else2 # no else
:_strtoul_else1 # no else
    push_eax              # result (local)
    lea_eax,[ebp+DWORD] %16
    push_eax              # 0
    mov_eax, %0
    pop_ebx               # =
    mov_[ebx],eax
    pop_eax               # ;
    push_eax              # sub_10 (local)
    lea_eax,[ebp+DWORD] %20
    push_eax              # 48
    mov_eax, %48
    push_eax              # base (local)
    lea_eax,[ebp+DWORD] %4
    mov_eax,[eax]         # ?
    push_eax              # 10
    mov_eax, %10
    pop_ebx               # <s
    cmp_eax_ebx
    setl_al
    movzx_eax,al
    test_eax,eax          # if
    pop_eax
    je %_strtoul_else5
    push_eax              # base (local)
    lea_eax,[ebp+DWORD] %4
    mov_eax,[eax]         # ?
    jmp %_strtoul_else_end5
:_strtoul_else5
    push_eax              # 10
    mov_eax, %10
:_strtoul_else_end5
    pop_ebx               # +
    add_eax,ebx
    pop_ebx               # =1
    mov_[ebx],al
    pop_eax               # ;
# stdlib.c 185
:_strtoul_loop6
# stdlib.c 186
# stdlib.c 187
    push_eax              # 48
    mov_eax, %48
    push_eax              # nptr (local)
    lea_eax,[ebp+DWORD] %12
    mov_eax,[eax]         # ?
    mov_al,[eax]          # ?1
    movzx_eax,al
    movsx_eax,al          # char
    pop_ebx               # <=s
    cmp_eax_ebx
    setle_al
    movzx_eax,al
    test_eax,eax          # &&
    je %_strtoul_and_end7
    pop_eax
    push_eax              # nptr (local)
    lea_eax,[ebp+DWORD] %12
    mov_eax,[eax]         # ?
    mov_al,[eax]          # ?1
    movzx_eax,al
    movsx_eax,al          # char
    push_eax              # sub_10 (local)
    lea_eax,[ebp+DWORD] %20
    mov_al,[eax]          # ?1
    movzx_eax,al
    movsx_eax,al          # char
    pop_ebx               # <s
    cmp_eax_ebx
    setl_al
    movzx_eax,al
:_strtoul_and_end7
    test_eax,eax          # if
    pop_eax
    je %_strtoul_else8
# stdlib.c 188
    push_eax              # result (local)
    lea_eax,[ebp+DWORD] %16
    push_eax              # base (local)
    lea_eax,[ebp+DWORD] %4
    mov_eax,[eax]         # ?
    push_eax              # result (local)
    lea_eax,[ebp+DWORD] %16
    mov_eax,[eax]         # ?
    pop_ebx               # *
    mul_ebx
    push_eax              # nptr (local)
    lea_eax,[ebp+DWORD] %12
    mov_eax,[eax]         # ?
    mov_al,[eax]          # ?1
    movzx_eax,al
    movsx_eax,al          # char
    pop_ebx               # +
    add_eax,ebx
    push_eax              # 48
    mov_eax, %48
    pop_ebx               # -
    sub_ebx,eax
    mov_eax,ebx
    pop_ebx               # =
    mov_[ebx],eax
    pop_eax               # ;
    jmp %_strtoul_else_end8
:_strtoul_else8
# stdlib.c 189
    push_eax              # 97
    mov_eax, %97
    push_eax              # nptr (local)
    lea_eax,[ebp+DWORD] %12
    mov_eax,[eax]         # ?
    mov_al,[eax]          # ?1
    movzx_eax,al
    movsx_eax,al          # char
    pop_ebx               # <=s
    cmp_eax_ebx
    setle_al
    movzx_eax,al
    test_eax,eax          # &&
    je %_strtoul_and_end9
    pop_eax
    push_eax              # nptr (local)
    lea_eax,[ebp+DWORD] %12
    mov_eax,[eax]         # ?
    mov_al,[eax]          # ?1
    movzx_eax,al
    movsx_eax,al          # char
    push_eax              # 97
    mov_eax, %97
    push_eax              # base (local)
    lea_eax,[ebp+DWORD] %4
    mov_eax,[eax]         # ?
    pop_ebx               # +
    add_eax,ebx
    push_eax              # 10
    mov_eax, %10
    pop_ebx               # -
    sub_ebx,eax
    mov_eax,ebx
    pop_ebx               # <s
    cmp_eax_ebx
    setl_al
    movzx_eax,al
:_strtoul_and_end9
    test_eax,eax          # if
    pop_eax
    je %_strtoul_else10
# stdlib.c 190
    push_eax              # result (local)
    lea_eax,[ebp+DWORD] %16
    push_eax              # base (local)
    lea_eax,[ebp+DWORD] %4
    mov_eax,[eax]         # ?
    push_eax              # result (local)
    lea_eax,[ebp+DWORD] %16
    mov_eax,[eax]         # ?
    pop_ebx               # *
    mul_ebx
    push_eax              # nptr (local)
    lea_eax,[ebp+DWORD] %12
    mov_eax,[eax]         # ?
    mov_al,[eax]          # ?1
    movzx_eax,al
    movsx_eax,al          # char
    pop_ebx               # +
    add_eax,ebx
    push_eax              # 97
    mov_eax, %97
    pop_ebx               # -
    sub_ebx,eax
    mov_eax,ebx
    push_eax              # 10
    mov_eax, %10
    pop_ebx               # +
    add_eax,ebx
    pop_ebx               # =
    mov_[ebx],eax
    pop_eax               # ;
    jmp %_strtoul_else_end10
:_strtoul_else10
# stdlib.c 191
    push_eax              # 65
    mov_eax, %65
    push_eax              # nptr (local)
    lea_eax,[ebp+DWORD] %12
    mov_eax,[eax]         # ?
    mov_al,[eax]          # ?1
    movzx_eax,al
    movsx_eax,al          # char
    pop_ebx               # <=s
    cmp_eax_ebx
    setle_al
    movzx_eax,al
    test_eax,eax          # &&
    je %_strtoul_and_end11
    pop_eax
    push_eax              # nptr (local)
    lea_eax,[ebp+DWORD] %12
    mov_eax,[eax]         # ?
    mov_al,[eax]          # ?1
    movzx_eax,al
    movsx_eax,al          # char
    push_eax              # 65
    mov_eax, %65
    push_eax              # base (local)
    lea_eax,[ebp+DWORD] %4
    mov_eax,[eax]         # ?
    pop_ebx               # +
    add_eax,ebx
    push_eax              # 10
    mov_eax, %10
    pop_ebx               # -
    sub_ebx,eax
    mov_eax,ebx
    pop_ebx               # <s
    cmp_eax_ebx
    setl_al
    movzx_eax,al
:_strtoul_and_end11
    test_eax,eax          # if
    pop_eax
    je %_strtoul_else12
# stdlib.c 192
    push_eax              # result (local)
    lea_eax,[ebp+DWORD] %16
    push_eax              # base (local)
    lea_eax,[ebp+DWORD] %4
    mov_eax,[eax]         # ?
    push_eax              # result (local)
    lea_eax,[ebp+DWORD] %16
    mov_eax,[eax]         # ?
    pop_ebx               # *
    mul_ebx
    push_eax              # nptr (local)
    lea_eax,[ebp+DWORD] %12
    mov_eax,[eax]         # ?
    mov_al,[eax]          # ?1
    movzx_eax,al
    movsx_eax,al          # char
    pop_ebx               # +
    add_eax,ebx
    push_eax              # 65
    mov_eax, %65
    pop_ebx               # -
    sub_ebx,eax
    mov_eax,ebx
    push_eax              # 10
    mov_eax, %10
    pop_ebx               # +
    add_eax,ebx
    pop_ebx               # =
    mov_[ebx],eax
    pop_eax               # ;
    jmp %_strtoul_else_end12
:_strtoul_else12
# stdlib.c 194
    jmp %_strtoul_loop_end6
:_strtoul_else_end12
:_strtoul_else_end10
:_strtoul_else_end8
    push_eax              # nptr (local)
    lea_eax,[ebp+DWORD] %12
    push_eax              # $ (dup)
    mov_eax,[eax]         # ?
    push_eax              # 1
    mov_eax, %1
    pop_ebx               # +
    add_eax,ebx
    pop_ebx               # =
    mov_[ebx],eax
    push_eax              # 1
    mov_eax, %1
    pop_ebx               # -
    sub_ebx,eax
    mov_eax,ebx
    pop_eax               # ;
    jmp %_strtoul_loop6
:_strtoul_loop_end6
# stdlib.c 196
    push_eax              # endptr (local)
    lea_eax,[ebp+DWORD] %8
    mov_eax,[eax]         # ?
    push_eax              # 0
    mov_eax, %0
    pop_ebx               # !=
    cmp_eax_ebx
    setne_al
    movzx_eax,al
    test_eax,eax          # if
    pop_eax
    je %_strtoul_else13
# stdlib.c 197
    push_eax              # endptr (local)
    lea_eax,[ebp+DWORD] %8
    mov_eax,[eax]         # ?
    push_eax              # nptr (local)
    lea_eax,[ebp+DWORD] %12
    mov_eax,[eax]         # ?
    pop_ebx               # =
    mov_[ebx],eax
    pop_eax               # ;
# stdlib.c 198
:_strtoul_else13 # no else
    push_eax              # result (local)
    lea_eax,[ebp+DWORD] %16
    mov_eax,[eax]         # ?
    mov_ebx,[ebp]         # return
    push_ebx
    ret
    push_eax              # 0
    mov_eax, %0
    mov_ebx,[ebp]         # return
    push_ebx
    ret

:f_strtol
    pop_eax
    mov_[ebp],eax
    pop_eax
    push_eax              # base (local)
    lea_eax,[ebp+DWORD] %4
    pop_ebx               # =:
    mov_[eax],ebx
    pop_eax
    push_eax              # endptr (local)
    lea_eax,[ebp+DWORD] %8
    pop_ebx               # =:
    mov_[eax],ebx
    pop_eax
    push_eax              # nptr (local)
    lea_eax,[ebp+DWORD] %12
    pop_ebx               # =:
    mov_[eax],ebx
    pop_eax
    push_eax              # sign (local)
    lea_eax,[ebp+DWORD] %16
    push_eax              # 1
    mov_eax, %1
    pop_ebx               # =
    mov_[ebx],eax
    pop_eax               # ;
# stdlib.c 204
    push_eax              # nptr (local)
    lea_eax,[ebp+DWORD] %12
    mov_eax,[eax]         # ?
    mov_al,[eax]          # ?1
    movzx_eax,al
    movsx_eax,al          # char
    push_eax              # 45
    mov_eax, %45
    pop_ebx               # ==
    cmp_eax_ebx
    sete_al
    movzx_eax,al
    test_eax,eax          # if
    pop_eax
    je %_strtol_else1
# stdlib.c 205
# stdlib.c 206
    push_eax              # sign (local)
    lea_eax,[ebp+DWORD] %16
    push_eax              # 4294967295
    mov_eax, %4294967295
    pop_ebx               # =
    mov_[ebx],eax
    pop_eax               # ;
# stdlib.c 207
    push_eax              # nptr (local)
    lea_eax,[ebp+DWORD] %12
    push_eax              # $ (dup)
    mov_eax,[eax]         # ?
    push_eax              # 1
    mov_eax, %1
    pop_ebx               # +
    add_eax,ebx
    pop_ebx               # =
    mov_[ebx],eax
    push_eax              # 1
    mov_eax, %1
    pop_ebx               # -
    sub_ebx,eax
    mov_eax,ebx
    pop_eax               # ;
# stdlib.c 209
:_strtol_else1 # no else
    push_eax              # sign (local)
    lea_eax,[ebp+DWORD] %16
    mov_eax,[eax]         # ?
    push_eax              # nptr (local)
    lea_eax,[ebp+DWORD] %12
    mov_eax,[eax]         # ?
    push_eax              # endptr (local)
    lea_eax,[ebp+DWORD] %8
    mov_eax,[eax]         # ?
    push_eax              # base (local)
    lea_eax,[ebp+DWORD] %4
    mov_eax,[eax]         # ?
    push_eax              # strtoul (function)
    mov_eax, &f_strtoul
    add_ebp, %20         # ()
    call_eax
    sub_ebp, %20
    pop_ebx               # *
    mul_ebx
    mov_ebx,[ebp]         # return
    push_ebx
    ret
    push_eax              # 0
    mov_eax, %0
    mov_ebx,[ebp]         # return
    push_ebx
    ret

:f_strtoll
    pop_eax
    mov_[ebp],eax
    pop_eax
    push_eax              # base (local)
    lea_eax,[ebp+DWORD] %4
    pop_ebx               # =:
    mov_[eax],ebx
    pop_eax
    push_eax              # endptr (local)
    lea_eax,[ebp+DWORD] %8
    pop_ebx               # =:
    mov_[eax],ebx
    pop_eax
    push_eax              # nptr (local)
    lea_eax,[ebp+DWORD] %12
    pop_ebx               # =:
    mov_[eax],ebx
    pop_eax
# stdlib.c 214
    push_eax              # nptr (local)
    lea_eax,[ebp+DWORD] %12
    mov_eax,[eax]         # ?
    push_eax              # endptr (local)
    lea_eax,[ebp+DWORD] %8
    mov_eax,[eax]         # ?
    push_eax              # base (local)
    lea_eax,[ebp+DWORD] %4
    mov_eax,[eax]         # ?
    push_eax              # strtol (function)
    mov_eax, &f_strtol
    add_ebp, %16         # ()
    call_eax
    sub_ebp, %16
    mov_ebx,[ebp]         # return
    push_ebx
    ret
    push_eax              # 0
    mov_eax, %0
    mov_ebx,[ebp]         # return
    push_ebx
    ret

:f_strtoull
    pop_eax
    mov_[ebp],eax
    pop_eax
    push_eax              # base (local)
    lea_eax,[ebp+DWORD] %4
    pop_ebx               # =:
    mov_[eax],ebx
    pop_eax
    push_eax              # endptr (local)
    lea_eax,[ebp+DWORD] %8
    pop_ebx               # =:
    mov_[eax],ebx
    pop_eax
    push_eax              # nptr (local)
    lea_eax,[ebp+DWORD] %12
    pop_ebx               # =:
    mov_[eax],ebx
    pop_eax
# stdlib.c 219
    push_eax              # nptr (local)
    lea_eax,[ebp+DWORD] %12
    mov_eax,[eax]         # ?
    push_eax              # endptr (local)
    lea_eax,[ebp+DWORD] %8
    mov_eax,[eax]         # ?
    push_eax              # base (local)
    lea_eax,[ebp+DWORD] %4
    mov_eax,[eax]         # ?
    push_eax              # strtoul (function)
    mov_eax, &f_strtoul
    add_ebp, %16         # ()
    call_eax
    sub_ebp, %16
    mov_ebx,[ebp]         # return
    push_ebx
    ret
    push_eax              # 0
    mov_eax, %0
    mov_ebx,[ebp]         # return
    push_ebx
    ret

:f_strtof
    pop_eax
    mov_[ebp],eax
    pop_eax
    push_eax              # endptr (local)
    lea_eax,[ebp+DWORD] %4
    pop_ebx               # =:
    mov_[eax],ebx
    pop_eax
    push_eax              # str (local)
    lea_eax,[ebp+DWORD] %8
    pop_ebx               # =:
    mov_[eax],ebx
    pop_eax
# stdlib.c 225
    push_eax              # endptr (local)
    lea_eax,[ebp+DWORD] %4
    mov_eax,[eax]         # ?
    push_eax              # str (local)
    lea_eax,[ebp+DWORD] %8
    mov_eax,[eax]         # ?
    pop_ebx               # =
    mov_[ebx],eax
    pop_eax               # ;
# stdlib.c 226
    push_eax              # 0
    mov_eax, %0
    mov_ebx,[ebp]         # return
    push_ebx
    ret
    push_eax              # 0
    mov_eax, %0
    mov_ebx,[ebp]         # return
    push_ebx
    ret

:f_malloc
    pop_eax
    mov_[ebp],eax
    pop_eax
    push_eax              # size (local)
    lea_eax,[ebp+DWORD] %4
    pop_ebx               # =:
    mov_[eax],ebx
    pop_eax
# stdlib.c 231
    push_eax              # size (local)
    lea_eax,[ebp+DWORD] %4
    push_eax              # size (local)
    lea_eax,[ebp+DWORD] %4
    mov_eax,[eax]         # ?
    push_eax              # 3
    mov_eax, %3
    pop_ebx               # +
    add_eax,ebx
    push_eax              # 3
    mov_eax, %3
    not_eax               # ~
    pop_ebx               # &
    and_eax,ebx
    pop_ebx               # =
    mov_[ebx],eax
    pop_eax               # ;
    push_eax              # result (local)
    lea_eax,[ebp+DWORD] %8
    push_eax              # size (local)
    lea_eax,[ebp+DWORD] %4
    mov_eax,[eax]         # ?
    push_eax              # 4
    mov_eax, %4
    pop_ebx               # +
    add_eax,ebx
    push_eax              # sys_malloc (function)
    mov_eax, &f_sys_malloc
    add_ebp, %12         # ()
    call_eax
    sub_ebp, %12
    pop_ebx               # =
    mov_[ebx],eax
    pop_eax               # ;
# stdlib.c 233
    push_eax              # result (local)
    lea_eax,[ebp+DWORD] %8
    mov_eax,[eax]         # ?
    push_eax              # size (local)
    lea_eax,[ebp+DWORD] %4
    mov_eax,[eax]         # ?
    pop_ebx               # =
    mov_[ebx],eax
    pop_eax               # ;
# stdlib.c 234
    push_eax              # result (local)
    lea_eax,[ebp+DWORD] %8
    push_eax              # $ (dup)
    mov_eax,[eax]         # ?
    push_eax              # 4
    mov_eax, %4
    pop_ebx               # +
    add_eax,ebx
    pop_ebx               # =
    mov_[ebx],eax
    push_eax              # 4
    mov_eax, %4
    pop_ebx               # -
    sub_ebx,eax
    mov_eax,ebx
    pop_eax               # ;
# stdlib.c 235
    push_eax              # result (local)
    lea_eax,[ebp+DWORD] %8
    mov_eax,[eax]         # ?
    mov_ebx,[ebp]         # return
    push_ebx
    ret
    push_eax              # 0
    mov_eax, %0
    mov_ebx,[ebp]         # return
    push_ebx
    ret

:f_realloc
    pop_eax
    mov_[ebp],eax
    pop_eax
    push_eax              # size (local)
    lea_eax,[ebp+DWORD] %4
    pop_ebx               # =:
    mov_[eax],ebx
    pop_eax
    push_eax              # ptr (local)
    lea_eax,[ebp+DWORD] %8
    pop_ebx               # =:
    mov_[eax],ebx
    pop_eax
    push_eax              # result (local)
    lea_eax,[ebp+DWORD] %12
    push_eax              # size (local)
    lea_eax,[ebp+DWORD] %4
    mov_eax,[eax]         # ?
    push_eax              # malloc (function)
    mov_eax, &f_malloc
    add_ebp, %16         # ()
    call_eax
    sub_ebp, %16
    pop_ebx               # =
    mov_[ebx],eax
    pop_eax               # ;
# stdlib.c 241
    push_eax              # ptr (local)
    lea_eax,[ebp+DWORD] %8
    mov_eax,[eax]         # ?
    push_eax              # 0
    mov_eax, %0
    pop_ebx               # !=
    cmp_eax_ebx
    setne_al
    movzx_eax,al
    test_eax,eax          # if
    pop_eax
    je %_realloc_else1
# stdlib.c 242
    push_eax              # old_ptr (local)
    lea_eax,[ebp+DWORD] %16
    push_eax              # ptr (local)
    lea_eax,[ebp+DWORD] %8
    mov_eax,[eax]         # ?
    pop_ebx               # =
    mov_[ebx],eax
    pop_eax               # ;
    push_eax              # old_size (local)
    lea_eax,[ebp+DWORD] %20
    push_eax              # old_ptr (local)
    lea_eax,[ebp+DWORD] %16
    mov_eax,[eax]         # ?
    push_eax              # 4294967295
    mov_eax, %4294967295
    push_eax              # 4
    mov_eax, %4
    pop_ebx               # *
    mul_ebx
    pop_ebx               # +
    add_eax,ebx
    mov_eax,[eax]         # ?
    push_eax              # 4
    mov_eax, %4
    mov_ebx,eax           # /s
    pop_eax
    cdq
    idiv_ebx
    pop_ebx               # =
    mov_[ebx],eax
    pop_eax               # ;
# stdlib.c 245
    push_eax              # i (local)
    lea_eax,[ebp+DWORD] %24
    push_eax              # 0
    mov_eax, %0
    pop_ebx               # =
    mov_[ebx],eax
    pop_eax               # ;
:_realloc_loop2
    push_eax              # i (local)
    lea_eax,[ebp+DWORD] %24
    mov_eax,[eax]         # ?
    push_eax              # old_size (local)
    lea_eax,[ebp+DWORD] %20
    mov_eax,[eax]         # ?
    pop_ebx               # <s
    cmp_eax_ebx
    setl_al
    movzx_eax,al
    test_eax,eax          # !
    sete_al
    movzx_eax,al
    test_eax,eax          # if
    pop_eax
    je %_realloc_else3
    jmp %_realloc_loop_end2
# stdlib.c 246
:_realloc_else3 # no else
    push_eax              # result (local)
    lea_eax,[ebp+DWORD] %12
    mov_eax,[eax]         # ?
    push_eax              # i (local)
    lea_eax,[ebp+DWORD] %24
    mov_eax,[eax]         # ?
    push_eax              # 4
    mov_eax, %4
    pop_ebx               # *
    mul_ebx
    pop_ebx               # +
    add_eax,ebx
    push_eax              # old_ptr (local)
    lea_eax,[ebp+DWORD] %16
    mov_eax,[eax]         # ?
    push_eax              # i (local)
    lea_eax,[ebp+DWORD] %24
    mov_eax,[eax]         # ?
    push_eax              # 4
    mov_eax, %4
    pop_ebx               # *
    mul_ebx
    pop_ebx               # +
    add_eax,ebx
    mov_eax,[eax]         # ?
    pop_ebx               # =
    mov_[ebx],eax
    pop_eax               # ;
    push_eax              # i (local)
    lea_eax,[ebp+DWORD] %24
    push_eax              # $ (dup)
    mov_eax,[eax]         # ?
    push_eax              # 1
    mov_eax, %1
    pop_ebx               # +
    add_eax,ebx
    pop_ebx               # =
    mov_[ebx],eax
    push_eax              # 1
    mov_eax, %1
    pop_ebx               # -
    sub_ebx,eax
    mov_eax,ebx
    pop_eax               # ;
    jmp %_realloc_loop2
:_realloc_loop_end2
# stdlib.c 248
:_realloc_else1 # no else
    push_eax              # result (local)
    lea_eax,[ebp+DWORD] %12
    mov_eax,[eax]         # ?
    mov_ebx,[ebp]         # return
    push_ebx
    ret
    push_eax              # 0
    mov_eax, %0
    mov_ebx,[ebp]         # return
    push_ebx
    ret

:f_calloc
    pop_eax
    mov_[ebp],eax
    pop_eax
    push_eax              # S (local)
    lea_eax,[ebp+DWORD] %4
    pop_ebx               # =:
    mov_[eax],ebx
    pop_eax
    push_eax              # N (local)
    lea_eax,[ebp+DWORD] %8
    pop_ebx               # =:
    mov_[eax],ebx
    pop_eax
    push_eax              # len (local)
    lea_eax,[ebp+DWORD] %12
    push_eax              # N (local)
    lea_eax,[ebp+DWORD] %8
    mov_eax,[eax]         # ?
    push_eax              # S (local)
    lea_eax,[ebp+DWORD] %4
    mov_eax,[eax]         # ?
    pop_ebx               # *
    mul_ebx
    pop_ebx               # =
    mov_[ebx],eax
    pop_eax               # ;
    push_eax              # r (local)
    lea_eax,[ebp+DWORD] %16
    push_eax              # len (local)
    lea_eax,[ebp+DWORD] %12
    mov_eax,[eax]         # ?
    push_eax              # malloc (function)
    mov_eax, &f_malloc
    add_ebp, %20         # ()
    call_eax
    sub_ebp, %20
    pop_ebx               # =
    mov_[ebx],eax
    pop_eax               # ;
# stdlib.c 255
    push_eax              # i (local)
    lea_eax,[ebp+DWORD] %20
    push_eax              # 0
    mov_eax, %0
    pop_ebx               # =
    mov_[ebx],eax
    pop_eax               # ;
:_calloc_loop1
    push_eax              # i (local)
    lea_eax,[ebp+DWORD] %20
    mov_eax,[eax]         # ?
    push_eax              # len (local)
    lea_eax,[ebp+DWORD] %12
    mov_eax,[eax]         # ?
    pop_ebx               # <s
    cmp_eax_ebx
    setl_al
    movzx_eax,al
    test_eax,eax          # !
    sete_al
    movzx_eax,al
    test_eax,eax          # if
    pop_eax
    je %_calloc_else2
    jmp %_calloc_loop_end1
# stdlib.c 256
:_calloc_else2 # no else
    push_eax              # r (local)
    lea_eax,[ebp+DWORD] %16
    mov_eax,[eax]         # ?
    push_eax              # i (local)
    lea_eax,[ebp+DWORD] %20
    mov_eax,[eax]         # ?
    pop_ebx               # +
    add_eax,ebx
    push_eax              # 0
    mov_eax, %0
    pop_ebx               # =1
    mov_[ebx],al
    pop_eax               # ;
    push_eax              # i (local)
    lea_eax,[ebp+DWORD] %20
    push_eax              # $ (dup)
    mov_eax,[eax]         # ?
    push_eax              # 1
    mov_eax, %1
    pop_ebx               # +
    add_eax,ebx
    pop_ebx               # =
    mov_[ebx],eax
    push_eax              # 1
    mov_eax, %1
    pop_ebx               # -
    sub_ebx,eax
    mov_eax,ebx
    pop_eax               # ;
    jmp %_calloc_loop1
:_calloc_loop_end1
# stdlib.c 257
    push_eax              # r (local)
    lea_eax,[ebp+DWORD] %16
    mov_eax,[eax]         # ?
    mov_ebx,[ebp]         # return
    push_ebx
    ret
    push_eax              # 0
    mov_eax, %0
    mov_ebx,[ebp]         # return
    push_ebx
    ret

:f_free
    pop_eax
    mov_[ebp],eax
    pop_eax
    push_eax              # ptr (local)
    lea_eax,[ebp+DWORD] %4
    pop_ebx               # =:
    mov_[eax],ebx
    pop_eax
# stdlib.c 263
    push_eax              # 0
    mov_eax, %0
    mov_ebx,[ebp]         # return
    push_ebx
    ret
    push_eax              # 0
    mov_eax, %0
    mov_ebx,[ebp]         # return
    push_ebx
    ret

:f_fwrite
    pop_eax
    mov_[ebp],eax
    pop_eax
    push_eax              # stream (local)
    lea_eax,[ebp+DWORD] %4
    pop_ebx               # =:
    mov_[eax],ebx
    pop_eax
    push_eax              # nmemb (local)
    lea_eax,[ebp+DWORD] %8
    pop_ebx               # =:
    mov_[eax],ebx
    pop_eax
    push_eax              # size (local)
    lea_eax,[ebp+DWORD] %12
    pop_ebx               # =:
    mov_[eax],ebx
    pop_eax
    push_eax              # ptr (local)
    lea_eax,[ebp+DWORD] %16
    pop_ebx               # =:
    mov_[eax],ebx
    pop_eax
# stdlib.c 268
    push_eax              # 4
    mov_eax, %4
    push_eax              # stream (local)
    lea_eax,[ebp+DWORD] %4
    mov_eax,[eax]         # ->
    add_eax, %0
    mov_eax,[eax]         # ?
    push_eax              # ptr (local)
    lea_eax,[ebp+DWORD] %16
    mov_eax,[eax]         # ?
    push_eax              # size (local)
    lea_eax,[ebp+DWORD] %12
    mov_eax,[eax]         # ?
    push_eax              # nmemb (local)
    lea_eax,[ebp+DWORD] %8
    mov_eax,[eax]         # ?
    pop_ebx               # *
    mul_ebx
    push_eax              # sys_int80 (function)
    mov_eax, &f_sys_int80
    add_ebp, %20         # ()
    call_eax
    sub_ebp, %20
    mov_ebx,[ebp]         # return
    push_ebx
    ret
    push_eax              # 0
    mov_eax, %0
    mov_ebx,[ebp]         # return
    push_ebx
    ret

:f_fputc
    pop_eax
    mov_[ebp],eax
    pop_eax
    push_eax              # stream (local)
    lea_eax,[ebp+DWORD] %4
    pop_ebx               # =:
    mov_[eax],ebx
    pop_eax
    push_eax              # c (local)
    lea_eax,[ebp+DWORD] %8
    pop_ebx               # =:
    mov_[eax],ebx
    pop_eax
# stdlib.c 273
    push_eax              # 4
    mov_eax, %4
    push_eax              # stream (local)
    lea_eax,[ebp+DWORD] %4
    mov_eax,[eax]         # ->
    add_eax, %0
    mov_eax,[eax]         # ?
    push_eax              # c (local)
    lea_eax,[ebp+DWORD] %8
    push_eax              # 1
    mov_eax, %1
    push_eax              # sys_int80 (function)
    mov_eax, &f_sys_int80
    add_ebp, %12         # ()
    call_eax
    sub_ebp, %12
    mov_ebx,[ebp]         # return
    push_ebx
    ret
    push_eax              # 0
    mov_eax, %0
    mov_ebx,[ebp]         # return
    push_ebx
    ret

:f_fputs
    pop_eax
    mov_[ebp],eax
    pop_eax
    push_eax              # stream (local)
    lea_eax,[ebp+DWORD] %4
    pop_ebx               # =:
    mov_[eax],ebx
    pop_eax
    push_eax              # s (local)
    lea_eax,[ebp+DWORD] %8
    pop_ebx               # =:
    mov_[eax],ebx
    pop_eax
# stdlib.c 278
    push_eax              # 4
    mov_eax, %4
    push_eax              # stream (local)
    lea_eax,[ebp+DWORD] %4
    mov_eax,[eax]         # ->
    add_eax, %0
    mov_eax,[eax]         # ?
    push_eax              # s (local)
    lea_eax,[ebp+DWORD] %8
    mov_eax,[eax]         # ?
    push_eax              # s (local)
    lea_eax,[ebp+DWORD] %8
    mov_eax,[eax]         # ?
    push_eax              # strlen (function)
    mov_eax, &f_strlen
    add_ebp, %12         # ()
    call_eax
    sub_ebp, %12
    push_eax              # sys_int80 (function)
    mov_eax, &f_sys_int80
    add_ebp, %12         # ()
    call_eax
    sub_ebp, %12
    mov_ebx,[ebp]         # return
    push_ebx
    ret
    push_eax              # 0
    mov_eax, %0
    mov_ebx,[ebp]         # return
    push_ebx
    ret

:f___sys_printf
    pop_eax
    mov_[ebp],eax
    pop_eax
    push_eax              # args (local)
    lea_eax,[ebp+DWORD] %4
    pop_ebx               # =:
    mov_[eax],ebx
    pop_eax
    push_eax              # format (local)
    lea_eax,[ebp+DWORD] %8
    pop_ebx               # =:
    mov_[eax],ebx
    pop_eax
    push_eax              # len (local)
    lea_eax,[ebp+DWORD] %12
    pop_ebx               # =:
    mov_[eax],ebx
    pop_eax
    push_eax              # trg (local)
    lea_eax,[ebp+DWORD] %16
    pop_ebx               # =:
    mov_[eax],ebx
    pop_eax
    push_eax              # stream (local)
    lea_eax,[ebp+DWORD] %20
    pop_ebx               # =:
    mov_[eax],ebx
    pop_eax
    push_eax              # l (local)
    lea_eax,[ebp+DWORD] %44
    push_eax              # 0
    mov_eax, %0
    pop_ebx               # =
    mov_[ebx],eax
    pop_eax               # ;
    push_eax              # cnt (local)
    lea_eax,[ebp+DWORD] %52
    push_eax              # 0
    mov_eax, %0
    pop_ebx               # =
    mov_[ebx],eax
    pop_eax               # ;
    push_eax              # org_format (local)
    lea_eax,[ebp+DWORD] %56
    push_eax              # format (local)
    lea_eax,[ebp+DWORD] %8
    mov_eax,[eax]         # ?
    pop_ebx               # =
    mov_[ebx],eax
    pop_eax               # ;
# stdlib.c 292
:___sys_printf_loop1
# stdlib.c 293
# stdlib.c 294
    push_eax              # len (local)
    lea_eax,[ebp+DWORD] %12
    mov_eax,[eax]         # ?
    push_eax              # 0
    mov_eax, %0
    pop_ebx               # ==
    cmp_eax_ebx
    sete_al
    movzx_eax,al
    test_eax,eax          # if
    pop_eax
    je %___sys_printf_else2
# stdlib.c 295
    jmp %___sys_printf_loop_end1
# stdlib.c 296
:___sys_printf_else2 # no else
    push_eax              # l (local)
    lea_eax,[ebp+DWORD] %44
    mov_eax,[eax]         # ?
    push_eax              # 0
    mov_eax, %0
    pop_ebx               # >s
    cmp_eax_ebx
    setg_al
    movzx_eax,al
    test_eax,eax          # if
    pop_eax
    je %___sys_printf_else3
# stdlib.c 297
# stdlib.c 298
    push_eax              # stream (local)
    lea_eax,[ebp+DWORD] %20
    mov_eax,[eax]         # ?
    push_eax              # 0
    mov_eax, %0
    pop_ebx               # !=
    cmp_eax_ebx
    setne_al
    movzx_eax,al
    test_eax,eax          # if
    pop_eax
    je %___sys_printf_else4
# stdlib.c 299
    push_eax              # s (local)
    lea_eax,[ebp+DWORD] %48
    mov_eax,[eax]         # ?
    mov_al,[eax]          # ?1
    movzx_eax,al
    movsx_eax,al          # char
    push_eax              # stream (local)
    lea_eax,[ebp+DWORD] %20
    mov_eax,[eax]         # ?
    push_eax              # fputc (function)
    mov_eax, &f_fputc
    add_ebp, %60         # ()
    call_eax
    sub_ebp, %60
    pop_eax               # ;
    jmp %___sys_printf_else_end4
:___sys_printf_else4
# stdlib.c 300
    push_eax              # trg (local)
    lea_eax,[ebp+DWORD] %16
    mov_eax,[eax]         # ?
    push_eax              # 0
    mov_eax, %0
    pop_ebx               # !=
    cmp_eax_ebx
    setne_al
    movzx_eax,al
    test_eax,eax          # if
    pop_eax
    je %___sys_printf_else5
# stdlib.c 301
    push_eax              # trg (local)
    lea_eax,[ebp+DWORD] %16
    push_eax              # $ (dup)
    mov_eax,[eax]         # ?
    push_eax              # 1
    mov_eax, %1
    pop_ebx               # +
    add_eax,ebx
    pop_ebx               # =
    mov_[ebx],eax
    push_eax              # 1
    mov_eax, %1
    pop_ebx               # -
    sub_ebx,eax
    mov_eax,ebx
    push_eax              # s (local)
    lea_eax,[ebp+DWORD] %48
    mov_eax,[eax]         # ?
    mov_al,[eax]          # ?1
    movzx_eax,al
    movsx_eax,al          # char
    pop_ebx               # =1
    mov_[ebx],al
    pop_eax               # ;
:___sys_printf_else5 # no else
:___sys_printf_else_end4
# stdlib.c 302
    push_eax              # s (local)
    lea_eax,[ebp+DWORD] %48
    push_eax              # $ (dup)
    mov_eax,[eax]         # ?
    push_eax              # 1
    mov_eax, %1
    pop_ebx               # +
    add_eax,ebx
    pop_ebx               # =
    mov_[ebx],eax
    push_eax              # 1
    mov_eax, %1
    pop_ebx               # -
    sub_ebx,eax
    mov_eax,ebx
    pop_eax               # ;
# stdlib.c 303
    push_eax              # l (local)
    lea_eax,[ebp+DWORD] %44
    push_eax              # $ (dup)
    mov_eax,[eax]         # ?
    push_eax              # 1
    mov_eax, %1
    pop_ebx               # -
    sub_ebx,eax
    mov_eax,ebx
    pop_ebx               # =
    mov_[ebx],eax
    push_eax              # 1
    mov_eax, %1
    pop_ebx               # +
    add_eax,ebx
    pop_eax               # ;
# stdlib.c 304
    push_eax              # cnt (local)
    lea_eax,[ebp+DWORD] %52
    push_eax              # $ (dup)
    mov_eax,[eax]         # ?
    push_eax              # 1
    mov_eax, %1
    pop_ebx               # +
    add_eax,ebx
    pop_ebx               # =
    mov_[ebx],eax
    push_eax              # 1
    mov_eax, %1
    pop_ebx               # -
    sub_ebx,eax
    mov_eax,ebx
    pop_eax               # ;
# stdlib.c 305
    push_eax              # len (local)
    lea_eax,[ebp+DWORD] %12
    mov_eax,[eax]         # ?
    push_eax              # 0
    mov_eax, %0
    pop_ebx               # >s
    cmp_eax_ebx
    setg_al
    movzx_eax,al
    test_eax,eax          # if
    pop_eax
    je %___sys_printf_else6
# stdlib.c 306
    push_eax              # len (local)
    lea_eax,[ebp+DWORD] %12
    push_eax              # $ (dup)
    mov_eax,[eax]         # ?
    push_eax              # 1
    mov_eax, %1
    pop_ebx               # -
    sub_ebx,eax
    mov_eax,ebx
    pop_ebx               # =
    mov_[ebx],eax
    push_eax              # 1
    mov_eax, %1
    pop_ebx               # +
    add_eax,ebx
    pop_eax               # ;
:___sys_printf_else6 # no else
# stdlib.c 308
:___sys_printf_else3 # no else
    push_eax              # l (local)
    lea_eax,[ebp+DWORD] %44
    mov_eax,[eax]         # ?
    push_eax              # 0
    mov_eax, %0
    pop_ebx               # ==
    cmp_eax_ebx
    sete_al
    movzx_eax,al
    test_eax,eax          # if
    pop_eax
    je %___sys_printf_else7
# stdlib.c 309
# stdlib.c 310
    push_eax              # format (local)
    lea_eax,[ebp+DWORD] %8
    mov_eax,[eax]         # ?
    mov_al,[eax]          # ?1
    movzx_eax,al
    movsx_eax,al          # char
    push_eax              # 0
    mov_eax, %0
    pop_ebx               # ==
    cmp_eax_ebx
    sete_al
    movzx_eax,al
    test_eax,eax          # if
    pop_eax
    je %___sys_printf_else8
# stdlib.c 311
    jmp %___sys_printf_loop_end1
# stdlib.c 312
:___sys_printf_else8 # no else
    push_eax              # s (local)
    lea_eax,[ebp+DWORD] %48
    push_eax              # buffer (local)
    lea_eax,[ebp+DWORD] %24
    pop_ebx               # =
    mov_[ebx],eax
    pop_eax               # ;
# stdlib.c 313
    push_eax              # l (local)
    lea_eax,[ebp+DWORD] %44
    push_eax              # 1
    mov_eax, %1
    pop_ebx               # =
    mov_[ebx],eax
    pop_eax               # ;
# stdlib.c 314
    push_eax              # format (local)
    lea_eax,[ebp+DWORD] %8
    mov_eax,[eax]         # ?
    mov_al,[eax]          # ?1
    movzx_eax,al
    movsx_eax,al          # char
    push_eax              # 37
    mov_eax, %37
    pop_ebx               # ==
    cmp_eax_ebx
    sete_al
    movzx_eax,al
    test_eax,eax          # if
    pop_eax
    je %___sys_printf_else9
# stdlib.c 315
# stdlib.c 316
    push_eax              # format (local)
    lea_eax,[ebp+DWORD] %8
    push_eax              # $ (dup)
    mov_eax,[eax]         # ?
    push_eax              # 1
    mov_eax, %1
    pop_ebx               # +
    add_eax,ebx
    pop_ebx               # =
    mov_[ebx],eax
    push_eax              # 1
    mov_eax, %1
    pop_ebx               # -
    sub_ebx,eax
    mov_eax,ebx
    pop_eax               # ;
# stdlib.c 317
    push_eax              # format (local)
    lea_eax,[ebp+DWORD] %8
    mov_eax,[eax]         # ?
    mov_al,[eax]          # ?1
    movzx_eax,al
    movsx_eax,al          # char
    push_eax              # 37
    mov_eax, %37
    pop_ebx               # ==
    cmp_eax_ebx
    sete_al
    movzx_eax,al
    test_eax,eax          # if
    pop_eax
    je %___sys_printf_else10
# stdlib.c 318
    push_eax              # buffer (local)
    lea_eax,[ebp+DWORD] %24
    push_eax              # 0
    mov_eax, %0
    pop_ebx               # +
    add_eax,ebx
    push_eax              # 37
    mov_eax, %37
    pop_ebx               # =1
    mov_[ebx],al
    pop_eax               # ;
    jmp %___sys_printf_else_end10
:___sys_printf_else10
# stdlib.c 320
    push_eax              # modifier (local)
    lea_eax,[ebp+DWORD] %60
    push_eax              # 0
    mov_eax, %0
    pop_ebx               # =
    mov_[ebx],eax
    pop_eax               # ;
    push_eax              # sign (local)
    lea_eax,[ebp+DWORD] %64
    push_eax              # 1
    mov_eax, %1
    pop_ebx               # =
    mov_[ebx],eax
    pop_eax               # ;
# stdlib.c 323
    push_eax              # format (local)
    lea_eax,[ebp+DWORD] %8
    mov_eax,[eax]         # ?
    mov_al,[eax]          # ?1
    movzx_eax,al
    movsx_eax,al          # char
    push_eax              # 45
    mov_eax, %45
    pop_ebx               # ==
    cmp_eax_ebx
    sete_al
    movzx_eax,al
    test_eax,eax          # if
    pop_eax
    je %___sys_printf_else11
# stdlib.c 324
# stdlib.c 325
    push_eax              # sign (local)
    lea_eax,[ebp+DWORD] %64
    push_eax              # 4294967295
    mov_eax, %4294967295
    pop_ebx               # =
    mov_[ebx],eax
    pop_eax               # ;
# stdlib.c 326
    push_eax              # format (local)
    lea_eax,[ebp+DWORD] %8
    push_eax              # $ (dup)
    mov_eax,[eax]         # ?
    push_eax              # 1
    mov_eax, %1
    pop_ebx               # +
    add_eax,ebx
    pop_ebx               # =
    mov_[ebx],eax
    push_eax              # 1
    mov_eax, %1
    pop_ebx               # -
    sub_ebx,eax
    mov_eax,ebx
    pop_eax               # ;
# stdlib.c 328
:___sys_printf_else11 # no else
:___sys_printf_loop12
    push_eax              # 48
    mov_eax, %48
    push_eax              # format (local)
    lea_eax,[ebp+DWORD] %8
    mov_eax,[eax]         # ?
    mov_al,[eax]          # ?1
    movzx_eax,al
    movsx_eax,al          # char
    pop_ebx               # <=s
    cmp_eax_ebx
    setle_al
    movzx_eax,al
    test_eax,eax          # &&
    je %___sys_printf_and_end13
    pop_eax
    push_eax              # format (local)
    lea_eax,[ebp+DWORD] %8
    mov_eax,[eax]         # ?
    mov_al,[eax]          # ?1
    movzx_eax,al
    movsx_eax,al          # char
    push_eax              # 57
    mov_eax, %57
    pop_ebx               # <=s
    cmp_eax_ebx
    setle_al
    movzx_eax,al
:___sys_printf_and_end13
    test_eax,eax          # !
    sete_al
    movzx_eax,al
    test_eax,eax          # if
    pop_eax
    je %___sys_printf_else14
    jmp %___sys_printf_loop_end12
# stdlib.c 329
# stdlib.c 330
:___sys_printf_else14 # no else
    push_eax              # modifier (local)
    lea_eax,[ebp+DWORD] %60
    push_eax              # 10
    mov_eax, %10
    push_eax              # modifier (local)
    lea_eax,[ebp+DWORD] %60
    mov_eax,[eax]         # ?
    pop_ebx               # *
    mul_ebx
    push_eax              # format (local)
    lea_eax,[ebp+DWORD] %8
    mov_eax,[eax]         # ?
    mov_al,[eax]          # ?1
    movzx_eax,al
    movsx_eax,al          # char
    pop_ebx               # +
    add_eax,ebx
    push_eax              # 48
    mov_eax, %48
    pop_ebx               # -
    sub_ebx,eax
    mov_eax,ebx
    pop_ebx               # =
    mov_[ebx],eax
    pop_eax               # ;
# stdlib.c 331
    push_eax              # format (local)
    lea_eax,[ebp+DWORD] %8
    push_eax              # $ (dup)
    mov_eax,[eax]         # ?
    push_eax              # 1
    mov_eax, %1
    pop_ebx               # +
    add_eax,ebx
    pop_ebx               # =
    mov_[ebx],eax
    push_eax              # 1
    mov_eax, %1
    pop_ebx               # -
    sub_ebx,eax
    mov_eax,ebx
    pop_eax               # ;
    jmp %___sys_printf_loop12
:___sys_printf_loop_end12
# stdlib.c 333
    push_eax              # format (local)
    lea_eax,[ebp+DWORD] %8
    mov_eax,[eax]         # ?
    mov_al,[eax]          # ?1
    movzx_eax,al
    movsx_eax,al          # char
    push_eax              # 115
    mov_eax, %115
    pop_ebx               # ==
    cmp_eax_ebx
    sete_al
    movzx_eax,al
    test_eax,eax          # if
    pop_eax
    je %___sys_printf_else15
# stdlib.c 334
# stdlib.c 335
    push_eax              # s (local)
    lea_eax,[ebp+DWORD] %48
    push_eax              # args (local)
    lea_eax,[ebp+DWORD] %4
    push_eax              # $ (dup)
    mov_eax,[eax]         # ?
    push_eax              # 4
    mov_eax, %4
    pop_ebx               # +
    add_eax,ebx
    pop_ebx               # =
    mov_[ebx],eax
    push_eax              # 4
    mov_eax, %4
    pop_ebx               # -
    sub_ebx,eax
    mov_eax,ebx
    mov_eax,[eax]         # ?
    pop_ebx               # =
    mov_[ebx],eax
    pop_eax               # ;
# stdlib.c 336
    push_eax              # l (local)
    lea_eax,[ebp+DWORD] %44
    push_eax              # s (local)
    lea_eax,[ebp+DWORD] %48
    mov_eax,[eax]         # ?
    push_eax              # strlen (function)
    mov_eax, &f_strlen
    add_ebp, %68         # ()
    call_eax
    sub_ebp, %68
    pop_ebx               # =
    mov_[ebx],eax
    pop_eax               # ;
    jmp %___sys_printf_else_end15
:___sys_printf_else15
# stdlib.c 338
    push_eax              # format (local)
    lea_eax,[ebp+DWORD] %8
    mov_eax,[eax]         # ?
    mov_al,[eax]          # ?1
    movzx_eax,al
    movsx_eax,al          # char
    push_eax              # 100
    mov_eax, %100
    pop_ebx               # ==
    cmp_eax_ebx
    sete_al
    movzx_eax,al
    test_eax,eax          # if
    pop_eax
    je %___sys_printf_else16
# stdlib.c 339
    push_eax              # v (local)
    lea_eax,[ebp+DWORD] %68
    push_eax              # args (local)
    lea_eax,[ebp+DWORD] %4
    mov_eax,[eax]         # ?
    mov_eax,[eax]         # ?
    pop_ebx               # =
    mov_[ebx],eax
    pop_eax               # ;
    push_eax              # b (local)
    lea_eax,[ebp+DWORD] %72
    push_eax              # 20
    mov_eax, %20
    pop_ebx               # =
    mov_[ebx],eax
    pop_eax               # ;
# stdlib.c 342
    push_eax              # v (local)
    lea_eax,[ebp+DWORD] %68
    mov_eax,[eax]         # ?
    push_eax              # 0
    mov_eax, %0
    pop_ebx               # ==
    cmp_eax_ebx
    sete_al
    movzx_eax,al
    test_eax,eax          # if
    pop_eax
    je %___sys_printf_else17
# stdlib.c 343
    push_eax              # buffer (local)
    lea_eax,[ebp+DWORD] %24
    push_eax              # b (local)
    lea_eax,[ebp+DWORD] %72
    push_eax              # $ (dup)
    mov_eax,[eax]         # ?
    push_eax              # 1
    mov_eax, %1
    pop_ebx               # -
    sub_ebx,eax
    mov_eax,ebx
    pop_ebx               # =
    mov_[ebx],eax
    pop_ebx               # +
    add_eax,ebx
    push_eax              # 48
    mov_eax, %48
    pop_ebx               # =1
    mov_[ebx],al
    pop_eax               # ;
    jmp %___sys_printf_else_end17
:___sys_printf_else17
# stdlib.c 345
# stdlib.c 346
    push_eax              # v (local)
    lea_eax,[ebp+DWORD] %68
    mov_eax,[eax]         # ?
    push_eax              # 0
    mov_eax, %0
    pop_ebx               # <s
    cmp_eax_ebx
    setl_al
    movzx_eax,al
    test_eax,eax          # if
    pop_eax
    je %___sys_printf_else18
# stdlib.c 346
    push_eax              # v (local)
    lea_eax,[ebp+DWORD] %68
    push_eax              # 0
    mov_eax, %0
    push_eax              # v (local)
    lea_eax,[ebp+DWORD] %68
    mov_eax,[eax]         # ?
    pop_ebx               # -
    sub_ebx,eax
    mov_eax,ebx
    pop_ebx               # =
    mov_[ebx],eax
    pop_eax               # ;
# stdlib.c 347
:___sys_printf_else18 # no else
:___sys_printf_loop19
    push_eax              # v (local)
    lea_eax,[ebp+DWORD] %68
    mov_eax,[eax]         # ?
    push_eax              # 0
    mov_eax, %0
    pop_ebx               # >s
    cmp_eax_ebx
    setg_al
    movzx_eax,al
    test_eax,eax          # !
    sete_al
    movzx_eax,al
    test_eax,eax          # if
    pop_eax
    je %___sys_printf_else20
    jmp %___sys_printf_loop_end19
# stdlib.c 348
:___sys_printf_else20 # no else
    push_eax              # buffer (local)
    lea_eax,[ebp+DWORD] %24
    push_eax              # b (local)
    lea_eax,[ebp+DWORD] %72
    push_eax              # $ (dup)
    mov_eax,[eax]         # ?
    push_eax              # 1
    mov_eax, %1
    pop_ebx               # -
    sub_ebx,eax
    mov_eax,ebx
    pop_ebx               # =
    mov_[ebx],eax
    pop_ebx               # +
    add_eax,ebx
    push_eax              # 48
    mov_eax, %48
    push_eax              # v (local)
    lea_eax,[ebp+DWORD] %68
    mov_eax,[eax]         # ?
    push_eax              # 10
    mov_eax, %10
    mov_ebx,eax           # %s
    pop_eax
    cdq
    idiv_ebx
    mov_eax,edx pop_ebx               # +
    add_eax,ebx
    pop_ebx               # =1
    mov_[ebx],al
    pop_eax               # ;
    push_eax              # v (local)
    lea_eax,[ebp+DWORD] %68
    push_eax              # v (local)
    lea_eax,[ebp+DWORD] %68
    mov_eax,[eax]         # ?
    push_eax              # 10
    mov_eax, %10
    mov_ebx,eax           # /s
    pop_eax
    cdq
    idiv_ebx
    pop_ebx               # =
    mov_[ebx],eax
    pop_eax               # ;
    jmp %___sys_printf_loop19
:___sys_printf_loop_end19
# stdlib.c 349
    push_eax              # args (local)
    lea_eax,[ebp+DWORD] %4
    mov_eax,[eax]         # ?
    mov_eax,[eax]         # ?
    push_eax              # 0
    mov_eax, %0
    pop_ebx               # <s
    cmp_eax_ebx
    setl_al
    movzx_eax,al
    test_eax,eax          # if
    pop_eax
    je %___sys_printf_else21
# stdlib.c 350
    push_eax              # buffer (local)
    lea_eax,[ebp+DWORD] %24
    push_eax              # b (local)
    lea_eax,[ebp+DWORD] %72
    push_eax              # $ (dup)
    mov_eax,[eax]         # ?
    push_eax              # 1
    mov_eax, %1
    pop_ebx               # -
    sub_ebx,eax
    mov_eax,ebx
    pop_ebx               # =
    mov_[ebx],eax
    pop_ebx               # +
    add_eax,ebx
    push_eax              # 45
    mov_eax, %45
    pop_ebx               # =1
    mov_[ebx],al
    pop_eax               # ;
:___sys_printf_else21 # no else
:___sys_printf_else_end17
# stdlib.c 352
    push_eax              # l (local)
    lea_eax,[ebp+DWORD] %44
    push_eax              # 20
    mov_eax, %20
    push_eax              # b (local)
    lea_eax,[ebp+DWORD] %72
    mov_eax,[eax]         # ?
    pop_ebx               # -
    sub_ebx,eax
    mov_eax,ebx
    pop_ebx               # =
    mov_[ebx],eax
    pop_eax               # ;
# stdlib.c 353
    push_eax              # modifier (local)
    lea_eax,[ebp+DWORD] %60
    mov_eax,[eax]         # ?
    push_eax              # 0
    mov_eax, %0
    pop_ebx               # >s
    cmp_eax_ebx
    setg_al
    movzx_eax,al
    test_eax,eax          # if
    pop_eax
    je %___sys_printf_else22
# stdlib.c 354
# stdlib.c 355
    push_eax              # modifier (local)
    lea_eax,[ebp+DWORD] %60
    mov_eax,[eax]         # ?
    push_eax              # l (local)
    lea_eax,[ebp+DWORD] %44
    mov_eax,[eax]         # ?
    pop_ebx               # >s
    cmp_eax_ebx
    setg_al
    movzx_eax,al
    test_eax,eax          # if
    pop_eax
    je %___sys_printf_else23
# stdlib.c 356
# stdlib.c 357
    push_eax              # sign (local)
    lea_eax,[ebp+DWORD] %64
    mov_eax,[eax]         # ?
    push_eax              # 4294967295
    mov_eax, %4294967295
    pop_ebx               # ==
    cmp_eax_ebx
    sete_al
    movzx_eax,al
    test_eax,eax          # if
    pop_eax
    je %___sys_printf_else24
# stdlib.c 358
# stdlib.c 359
    push_eax              # i (local)
    lea_eax,[ebp+DWORD] %76
    push_eax              # 20
    mov_eax, %20
    push_eax              # modifier (local)
    lea_eax,[ebp+DWORD] %60
    mov_eax,[eax]         # ?
    pop_ebx               # -
    sub_ebx,eax
    mov_eax,ebx
    pop_ebx               # =
    mov_[ebx],eax
    pop_eax               # ;
:___sys_printf_loop25
    push_eax              # i (local)
    lea_eax,[ebp+DWORD] %76
    mov_eax,[eax]         # ?
    push_eax              # 20
    mov_eax, %20
    pop_ebx               # <s
    cmp_eax_ebx
    setl_al
    movzx_eax,al
    test_eax,eax          # !
    sete_al
    movzx_eax,al
    test_eax,eax          # if
    pop_eax
    je %___sys_printf_else26
    jmp %___sys_printf_loop_end25
# stdlib.c 360
:___sys_printf_else26 # no else
    push_eax              # buffer (local)
    lea_eax,[ebp+DWORD] %24
    push_eax              # i (local)
    lea_eax,[ebp+DWORD] %76
    mov_eax,[eax]         # ?
    pop_ebx               # +
    add_eax,ebx
    push_eax              # b (local)
    lea_eax,[ebp+DWORD] %72
    mov_eax,[eax]         # ?
    push_eax              # 20
    mov_eax, %20
    pop_ebx               # <s
    cmp_eax_ebx
    setl_al
    movzx_eax,al
    test_eax,eax          # if
    pop_eax
    je %___sys_printf_else27
    push_eax              # buffer (local)
    lea_eax,[ebp+DWORD] %24
    push_eax              # b (local)
    lea_eax,[ebp+DWORD] %72
    push_eax              # $ (dup)
    mov_eax,[eax]         # ?
    push_eax              # 1
    mov_eax, %1
    pop_ebx               # +
    add_eax,ebx
    pop_ebx               # =
    mov_[ebx],eax
    push_eax              # 1
    mov_eax, %1
    pop_ebx               # -
    sub_ebx,eax
    mov_eax,ebx
    pop_ebx               # +
    add_eax,ebx
    mov_al,[eax]          # ?1
    movzx_eax,al
    movsx_eax,al          # char
    jmp %___sys_printf_else_end27
:___sys_printf_else27
    push_eax              # 32
    mov_eax, %32
:___sys_printf_else_end27
    pop_ebx               # =1
    mov_[ebx],al
    pop_eax               # ;
    push_eax              # i (local)
    lea_eax,[ebp+DWORD] %76
    push_eax              # $ (dup)
    mov_eax,[eax]         # ?
    push_eax              # 1
    mov_eax, %1
    pop_ebx               # +
    add_eax,ebx
    pop_ebx               # =
    mov_[ebx],eax
    push_eax              # 1
    mov_eax, %1
    pop_ebx               # -
    sub_ebx,eax
    mov_eax,ebx
    pop_eax               # ;
    jmp %___sys_printf_loop25
:___sys_printf_loop_end25
# stdlib.c 361
    push_eax              # b (local)
    lea_eax,[ebp+DWORD] %72
    push_eax              # 20
    mov_eax, %20
    push_eax              # modifier (local)
    lea_eax,[ebp+DWORD] %60
    mov_eax,[eax]         # ?
    pop_ebx               # -
    sub_ebx,eax
    mov_eax,ebx
    pop_ebx               # =
    mov_[ebx],eax
    pop_eax               # ;
    jmp %___sys_printf_else_end24
:___sys_printf_else24
# stdlib.c 364
:___sys_printf_loop28
    push_eax              # l (local)
    lea_eax,[ebp+DWORD] %44
    mov_eax,[eax]         # ?
    push_eax              # modifier (local)
    lea_eax,[ebp+DWORD] %60
    mov_eax,[eax]         # ?
    pop_ebx               # <s
    cmp_eax_ebx
    setl_al
    movzx_eax,al
    test_eax,eax          # !
    sete_al
    movzx_eax,al
    test_eax,eax          # if
    pop_eax
    je %___sys_printf_else29
    jmp %___sys_printf_loop_end28
# stdlib.c 365
:___sys_printf_else29 # no else
    push_eax              # buffer (local)
    lea_eax,[ebp+DWORD] %24
    push_eax              # b (local)
    lea_eax,[ebp+DWORD] %72
    push_eax              # $ (dup)
    mov_eax,[eax]         # ?
    push_eax              # 1
    mov_eax, %1
    pop_ebx               # -
    sub_ebx,eax
    mov_eax,ebx
    pop_ebx               # =
    mov_[ebx],eax
    pop_ebx               # +
    add_eax,ebx
    push_eax              # 32
    mov_eax, %32
    pop_ebx               # =1
    mov_[ebx],al
    pop_eax               # ;
    push_eax              # l (local)
    lea_eax,[ebp+DWORD] %44
    push_eax              # $ (dup)
    mov_eax,[eax]         # ?
    push_eax              # 1
    mov_eax, %1
    pop_ebx               # +
    add_eax,ebx
    pop_ebx               # =
    mov_[ebx],eax
    push_eax              # 1
    mov_eax, %1
    pop_ebx               # -
    sub_ebx,eax
    mov_eax,ebx
    pop_eax               # ;
    jmp %___sys_printf_loop28
:___sys_printf_loop_end28
:___sys_printf_else_end24
# stdlib.c 367
:___sys_printf_else23 # no else
    push_eax              # l (local)
    lea_eax,[ebp+DWORD] %44
    push_eax              # modifier (local)
    lea_eax,[ebp+DWORD] %60
    mov_eax,[eax]         # ?
    pop_ebx               # =
    mov_[ebx],eax
    pop_eax               # ;
# stdlib.c 369
:___sys_printf_else22 # no else
    push_eax              # s (local)
    lea_eax,[ebp+DWORD] %48
    push_eax              # buffer (local)
    lea_eax,[ebp+DWORD] %24
    push_eax              # b (local)
    lea_eax,[ebp+DWORD] %72
    mov_eax,[eax]         # ?
    pop_ebx               # +
    add_eax,ebx
    pop_ebx               # =
    mov_[ebx],eax
    pop_eax               # ;
# stdlib.c 370
    push_eax              # args (local)
    lea_eax,[ebp+DWORD] %4
    push_eax              # $ (dup)
    mov_eax,[eax]         # ?
    push_eax              # 4
    mov_eax, %4
    pop_ebx               # +
    add_eax,ebx
    pop_ebx               # =
    mov_[ebx],eax
    push_eax              # 4
    mov_eax, %4
    pop_ebx               # -
    sub_ebx,eax
    mov_eax,ebx
    pop_eax               # ;
    jmp %___sys_printf_else_end16
:___sys_printf_else16
# stdlib.c 372
    push_eax              # format (local)
    lea_eax,[ebp+DWORD] %8
    mov_eax,[eax]         # ?
    mov_al,[eax]          # ?1
    movzx_eax,al
    movsx_eax,al          # char
    push_eax              # 117
    mov_eax, %117
    pop_ebx               # ==
    cmp_eax_ebx
    sete_al
    movzx_eax,al
    test_eax,eax          # if
    pop_eax
    je %___sys_printf_else30
# stdlib.c 373
    push_eax              # v (local)
    lea_eax,[ebp+DWORD] %68
    push_eax              # args (local)
    lea_eax,[ebp+DWORD] %4
    push_eax              # $ (dup)
    mov_eax,[eax]         # ?
    push_eax              # 4
    mov_eax, %4
    pop_ebx               # +
    add_eax,ebx
    pop_ebx               # =
    mov_[ebx],eax
    push_eax              # 4
    mov_eax, %4
    pop_ebx               # -
    sub_ebx,eax
    mov_eax,ebx
    mov_eax,[eax]         # ?
    pop_ebx               # =
    mov_[ebx],eax
    pop_eax               # ;
# stdlib.c 375
    push_eax              # v (local)
    lea_eax,[ebp+DWORD] %68
    mov_eax,[eax]         # ?
    push_eax              # 0
    mov_eax, %0
    pop_ebx               # ==
    cmp_eax_ebx
    sete_al
    movzx_eax,al
    test_eax,eax          # if
    pop_eax
    je %___sys_printf_else31
# stdlib.c 376
    push_eax              # buffer (local)
    lea_eax,[ebp+DWORD] %24
    push_eax              # 0
    mov_eax, %0
    pop_ebx               # +
    add_eax,ebx
    push_eax              # 48
    mov_eax, %48
    pop_ebx               # =1
    mov_[ebx],al
    pop_eax               # ;
    jmp %___sys_printf_else_end31
:___sys_printf_else31
# stdlib.c 378
# stdlib.c 379
    push_eax              # l (local)
    lea_eax,[ebp+DWORD] %44
    push_eax              # 20
    mov_eax, %20
    pop_ebx               # =
    mov_[ebx],eax
    pop_eax               # ;
# stdlib.c 380
:___sys_printf_loop32
    push_eax              # v (local)
    lea_eax,[ebp+DWORD] %68
    mov_eax,[eax]         # ?
    push_eax              # 0
    mov_eax, %0
    pop_ebx               # >
    cmp_eax_ebx
    seta_al
    movzx_eax,al
    test_eax,eax          # !
    sete_al
    movzx_eax,al
    test_eax,eax          # if
    pop_eax
    je %___sys_printf_else33
    jmp %___sys_printf_loop_end32
# stdlib.c 381
:___sys_printf_else33 # no else
    push_eax              # buffer (local)
    lea_eax,[ebp+DWORD] %24
    push_eax              # l (local)
    lea_eax,[ebp+DWORD] %44
    push_eax              # $ (dup)
    mov_eax,[eax]         # ?
    push_eax              # 1
    mov_eax, %1
    pop_ebx               # -
    sub_ebx,eax
    mov_eax,ebx
    pop_ebx               # =
    mov_[ebx],eax
    pop_ebx               # +
    add_eax,ebx
    push_eax              # 48
    mov_eax, %48
    push_eax              # v (local)
    lea_eax,[ebp+DWORD] %68
    mov_eax,[eax]         # ?
    push_eax              # 10
    mov_eax, %10
    mov_ebx,eax           # %
    pop_eax
    mov_edx, %0
    div_ebx
    mov_eax,edx
    pop_ebx               # +
    add_eax,ebx
    pop_ebx               # =1
    mov_[ebx],al
    pop_eax               # ;
    push_eax              # v (local)
    lea_eax,[ebp+DWORD] %68
    push_eax              # v (local)
    lea_eax,[ebp+DWORD] %68
    mov_eax,[eax]         # ?
    push_eax              # 10
    mov_eax, %10
    mov_ebx,eax           # /
    pop_eax
    mov_edx, %0
    div_ebx
    pop_ebx               # =
    mov_[ebx],eax
    pop_eax               # ;
    jmp %___sys_printf_loop32
:___sys_printf_loop_end32
# stdlib.c 382
    push_eax              # s (local)
    lea_eax,[ebp+DWORD] %48
    push_eax              # buffer (local)
    lea_eax,[ebp+DWORD] %24
    push_eax              # l (local)
    lea_eax,[ebp+DWORD] %44
    mov_eax,[eax]         # ?
    pop_ebx               # +
    add_eax,ebx
    pop_ebx               # =
    mov_[ebx],eax
    pop_eax               # ;
# stdlib.c 383
    push_eax              # l (local)
    lea_eax,[ebp+DWORD] %44
    push_eax              # 20
    mov_eax, %20
    push_eax              # l (local)
    lea_eax,[ebp+DWORD] %44
    mov_eax,[eax]         # ?
    pop_ebx               # -
    sub_ebx,eax
    mov_eax,ebx
    pop_ebx               # =
    mov_[ebx],eax
    pop_eax               # ;
:___sys_printf_else_end31
    jmp %___sys_printf_else_end30
:___sys_printf_else30
# stdlib.c 386
    push_eax              # format (local)
    lea_eax,[ebp+DWORD] %8
    mov_eax,[eax]         # ?
    mov_al,[eax]          # ?1
    movzx_eax,al
    movsx_eax,al          # char
    push_eax              # 120
    mov_eax, %120
    pop_ebx               # ==
    cmp_eax_ebx
    sete_al
    movzx_eax,al
    test_eax,eax          # ||
    jne %___sys_printf_or_end34
    pop_eax
    push_eax              # format (local)
    lea_eax,[ebp+DWORD] %8
    mov_eax,[eax]         # ?
    mov_al,[eax]          # ?1
    movzx_eax,al
    movsx_eax,al          # char
    push_eax              # 112
    mov_eax, %112
    pop_ebx               # ==
    cmp_eax_ebx
    sete_al
    movzx_eax,al
:___sys_printf_or_end34
    test_eax,eax          # if
    pop_eax
    je %___sys_printf_else35
# stdlib.c 387
    push_eax              # v (local)
    lea_eax,[ebp+DWORD] %68
    push_eax              # args (local)
    lea_eax,[ebp+DWORD] %4
    push_eax              # $ (dup)
    mov_eax,[eax]         # ?
    push_eax              # 4
    mov_eax, %4
    pop_ebx               # +
    add_eax,ebx
    pop_ebx               # =
    mov_[ebx],eax
    push_eax              # 4
    mov_eax, %4
    pop_ebx               # -
    sub_ebx,eax
    mov_eax,ebx
    mov_eax,[eax]         # ?
    pop_ebx               # =
    mov_[ebx],eax
    pop_eax               # ;
# stdlib.c 389
    push_eax              # v (local)
    lea_eax,[ebp+DWORD] %68
    mov_eax,[eax]         # ?
    push_eax              # 0
    mov_eax, %0
    pop_ebx               # ==
    cmp_eax_ebx
    sete_al
    movzx_eax,al
    test_eax,eax          # if
    pop_eax
    je %___sys_printf_else36
# stdlib.c 390
    push_eax              # buffer (local)
    lea_eax,[ebp+DWORD] %24
    push_eax              # 0
    mov_eax, %0
    pop_ebx               # +
    add_eax,ebx
    push_eax              # 48
    mov_eax, %48
    pop_ebx               # =1
    mov_[ebx],al
    pop_eax               # ;
    jmp %___sys_printf_else_end36
:___sys_printf_else36
# stdlib.c 392
# stdlib.c 393
    push_eax              # l (local)
    lea_eax,[ebp+DWORD] %44
    push_eax              # 20
    mov_eax, %20
    pop_ebx               # =
    mov_[ebx],eax
    pop_eax               # ;
# stdlib.c 394
:___sys_printf_loop37
    push_eax              # v (local)
    lea_eax,[ebp+DWORD] %68
    mov_eax,[eax]         # ?
    push_eax              # 0
    mov_eax, %0
    pop_ebx               # !=
    cmp_eax_ebx
    setne_al
    movzx_eax,al
    test_eax,eax          # !
    sete_al
    movzx_eax,al
    test_eax,eax          # if
    pop_eax
    je %___sys_printf_else38
    jmp %___sys_printf_loop_end37
# stdlib.c 395
:___sys_printf_else38 # no else
    push_eax              # buffer (local)
    lea_eax,[ebp+DWORD] %24
    push_eax              # l (local)
    lea_eax,[ebp+DWORD] %44
    push_eax              # $ (dup)
    mov_eax,[eax]         # ?
    push_eax              # 1
    mov_eax, %1
    pop_ebx               # -
    sub_ebx,eax
    mov_eax,ebx
    pop_ebx               # =
    mov_[ebx],eax
    pop_ebx               # +
    add_eax,ebx
    push_eax              # v (local)
    lea_eax,[ebp+DWORD] %68
    mov_eax,[eax]         # ?
    push_eax              # 15
    mov_eax, %15
    pop_ebx               # &
    and_eax,ebx
    push_eax              # 10
    mov_eax, %10
    pop_ebx               # <
    cmp_eax_ebx
    setb_al
    movzx_eax,al
    test_eax,eax          # if
    pop_eax
    je %___sys_printf_else39
    push_eax              # 48
    mov_eax, %48
    jmp %___sys_printf_else_end39
:___sys_printf_else39
    push_eax              # 97
    mov_eax, %97
    push_eax              # 10
    mov_eax, %10
    pop_ebx               # -
    sub_ebx,eax
    mov_eax,ebx
:___sys_printf_else_end39
    push_eax              # v (local)
    lea_eax,[ebp+DWORD] %68
    mov_eax,[eax]         # ?
    push_eax              # 15
    mov_eax, %15
    pop_ebx               # &
    and_eax,ebx
    pop_ebx               # +
    add_eax,ebx
    pop_ebx               # =1
    mov_[ebx],al
    pop_eax               # ;
    push_eax              # v (local)
    lea_eax,[ebp+DWORD] %68
    push_eax              # $ (dup)
    mov_eax,[eax]         # ?
    push_eax              # 4
    mov_eax, %4
    mov_ecx,eax           # >>
    pop_eax
    shr_eax,cl
    pop_ebx               # =
    mov_[ebx],eax
    pop_eax               # ;
    jmp %___sys_printf_loop37
:___sys_printf_loop_end37
# stdlib.c 396
    push_eax              # s (local)
    lea_eax,[ebp+DWORD] %48
    push_eax              # buffer (local)
    lea_eax,[ebp+DWORD] %24
    push_eax              # l (local)
    lea_eax,[ebp+DWORD] %44
    mov_eax,[eax]         # ?
    pop_ebx               # +
    add_eax,ebx
    pop_ebx               # =
    mov_[ebx],eax
    pop_eax               # ;
# stdlib.c 397
    push_eax              # l (local)
    lea_eax,[ebp+DWORD] %44
    push_eax              # 20
    mov_eax, %20
    push_eax              # l (local)
    lea_eax,[ebp+DWORD] %44
    mov_eax,[eax]         # ?
    pop_ebx               # -
    sub_ebx,eax
    mov_eax,ebx
    pop_ebx               # =
    mov_[ebx],eax
    pop_eax               # ;
:___sys_printf_else_end36
    jmp %___sys_printf_else_end35
:___sys_printf_else35
# stdlib.c 400
    push_eax              # format (local)
    lea_eax,[ebp+DWORD] %8
    mov_eax,[eax]         # ?
    mov_al,[eax]          # ?1
    movzx_eax,al
    movsx_eax,al          # char
    push_eax              # 99
    mov_eax, %99
    pop_ebx               # ==
    cmp_eax_ebx
    sete_al
    movzx_eax,al
    test_eax,eax          # if
    pop_eax
    je %___sys_printf_else40
# stdlib.c 401
# stdlib.c 402
    push_eax              # buffer (local)
    lea_eax,[ebp+DWORD] %24
    push_eax              # 0
    mov_eax, %0
    pop_ebx               # +
    add_eax,ebx
    push_eax              # args (local)
    lea_eax,[ebp+DWORD] %4
    push_eax              # $ (dup)
    mov_eax,[eax]         # ?
    push_eax              # 4
    mov_eax, %4
    pop_ebx               # +
    add_eax,ebx
    pop_ebx               # =
    mov_[ebx],eax
    push_eax              # 4
    mov_eax, %4
    pop_ebx               # -
    sub_ebx,eax
    mov_eax,ebx
    mov_eax,[eax]         # ?
    pop_ebx               # =1
    mov_[ebx],al
    pop_eax               # ;
    jmp %___sys_printf_else_end40
:___sys_printf_else40
# stdlib.c 405
# stdlib.c 406
    push_eax              # '__sys_printf %'
    mov_eax, &string_0
    push_eax              # stderr (global)
    mov_eax, &g_stderr
    mov_eax,[eax]         # ?
    push_eax              # fputs (function)
    mov_eax, &f_fputs
    add_ebp, %68         # ()
    call_eax
    sub_ebp, %68
    pop_eax               # ;
# stdlib.c 407
    push_eax              # format (local)
    lea_eax,[ebp+DWORD] %8
    mov_eax,[eax]         # ?
    mov_al,[eax]          # ?1
    movzx_eax,al
    movsx_eax,al          # char
    push_eax              # stderr (global)
    mov_eax, &g_stderr
    mov_eax,[eax]         # ?
    push_eax              # fputc (function)
    mov_eax, &f_fputc
    add_ebp, %68         # ()
    call_eax
    sub_ebp, %68
    pop_eax               # ;
# stdlib.c 408
    push_eax              # ' '
    mov_eax, &string_1
    push_eax              # stderr (global)
    mov_eax, &g_stderr
    mov_eax,[eax]         # ?
    push_eax              # fputs (function)
    mov_eax, &f_fputs
    add_ebp, %68         # ()
    call_eax
    sub_ebp, %68
    pop_eax               # ;
# stdlib.c 409
    push_eax              # org_format (local)
    lea_eax,[ebp+DWORD] %56
    mov_eax,[eax]         # ?
    push_eax              # stderr (global)
    mov_eax, &g_stderr
    mov_eax,[eax]         # ?
    push_eax              # fputs (function)
    mov_eax, &f_fputs
    add_ebp, %68         # ()
    call_eax
    sub_ebp, %68
    pop_eax               # ;
# stdlib.c 410
    push_eax              # '\n'
    mov_eax, &string_2
    push_eax              # stderr (global)
    mov_eax, &g_stderr
    mov_eax,[eax]         # ?
    push_eax              # fputs (function)
    mov_eax, &f_fputs
    add_ebp, %68         # ()
    call_eax
    sub_ebp, %68
    pop_eax               # ;
# stdlib.c 411
    push_eax              # 1
    mov_eax, %1
    push_eax              # exit (function)
    mov_eax, &f_exit
    add_ebp, %68         # ()
    call_eax
    sub_ebp, %68
    pop_eax               # ;
:___sys_printf_else_end40
:___sys_printf_else_end35
:___sys_printf_else_end30
:___sys_printf_else_end16
:___sys_printf_else_end15
:___sys_printf_else_end10
    jmp %___sys_printf_else_end9
:___sys_printf_else9
# stdlib.c 416
# stdlib.c 417
    push_eax              # buffer (local)
    lea_eax,[ebp+DWORD] %24
    push_eax              # 0
    mov_eax, %0
    pop_ebx               # +
    add_eax,ebx
    push_eax              # format (local)
    lea_eax,[ebp+DWORD] %8
    mov_eax,[eax]         # ?
    mov_al,[eax]          # ?1
    movzx_eax,al
    movsx_eax,al          # char
    pop_ebx               # =1
    mov_[ebx],al
    pop_eax               # ;
# stdlib.c 418
    push_eax              # s (local)
    lea_eax,[ebp+DWORD] %48
    push_eax              # buffer (local)
    lea_eax,[ebp+DWORD] %24
    pop_ebx               # =
    mov_[ebx],eax
    pop_eax               # ;
# stdlib.c 419
    push_eax              # l (local)
    lea_eax,[ebp+DWORD] %44
    push_eax              # 1
    mov_eax, %1
    pop_ebx               # =
    mov_[ebx],eax
    pop_eax               # ;
:___sys_printf_else_end9
# stdlib.c 421
    push_eax              # format (local)
    lea_eax,[ebp+DWORD] %8
    push_eax              # $ (dup)
    mov_eax,[eax]         # ?
    push_eax              # 1
    mov_eax, %1
    pop_ebx               # +
    add_eax,ebx
    pop_ebx               # =
    mov_[ebx],eax
    push_eax              # 1
    mov_eax, %1
    pop_ebx               # -
    sub_ebx,eax
    mov_eax,ebx
    pop_eax               # ;
:___sys_printf_else7 # no else
    jmp %___sys_printf_loop1
:___sys_printf_loop_end1
# stdlib.c 424
    push_eax              # len (local)
    lea_eax,[ebp+DWORD] %12
    mov_eax,[eax]         # ?
    push_eax              # 0
    mov_eax, %0
    pop_ebx               # !=
    cmp_eax_ebx
    setne_al
    movzx_eax,al
    test_eax,eax          # &&
    je %___sys_printf_and_end41
    pop_eax
    push_eax              # trg (local)
    lea_eax,[ebp+DWORD] %16
    mov_eax,[eax]         # ?
    push_eax              # 0
    mov_eax, %0
    pop_ebx               # !=
    cmp_eax_ebx
    setne_al
    movzx_eax,al
:___sys_printf_and_end41
    test_eax,eax          # if
    pop_eax
    je %___sys_printf_else42
# stdlib.c 425
    push_eax              # trg (local)
    lea_eax,[ebp+DWORD] %16
    mov_eax,[eax]         # ?
    push_eax              # 0
    mov_eax, %0
    pop_ebx               # =1
    mov_[ebx],al
    pop_eax               # ;
# stdlib.c 426
:___sys_printf_else42 # no else
    push_eax              # cnt (local)
    lea_eax,[ebp+DWORD] %52
    mov_eax,[eax]         # ?
    mov_ebx,[ebp]         # return
    push_ebx
    ret
    push_eax              # 0
    mov_eax, %0
    mov_ebx,[ebp]         # return
    push_ebx
    ret

:f_va_end
    pop_eax
    mov_[ebp],eax
    pop_eax
    push_eax              # ap (local)
    lea_eax,[ebp+DWORD] %4
    pop_ebx               # =:
    mov_[eax],ebx
    pop_eax
    push_eax              # 0
    mov_eax, %0
    mov_ebx,[ebp]         # return
    push_ebx
    ret

:f_fprintf
    pop_eax
    mov_[ebp],eax
    pop_eax
    push_eax              # __var_args (local)
    lea_eax,[ebp+DWORD] %4
    pop_ebx               # =:
    mov_[eax],ebx
    pop_eax
    push_eax              # format (local)
    lea_eax,[ebp+DWORD] %8
    pop_ebx               # =:
    mov_[eax],ebx
    pop_eax
    push_eax              # stream (local)
    lea_eax,[ebp+DWORD] %12
    pop_ebx               # =:
    mov_[eax],ebx
    pop_eax
# stdlib.c 435
    push_eax              # ap (local)
    lea_eax,[ebp+DWORD] %16
    push_eax              # __var_args (local)
    lea_eax,[ebp+DWORD] %4
    mov_eax,[eax]         # ?
    pop_ebx               # =
    mov_[ebx],eax
    pop_eax               # ;
# stdlib.c 436
    push_eax              # stream (local)
    lea_eax,[ebp+DWORD] %12
    mov_eax,[eax]         # ?
    push_eax              # 0
    mov_eax, %0
    push_eax              # 4294967295
    mov_eax, %4294967295
    push_eax              # format (local)
    lea_eax,[ebp+DWORD] %8
    mov_eax,[eax]         # ?
    push_eax              # ap (local)
    lea_eax,[ebp+DWORD] %16
    mov_eax,[eax]         # ?
    push_eax              # __sys_printf (function)
    mov_eax, &f___sys_printf
    add_ebp, %20         # ()
    call_eax
    sub_ebp, %20
    mov_ebx,[ebp]         # return
    push_ebx
    ret
    push_eax              # 0
    mov_eax, %0
    mov_ebx,[ebp]         # return
    push_ebx
    ret

:f_printf
    pop_eax
    mov_[ebp],eax
    pop_eax
    push_eax              # __var_args (local)
    lea_eax,[ebp+DWORD] %4
    pop_ebx               # =:
    mov_[eax],ebx
    pop_eax
    push_eax              # format (local)
    lea_eax,[ebp+DWORD] %8
    pop_ebx               # =:
    mov_[eax],ebx
    pop_eax
# stdlib.c 442
    push_eax              # ap (local)
    lea_eax,[ebp+DWORD] %12
    push_eax              # __var_args (local)
    lea_eax,[ebp+DWORD] %4
    mov_eax,[eax]         # ?
    pop_ebx               # =
    mov_[ebx],eax
    pop_eax               # ;
# stdlib.c 443
    push_eax              # stdout (global)
    mov_eax, &g_stdout
    mov_eax,[eax]         # ?
    push_eax              # 0
    mov_eax, %0
    push_eax              # 4294967295
    mov_eax, %4294967295
    push_eax              # format (local)
    lea_eax,[ebp+DWORD] %8
    mov_eax,[eax]         # ?
    push_eax              # ap (local)
    lea_eax,[ebp+DWORD] %12
    mov_eax,[eax]         # ?
    push_eax              # __sys_printf (function)
    mov_eax, &f___sys_printf
    add_ebp, %16         # ()
    call_eax
    sub_ebp, %16
    mov_ebx,[ebp]         # return
    push_ebx
    ret
    push_eax              # 0
    mov_eax, %0
    mov_ebx,[ebp]         # return
    push_ebx
    ret

:f_sprintf
    pop_eax
    mov_[ebp],eax
    pop_eax
    push_eax              # __var_args (local)
    lea_eax,[ebp+DWORD] %4
    pop_ebx               # =:
    mov_[eax],ebx
    pop_eax
    push_eax              # format (local)
    lea_eax,[ebp+DWORD] %8
    pop_ebx               # =:
    mov_[eax],ebx
    pop_eax
    push_eax              # str (local)
    lea_eax,[ebp+DWORD] %12
    pop_ebx               # =:
    mov_[eax],ebx
    pop_eax
# stdlib.c 449
    push_eax              # ap (local)
    lea_eax,[ebp+DWORD] %16
    push_eax              # __var_args (local)
    lea_eax,[ebp+DWORD] %4
    mov_eax,[eax]         # ?
    pop_ebx               # =
    mov_[ebx],eax
    pop_eax               # ;
# stdlib.c 450
    push_eax              # 0
    mov_eax, %0
    push_eax              # str (local)
    lea_eax,[ebp+DWORD] %12
    mov_eax,[eax]         # ?
    push_eax              # 4294967295
    mov_eax, %4294967295
    push_eax              # format (local)
    lea_eax,[ebp+DWORD] %8
    mov_eax,[eax]         # ?
    push_eax              # ap (local)
    lea_eax,[ebp+DWORD] %16
    mov_eax,[eax]         # ?
    push_eax              # __sys_printf (function)
    mov_eax, &f___sys_printf
    add_ebp, %20         # ()
    call_eax
    sub_ebp, %20
    mov_ebx,[ebp]         # return
    push_ebx
    ret
    push_eax              # 0
    mov_eax, %0
    mov_ebx,[ebp]         # return
    push_ebx
    ret

:f_snprintf
    pop_eax
    mov_[ebp],eax
    pop_eax
    push_eax              # __var_args (local)
    lea_eax,[ebp+DWORD] %4
    pop_ebx               # =:
    mov_[eax],ebx
    pop_eax
    push_eax              # format (local)
    lea_eax,[ebp+DWORD] %8
    pop_ebx               # =:
    mov_[eax],ebx
    pop_eax
    push_eax              # size (local)
    lea_eax,[ebp+DWORD] %12
    pop_ebx               # =:
    mov_[eax],ebx
    pop_eax
    push_eax              # str (local)
    lea_eax,[ebp+DWORD] %16
    pop_ebx               # =:
    mov_[eax],ebx
    pop_eax
# stdlib.c 455
    push_eax              # ap (local)
    lea_eax,[ebp+DWORD] %20
    push_eax              # __var_args (local)
    lea_eax,[ebp+DWORD] %4
    mov_eax,[eax]         # ?
    pop_ebx               # =
    mov_[ebx],eax
    pop_eax               # ;
# stdlib.c 456
    push_eax              # 0
    mov_eax, %0
    push_eax              # str (local)
    lea_eax,[ebp+DWORD] %16
    mov_eax,[eax]         # ?
    push_eax              # size (local)
    lea_eax,[ebp+DWORD] %12
    mov_eax,[eax]         # ?
    push_eax              # format (local)
    lea_eax,[ebp+DWORD] %8
    mov_eax,[eax]         # ?
    push_eax              # ap (local)
    lea_eax,[ebp+DWORD] %20
    mov_eax,[eax]         # ?
    push_eax              # __sys_printf (function)
    mov_eax, &f___sys_printf
    add_ebp, %24         # ()
    call_eax
    sub_ebp, %24
    mov_ebx,[ebp]         # return
    push_ebx
    ret
    push_eax              # 0
    mov_eax, %0
    mov_ebx,[ebp]         # return
    push_ebx
    ret

:f_vsnprintf
    pop_eax
    mov_[ebp],eax
    pop_eax
    push_eax              # ap (local)
    lea_eax,[ebp+DWORD] %4
    pop_ebx               # =:
    mov_[eax],ebx
    pop_eax
    push_eax              # format (local)
    lea_eax,[ebp+DWORD] %8
    pop_ebx               # =:
    mov_[eax],ebx
    pop_eax
    push_eax              # size (local)
    lea_eax,[ebp+DWORD] %12
    pop_ebx               # =:
    mov_[eax],ebx
    pop_eax
    push_eax              # str (local)
    lea_eax,[ebp+DWORD] %16
    pop_ebx               # =:
    mov_[eax],ebx
    pop_eax
# stdlib.c 461
    push_eax              # 0
    mov_eax, %0
    push_eax              # str (local)
    lea_eax,[ebp+DWORD] %16
    mov_eax,[eax]         # ?
    push_eax              # size (local)
    lea_eax,[ebp+DWORD] %12
    mov_eax,[eax]         # ?
    push_eax              # format (local)
    lea_eax,[ebp+DWORD] %8
    mov_eax,[eax]         # ?
    push_eax              # ap (local)
    lea_eax,[ebp+DWORD] %4
    mov_eax,[eax]         # ?
    push_eax              # __sys_printf (function)
    mov_eax, &f___sys_printf
    add_ebp, %20         # ()
    call_eax
    sub_ebp, %20
    mov_ebx,[ebp]         # return
    push_ebx
    ret
    push_eax              # 0
    mov_eax, %0
    mov_ebx,[ebp]         # return
    push_ebx
    ret

:f_open
    pop_eax
    mov_[ebp],eax
    pop_eax
    push_eax              # __var_args (local)
    lea_eax,[ebp+DWORD] %4
    pop_ebx               # =:
    mov_[eax],ebx
    pop_eax
    push_eax              # flag (local)
    lea_eax,[ebp+DWORD] %8
    pop_ebx               # =:
    mov_[eax],ebx
    pop_eax
    push_eax              # filename (local)
    lea_eax,[ebp+DWORD] %12
    pop_ebx               # =:
    mov_[eax],ebx
    pop_eax
    push_eax              # mode (local)
    lea_eax,[ebp+DWORD] %16
    push_eax              # 0
    mov_eax, %0
    pop_ebx               # =
    mov_[ebx],eax
    pop_eax               # ;
# stdlib.c 477
    push_eax              # flag (local)
    lea_eax,[ebp+DWORD] %8
    mov_eax,[eax]         # ?
    push_eax              # 1
    mov_eax, %1
    pop_ebx               # &
    and_eax,ebx
    push_eax              # 0
    mov_eax, %0
    pop_ebx               # !=
    cmp_eax_ebx
    setne_al
    movzx_eax,al
    test_eax,eax          # if
    pop_eax
    je %_open_else1
# stdlib.c 478
# stdlib.c 480
    push_eax              # ap (local)
    lea_eax,[ebp+DWORD] %20
    push_eax              # __var_args (local)
    lea_eax,[ebp+DWORD] %4
    mov_eax,[eax]         # ?
    pop_ebx               # =
    mov_[ebx],eax
    pop_eax               # ;
# stdlib.c 481
    push_eax              # mode (local)
    lea_eax,[ebp+DWORD] %16
    push_eax              # ap (local)
    lea_eax,[ebp+DWORD] %20
    mov_eax,[eax]         # ?
    push_eax              # 0
    mov_eax, %0
    push_eax              # 4
    mov_eax, %4
    pop_ebx               # *
    mul_ebx
    pop_ebx               # +
    add_eax,ebx
    mov_eax,[eax]         # ?
    pop_ebx               # =
    mov_[ebx],eax
    pop_eax               # ;
# stdlib.c 483
:_open_else1 # no else
    push_eax              # 5
    mov_eax, %5
    push_eax              # filename (local)
    lea_eax,[ebp+DWORD] %12
    mov_eax,[eax]         # ?
    push_eax              # flag (local)
    lea_eax,[ebp+DWORD] %8
    mov_eax,[eax]         # ?
    push_eax              # mode (local)
    lea_eax,[ebp+DWORD] %16
    mov_eax,[eax]         # ?
    push_eax              # sys_int80 (function)
    mov_eax, &f_sys_int80
    add_ebp, %20         # ()
    call_eax
    sub_ebp, %20
    mov_ebx,[ebp]         # return
    push_ebx
    ret
    push_eax              # 0
    mov_eax, %0
    mov_ebx,[ebp]         # return
    push_ebx
    ret

:f_close
    pop_eax
    mov_[ebp],eax
    pop_eax
    push_eax              # fd (local)
    lea_eax,[ebp+DWORD] %4
    pop_ebx               # =:
    mov_[eax],ebx
    pop_eax
# stdlib.c 488
    push_eax              # 6
    mov_eax, %6
    push_eax              # fd (local)
    lea_eax,[ebp+DWORD] %4
    mov_eax,[eax]         # ?
    push_eax              # 0
    mov_eax, %0
    push_eax              # 0
    mov_eax, %0
    push_eax              # sys_int80 (function)
    mov_eax, &f_sys_int80
    add_ebp, %8         # ()
    call_eax
    sub_ebp, %8
    mov_ebx,[ebp]         # return
    push_ebx
    ret
    push_eax              # 0
    mov_eax, %0
    mov_ebx,[ebp]         # return
    push_ebx
    ret

:f_read
    pop_eax
    mov_[ebp],eax
    pop_eax
    push_eax              # count (local)
    lea_eax,[ebp+DWORD] %4
    pop_ebx               # =:
    mov_[eax],ebx
    pop_eax
    push_eax              # buf (local)
    lea_eax,[ebp+DWORD] %8
    pop_ebx               # =:
    mov_[eax],ebx
    pop_eax
    push_eax              # fd (local)
    lea_eax,[ebp+DWORD] %12
    pop_ebx               # =:
    mov_[eax],ebx
    pop_eax
# stdlib.c 493
    push_eax              # 3
    mov_eax, %3
    push_eax              # fd (local)
    lea_eax,[ebp+DWORD] %12
    mov_eax,[eax]         # ?
    push_eax              # buf (local)
    lea_eax,[ebp+DWORD] %8
    mov_eax,[eax]         # ?
    push_eax              # count (local)
    lea_eax,[ebp+DWORD] %4
    mov_eax,[eax]         # ?
    push_eax              # sys_int80 (function)
    mov_eax, &f_sys_int80
    add_ebp, %16         # ()
    call_eax
    sub_ebp, %16
    mov_ebx,[ebp]         # return
    push_ebx
    ret
    push_eax              # 0
    mov_eax, %0
    mov_ebx,[ebp]         # return
    push_ebx
    ret

:f_lseek
    pop_eax
    mov_[ebp],eax
    pop_eax
    push_eax              # whence (local)
    lea_eax,[ebp+DWORD] %4
    pop_ebx               # =:
    mov_[eax],ebx
    pop_eax
    push_eax              # offset (local)
    lea_eax,[ebp+DWORD] %8
    pop_ebx               # =:
    mov_[eax],ebx
    pop_eax
    push_eax              # fd (local)
    lea_eax,[ebp+DWORD] %12
    pop_ebx               # =:
    mov_[eax],ebx
    pop_eax
# stdlib.c 498
    push_eax              # 19
    mov_eax, %19
    push_eax              # fd (local)
    lea_eax,[ebp+DWORD] %12
    mov_eax,[eax]         # ?
    push_eax              # offset (local)
    lea_eax,[ebp+DWORD] %8
    mov_eax,[eax]         # ?
    push_eax              # whence (local)
    lea_eax,[ebp+DWORD] %4
    mov_eax,[eax]         # ?
    push_eax              # sys_int80 (function)
    mov_eax, &f_sys_int80
    add_ebp, %16         # ()
    call_eax
    sub_ebp, %16
    mov_ebx,[ebp]         # return
    push_ebx
    ret
    push_eax              # 0
    mov_eax, %0
    mov_ebx,[ebp]         # return
    push_ebx
    ret

:f_fopen
    pop_eax
    mov_[ebp],eax
    pop_eax
    push_eax              # mode (local)
    lea_eax,[ebp+DWORD] %4
    pop_ebx               # =:
    mov_[eax],ebx
    pop_eax
    push_eax              # pathname (local)
    lea_eax,[ebp+DWORD] %8
    pop_ebx               # =:
    mov_[eax],ebx
    pop_eax
    push_eax              # rw (local)
    lea_eax,[ebp+DWORD] %12
    push_eax              # mode (local)
    lea_eax,[ebp+DWORD] %4
    mov_eax,[eax]         # ?
    mov_al,[eax]          # ?1
    movzx_eax,al
    movsx_eax,al          # char
    pop_ebx               # =1
    mov_[ebx],al
    pop_eax               # ;
# stdlib.c 504
    push_eax              # mode (local)
    lea_eax,[ebp+DWORD] %4
    mov_eax,[eax]         # ?
    mov_al,[eax]          # ?1
    movzx_eax,al
    movsx_eax,al          # char
    push_eax              # 114
    mov_eax, %114
    pop_ebx               # ==
    cmp_eax_ebx
    sete_al
    movzx_eax,al
    test_eax,eax          # ||
    jne %_fopen_or_end1
    pop_eax
    push_eax              # mode (local)
    lea_eax,[ebp+DWORD] %4
    mov_eax,[eax]         # ?
    mov_al,[eax]          # ?1
    movzx_eax,al
    movsx_eax,al          # char
    push_eax              # 119
    mov_eax, %119
    pop_ebx               # ==
    cmp_eax_ebx
    sete_al
    movzx_eax,al
:_fopen_or_end1
    test_eax,eax          # if
    pop_eax
    je %_fopen_else2
# stdlib.c 505
    push_eax              # mode (local)
    lea_eax,[ebp+DWORD] %4
    push_eax              # $ (dup)
    mov_eax,[eax]         # ?
    push_eax              # 1
    mov_eax, %1
    pop_ebx               # +
    add_eax,ebx
    pop_ebx               # =
    mov_[ebx],eax
    push_eax              # 1
    mov_eax, %1
    pop_ebx               # -
    sub_ebx,eax
    mov_eax,ebx
    pop_eax               # ;
:_fopen_else2 # no else
    push_eax              # bin (local)
    lea_eax,[ebp+DWORD] %16
    push_eax              # 0
    mov_eax, %0
    pop_ebx               # =
    mov_[ebx],eax
    pop_eax               # ;
# stdlib.c 507
    push_eax              # mode (local)
    lea_eax,[ebp+DWORD] %4
    mov_eax,[eax]         # ?
    mov_al,[eax]          # ?1
    movzx_eax,al
    movsx_eax,al          # char
    push_eax              # 98
    mov_eax, %98
    pop_ebx               # ==
    cmp_eax_ebx
    sete_al
    movzx_eax,al
    test_eax,eax          # if
    pop_eax
    je %_fopen_else3
# stdlib.c 508
# stdlib.c 509
    push_eax              # bin (local)
    lea_eax,[ebp+DWORD] %16
    push_eax              # 1
    mov_eax, %1
    pop_ebx               # =
    mov_[ebx],eax
    pop_eax               # ;
# stdlib.c 510
    push_eax              # mode (local)
    lea_eax,[ebp+DWORD] %4
    push_eax              # $ (dup)
    mov_eax,[eax]         # ?
    push_eax              # 1
    mov_eax, %1
    pop_ebx               # +
    add_eax,ebx
    pop_ebx               # =
    mov_[ebx],eax
    push_eax              # 1
    mov_eax, %1
    pop_ebx               # -
    sub_ebx,eax
    mov_eax,ebx
    pop_eax               # ;
:_fopen_else3 # no else
    push_eax              # plus (local)
    lea_eax,[ebp+DWORD] %20
    push_eax              # 0
    mov_eax, %0
    pop_ebx               # =
    mov_[ebx],eax
    pop_eax               # ;
# stdlib.c 513
    push_eax              # mode (local)
    lea_eax,[ebp+DWORD] %4
    mov_eax,[eax]         # ?
    mov_al,[eax]          # ?1
    movzx_eax,al
    movsx_eax,al          # char
    push_eax              # 43
    mov_eax, %43
    pop_ebx               # ==
    cmp_eax_ebx
    sete_al
    movzx_eax,al
    test_eax,eax          # if
    pop_eax
    je %_fopen_else4
# stdlib.c 514
# stdlib.c 515
    push_eax              # plus (local)
    lea_eax,[ebp+DWORD] %20
    push_eax              # 1
    mov_eax, %1
    pop_ebx               # =
    mov_[ebx],eax
    pop_eax               # ;
# stdlib.c 516
    push_eax              # mode (local)
    lea_eax,[ebp+DWORD] %4
    push_eax              # $ (dup)
    mov_eax,[eax]         # ?
    push_eax              # 1
    mov_eax, %1
    pop_ebx               # +
    add_eax,ebx
    pop_ebx               # =
    mov_[ebx],eax
    push_eax              # 1
    mov_eax, %1
    pop_ebx               # -
    sub_ebx,eax
    mov_eax,ebx
    pop_eax               # ;
# stdlib.c 518
:_fopen_else4 # no else
    push_eax              # mode (local)
    lea_eax,[ebp+DWORD] %4
    mov_eax,[eax]         # ?
    mov_al,[eax]          # ?1
    movzx_eax,al
    movsx_eax,al          # char
    push_eax              # 0
    mov_eax, %0
    pop_ebx               # !=
    cmp_eax_ebx
    setne_al
    movzx_eax,al
    test_eax,eax          # if
    pop_eax
    je %_fopen_else5
# stdlib.c 519
# stdlib.c 520
    push_eax              # 'Mode %s should be 'r/w(b)(+)', 'w', or 'wb'\n'
    mov_eax, &string_3
    push_eax              # __var_args (local)
    lea_eax,[ebp+DWORD] %24
    push_eax              # mode (local)
    lea_eax,[ebp+DWORD] %4
    mov_eax,[eax]         # ?
    pop_ebx               # =
    mov_[ebx],eax
    pop_eax               # ;
    push_eax              # __var_args (local)
    lea_eax,[ebp+DWORD] %24
    push_eax              # printf (function)
    mov_eax, &f_printf
    add_ebp, %28         # ()
    call_eax
    sub_ebp, %28
    pop_eax               # ;
# stdlib.c 521
    push_eax              # 0
    mov_eax, %0
    mov_ebx,[ebp]         # return
    push_ebx
    ret
:_fopen_else5 # no else
    push_eax              # open_mode (local)
    lea_eax,[ebp+DWORD] %24
    push_eax              # rw (local)
    lea_eax,[ebp+DWORD] %12
    mov_al,[eax]          # ?1
    movzx_eax,al
    movsx_eax,al          # char
    push_eax              # 114
    mov_eax, %114
    pop_ebx               # ==
    cmp_eax_ebx
    sete_al
    movzx_eax,al
    test_eax,eax          # if
    pop_eax
    je %_fopen_else6
    push_eax              # plus (local)
    lea_eax,[ebp+DWORD] %20
    mov_eax,[eax]         # ?
    push_eax              # 1
    mov_eax, %1
    pop_ebx               # ==
    cmp_eax_ebx
    sete_al
    movzx_eax,al
    test_eax,eax          # if
    pop_eax
    je %_fopen_else7
    push_eax              # 2
    mov_eax, %2
    jmp %_fopen_else_end7
:_fopen_else7
    push_eax              # 0
    mov_eax, %0
:_fopen_else_end7
    jmp %_fopen_else_end6
:_fopen_else6
    push_eax              # plus (local)
    lea_eax,[ebp+DWORD] %20
    mov_eax,[eax]         # ?
    push_eax              # 1
    mov_eax, %1
    pop_ebx               # ==
    cmp_eax_ebx
    sete_al
    movzx_eax,al
    test_eax,eax          # if
    pop_eax
    je %_fopen_else8
    push_eax              # 2
    mov_eax, %2
    jmp %_fopen_else_end8
:_fopen_else8
    push_eax              # 1
    mov_eax, %1
:_fopen_else_end8
    push_eax              # 64
    mov_eax, %64
    pop_ebx               # |
    or_eax,ebx
    push_eax              # 512
    mov_eax, %512
    pop_ebx               # |
    or_eax,ebx
:_fopen_else_end6
    pop_ebx               # =
    mov_[ebx],eax
    pop_eax               # ;
    push_eax              # fh (local)
    lea_eax,[ebp+DWORD] %28
    push_eax              # 5
    mov_eax, %5
    push_eax              # pathname (local)
    lea_eax,[ebp+DWORD] %8
    mov_eax,[eax]         # ?
    push_eax              # open_mode (local)
    lea_eax,[ebp+DWORD] %24
    mov_eax,[eax]         # ?
    push_eax              # 511
    mov_eax, %511
    push_eax              # sys_int80 (function)
    mov_eax, &f_sys_int80
    add_ebp, %32         # ()
    call_eax
    sub_ebp, %32
    pop_ebx               # =
    mov_[ebx],eax
    pop_eax               # ;
# stdlib.c 528
    push_eax              # fh (local)
    lea_eax,[ebp+DWORD] %28
    mov_eax,[eax]         # ?
    push_eax              # 0
    mov_eax, %0
    pop_ebx               # <s
    cmp_eax_ebx
    setl_al
    movzx_eax,al
    test_eax,eax          # if
    pop_eax
    je %_fopen_else9
# stdlib.c 529
# stdlib.c 530
    push_eax              # 'fopen %s %s returned %d\n'
    mov_eax, &string_4
    push_eax              # __var_args (local)
    lea_eax,[ebp+DWORD] %32
    push_eax              # pathname (local)
    lea_eax,[ebp+DWORD] %8
    mov_eax,[eax]         # ?
    pop_ebx               # =
    mov_[ebx],eax
    pop_eax               # ;
    push_eax              # __var_args (local)
    lea_eax,[ebp+DWORD] %32
    push_eax              # 4
    mov_eax, %4
    pop_ebx               # +
    add_eax,ebx
    push_eax              # mode (local)
    lea_eax,[ebp+DWORD] %4
    mov_eax,[eax]         # ?
    pop_ebx               # =
    mov_[ebx],eax
    pop_eax               # ;
    push_eax              # __var_args (local)
    lea_eax,[ebp+DWORD] %32
    push_eax              # 8
    mov_eax, %8
    pop_ebx               # +
    add_eax,ebx
    push_eax              # fh (local)
    lea_eax,[ebp+DWORD] %28
    mov_eax,[eax]         # ?
    pop_ebx               # =
    mov_[ebx],eax
    pop_eax               # ;
    push_eax              # __var_args (local)
    lea_eax,[ebp+DWORD] %32
    push_eax              # printf (function)
    mov_eax, &f_printf
    add_ebp, %44         # ()
    call_eax
    sub_ebp, %44
    pop_eax               # ;
# stdlib.c 531
    push_eax              # 0
    mov_eax, %0
    mov_ebx,[ebp]         # return
    push_ebx
    ret
:_fopen_else9 # no else
    push_eax              # f (local)
    lea_eax,[ebp+DWORD] %32
    push_eax              # 8
    mov_eax, %8
    push_eax              # malloc (function)
    mov_eax, &f_malloc
    add_ebp, %36         # ()
    call_eax
    sub_ebp, %36
    pop_ebx               # =
    mov_[ebx],eax
    pop_eax               # ;
# stdlib.c 534
    push_eax              # f (local)
    lea_eax,[ebp+DWORD] %32
    mov_eax,[eax]         # ->
    add_eax, %0
    push_eax              # fh (local)
    lea_eax,[ebp+DWORD] %28
    mov_eax,[eax]         # ?
    pop_ebx               # =
    mov_[ebx],eax
    pop_eax               # ;
# stdlib.c 535
    push_eax              # f (local)
    lea_eax,[ebp+DWORD] %32
    mov_eax,[eax]         # ->
    add_eax, %4
    push_eax              # 0
    mov_eax, %0
    pop_ebx               # =
    mov_[ebx],eax
    pop_eax               # ;
# stdlib.c 536
    push_eax              # f (local)
    lea_eax,[ebp+DWORD] %32
    mov_eax,[eax]         # ?
    mov_ebx,[ebp]         # return
    push_ebx
    ret
    push_eax              # 0
    mov_eax, %0
    mov_ebx,[ebp]         # return
    push_ebx
    ret

:f_fdopen
    pop_eax
    mov_[ebp],eax
    pop_eax
    push_eax              # mode (local)
    lea_eax,[ebp+DWORD] %4
    pop_ebx               # =:
    mov_[eax],ebx
    pop_eax
    push_eax              # fd (local)
    lea_eax,[ebp+DWORD] %8
    pop_ebx               # =:
    mov_[eax],ebx
    pop_eax
    push_eax              # f (local)
    lea_eax,[ebp+DWORD] %12
    push_eax              # 8
    mov_eax, %8
    push_eax              # malloc (function)
    mov_eax, &f_malloc
    add_ebp, %16         # ()
    call_eax
    sub_ebp, %16
    pop_ebx               # =
    mov_[ebx],eax
    pop_eax               # ;
# stdlib.c 542
    push_eax              # f (local)
    lea_eax,[ebp+DWORD] %12
    mov_eax,[eax]         # ->
    add_eax, %0
    push_eax              # fd (local)
    lea_eax,[ebp+DWORD] %8
    mov_eax,[eax]         # ?
    pop_ebx               # =
    mov_[ebx],eax
    pop_eax               # ;
# stdlib.c 543
    push_eax              # f (local)
    lea_eax,[ebp+DWORD] %12
    mov_eax,[eax]         # ->
    add_eax, %4
    push_eax              # 0
    mov_eax, %0
    pop_ebx               # =
    mov_[ebx],eax
    pop_eax               # ;
# stdlib.c 544
    push_eax              # f (local)
    lea_eax,[ebp+DWORD] %12
    mov_eax,[eax]         # ?
    mov_ebx,[ebp]         # return
    push_ebx
    ret
    push_eax              # 0
    mov_eax, %0
    mov_ebx,[ebp]         # return
    push_ebx
    ret

:f_fclose
    pop_eax
    mov_[ebp],eax
    pop_eax
    push_eax              # stream (local)
    lea_eax,[ebp+DWORD] %4
    pop_ebx               # =:
    mov_[eax],ebx
    pop_eax
# stdlib.c 549
    push_eax              # 6
    mov_eax, %6
    push_eax              # stream (local)
    lea_eax,[ebp+DWORD] %4
    mov_eax,[eax]         # ->
    add_eax, %0
    mov_eax,[eax]         # ?
    push_eax              # 0
    mov_eax, %0
    push_eax              # 0
    mov_eax, %0
    push_eax              # sys_int80 (function)
    mov_eax, &f_sys_int80
    add_ebp, %8         # ()
    call_eax
    sub_ebp, %8
    mov_ebx,[ebp]         # return
    push_ebx
    ret
    push_eax              # 0
    mov_eax, %0
    mov_ebx,[ebp]         # return
    push_ebx
    ret

:f_fflush
    pop_eax
    mov_[ebp],eax
    pop_eax
    push_eax              # stream (local)
    lea_eax,[ebp+DWORD] %4
    pop_ebx               # =:
    mov_[eax],ebx
    pop_eax
# stdlib.c 555
    push_eax              # 0
    mov_eax, %0
    mov_ebx,[ebp]         # return
    push_ebx
    ret
    push_eax              # 0
    mov_eax, %0
    mov_ebx,[ebp]         # return
    push_ebx
    ret

:f_fseek
    pop_eax
    mov_[ebp],eax
    pop_eax
    push_eax              # whence (local)
    lea_eax,[ebp+DWORD] %4
    pop_ebx               # =:
    mov_[eax],ebx
    pop_eax
    push_eax              # offset (local)
    lea_eax,[ebp+DWORD] %8
    pop_ebx               # =:
    mov_[eax],ebx
    pop_eax
    push_eax              # stream (local)
    lea_eax,[ebp+DWORD] %12
    pop_ebx               # =:
    mov_[eax],ebx
    pop_eax
# stdlib.c 560
    push_eax              # stream (local)
    lea_eax,[ebp+DWORD] %12
    mov_eax,[eax]         # ->
    add_eax, %0
    mov_eax,[eax]         # ?
    push_eax              # offset (local)
    lea_eax,[ebp+DWORD] %8
    mov_eax,[eax]         # ?
    push_eax              # whence (local)
    lea_eax,[ebp+DWORD] %4
    mov_eax,[eax]         # ?
    push_eax              # lseek (function)
    mov_eax, &f_lseek
    add_ebp, %16         # ()
    call_eax
    sub_ebp, %16
    mov_ebx,[ebp]         # return
    push_ebx
    ret
    push_eax              # 0
    mov_eax, %0
    mov_ebx,[ebp]         # return
    push_ebx
    ret

:f_ftell
    pop_eax
    mov_[ebp],eax
    pop_eax
    push_eax              # stream (local)
    lea_eax,[ebp+DWORD] %4
    pop_ebx               # =:
    mov_[eax],ebx
    pop_eax
# stdlib.c 565
    push_eax              # stream (local)
    lea_eax,[ebp+DWORD] %4
    mov_eax,[eax]         # ->
    add_eax, %0
    mov_eax,[eax]         # ?
    push_eax              # 0
    mov_eax, %0
    push_eax              # 1
    mov_eax, %1
    push_eax              # lseek (function)
    mov_eax, &f_lseek
    add_ebp, %8         # ()
    call_eax
    sub_ebp, %8
    mov_ebx,[ebp]         # return
    push_ebx
    ret
    push_eax              # 0
    mov_eax, %0
    mov_ebx,[ebp]         # return
    push_ebx
    ret

:f_fread
    pop_eax
    mov_[ebp],eax
    pop_eax
    push_eax              # stream (local)
    lea_eax,[ebp+DWORD] %4
    pop_ebx               # =:
    mov_[eax],ebx
    pop_eax
    push_eax              # nmemb (local)
    lea_eax,[ebp+DWORD] %8
    pop_ebx               # =:
    mov_[eax],ebx
    pop_eax
    push_eax              # size (local)
    lea_eax,[ebp+DWORD] %12
    pop_ebx               # =:
    mov_[eax],ebx
    pop_eax
    push_eax              # ptr (local)
    lea_eax,[ebp+DWORD] %16
    pop_ebx               # =:
    mov_[eax],ebx
    pop_eax
    push_eax              # s (local)
    lea_eax,[ebp+DWORD] %20
    push_eax              # ptr (local)
    lea_eax,[ebp+DWORD] %16
    mov_eax,[eax]         # ?
    pop_ebx               # =
    mov_[ebx],eax
    pop_eax               # ;
# stdlib.c 571
    push_eax              # i (local)
    lea_eax,[ebp+DWORD] %24
    push_eax              # 0
    mov_eax, %0
    pop_ebx               # =
    mov_[ebx],eax
    pop_eax               # ;
:_fread_loop1
    push_eax              # i (local)
    lea_eax,[ebp+DWORD] %24
    mov_eax,[eax]         # ?
    push_eax              # nmemb (local)
    lea_eax,[ebp+DWORD] %8
    mov_eax,[eax]         # ?
    pop_ebx               # <s
    cmp_eax_ebx
    setl_al
    movzx_eax,al
    test_eax,eax          # !
    sete_al
    movzx_eax,al
    test_eax,eax          # if
    pop_eax
    je %_fread_else2
    jmp %_fread_loop_end1
# stdlib.c 572
:_fread_else2 # no else
    push_eax              # r (local)
    lea_eax,[ebp+DWORD] %28
    push_eax              # stream (local)
    lea_eax,[ebp+DWORD] %4
    mov_eax,[eax]         # ->
    add_eax, %0
    mov_eax,[eax]         # ?
    push_eax              # s (local)
    lea_eax,[ebp+DWORD] %20
    mov_eax,[eax]         # ?
    push_eax              # size (local)
    lea_eax,[ebp+DWORD] %12
    mov_eax,[eax]         # ?
    push_eax              # read (function)
    mov_eax, &f_read
    add_ebp, %32         # ()
    call_eax
    sub_ebp, %32
    pop_ebx               # =
    mov_[ebx],eax
    pop_eax               # ;
# stdlib.c 574
    push_eax              # r (local)
    lea_eax,[ebp+DWORD] %28
    mov_eax,[eax]         # ?
    push_eax              # size (local)
    lea_eax,[ebp+DWORD] %12
    mov_eax,[eax]         # ?
    pop_ebx               # <
    cmp_eax_ebx
    setb_al
    movzx_eax,al
    test_eax,eax          # if
    pop_eax
    je %_fread_else3
# stdlib.c 575
    push_eax              # i (local)
    lea_eax,[ebp+DWORD] %24
    mov_eax,[eax]         # ?
    mov_ebx,[ebp]         # return
    push_ebx
    ret
# stdlib.c 576
:_fread_else3 # no else
    push_eax              # s (local)
    lea_eax,[ebp+DWORD] %20
    push_eax              # $ (dup)
    mov_eax,[eax]         # ?
    push_eax              # size (local)
    lea_eax,[ebp+DWORD] %12
    mov_eax,[eax]         # ?
    pop_ebx               # +
    add_eax,ebx
    pop_ebx               # =
    mov_[ebx],eax
    pop_eax               # ;
    push_eax              # i (local)
    lea_eax,[ebp+DWORD] %24
    push_eax              # $ (dup)
    mov_eax,[eax]         # ?
    push_eax              # 1
    mov_eax, %1
    pop_ebx               # +
    add_eax,ebx
    pop_ebx               # =
    mov_[ebx],eax
    push_eax              # 1
    mov_eax, %1
    pop_ebx               # -
    sub_ebx,eax
    mov_eax,ebx
    pop_eax               # ;
    jmp %_fread_loop1
:_fread_loop_end1
# stdlib.c 578
    push_eax              # nmemb (local)
    lea_eax,[ebp+DWORD] %8
    mov_eax,[eax]         # ?
    mov_ebx,[ebp]         # return
    push_ebx
    ret
    push_eax              # 0
    mov_eax, %0
    mov_ebx,[ebp]         # return
    push_ebx
    ret

:f_lseek
    pop_eax
    mov_[ebp],eax
    pop_eax
    push_eax              # whence (local)
    lea_eax,[ebp+DWORD] %4
    pop_ebx               # =:
    mov_[eax],ebx
    pop_eax
    push_eax              # offset (local)
    lea_eax,[ebp+DWORD] %8
    pop_ebx               # =:
    mov_[eax],ebx
    pop_eax
    push_eax              # fd (local)
    lea_eax,[ebp+DWORD] %12
    pop_ebx               # =:
    mov_[eax],ebx
    pop_eax
# stdlib.c 587
    push_eax              # 19
    mov_eax, %19
    push_eax              # fd (local)
    lea_eax,[ebp+DWORD] %12
    mov_eax,[eax]         # ?
    push_eax              # offset (local)
    lea_eax,[ebp+DWORD] %8
    mov_eax,[eax]         # ?
    push_eax              # whence (local)
    lea_eax,[ebp+DWORD] %4
    mov_eax,[eax]         # ?
    push_eax              # sys_int80 (function)
    mov_eax, &f_sys_int80
    add_ebp, %16         # ()
    call_eax
    sub_ebp, %16
    mov_ebx,[ebp]         # return
    push_ebx
    ret
    push_eax              # 0
    mov_eax, %0
    mov_ebx,[ebp]         # return
    push_ebx
    ret

:f_feof
    pop_eax
    mov_[ebp],eax
    pop_eax
    push_eax              # stream (local)
    lea_eax,[ebp+DWORD] %4
    pop_ebx               # =:
    mov_[eax],ebx
    pop_eax
# stdlib.c 592
    push_eax              # stream (local)
    lea_eax,[ebp+DWORD] %4
    mov_eax,[eax]         # ->
    add_eax, %4
    mov_eax,[eax]         # ?
    mov_ebx,[ebp]         # return
    push_ebx
    ret
    push_eax              # 0
    mov_eax, %0
    mov_ebx,[ebp]         # return
    push_ebx
    ret

:f_fgetc
    pop_eax
    mov_[ebp],eax
    pop_eax
    push_eax              # stream (local)
    lea_eax,[ebp+DWORD] %4
    pop_ebx               # =:
    mov_[eax],ebx
    pop_eax
# stdlib.c 597
    push_eax              # stream (local)
    lea_eax,[ebp+DWORD] %4
    mov_eax,[eax]         # ->
    add_eax, %4
    mov_eax,[eax]         # ?
    test_eax,eax          # if
    pop_eax
    je %_fgetc_else1
# stdlib.c 598
    push_eax              # 4294967295
    mov_eax, %4294967295
    mov_ebx,[ebp]         # return
    push_ebx
    ret
:_fgetc_else1 # no else
    push_eax              # ret (local)
    lea_eax,[ebp+DWORD] %12
    push_eax              # 3
    mov_eax, %3
    push_eax              # stream (local)
    lea_eax,[ebp+DWORD] %4
    mov_eax,[eax]         # ->
    add_eax, %0
    mov_eax,[eax]         # ?
    push_eax              # ch (local)
    lea_eax,[ebp+DWORD] %8
    push_eax              # 1
    mov_eax, %1
    push_eax              # sys_int80 (function)
    mov_eax, &f_sys_int80
    add_ebp, %16         # ()
    call_eax
    sub_ebp, %16
    pop_ebx               # =
    mov_[ebx],eax
    pop_eax               # ;
# stdlib.c 601
    push_eax              # ret (local)
    lea_eax,[ebp+DWORD] %12
    mov_eax,[eax]         # ?
    push_eax              # 0
    mov_eax, %0
    pop_ebx               # <=s
    cmp_eax_ebx
    setle_al
    movzx_eax,al
    test_eax,eax          # if
    pop_eax
    je %_fgetc_else2
# stdlib.c 602
# stdlib.c 603
    push_eax              # stream (local)
    lea_eax,[ebp+DWORD] %4
    mov_eax,[eax]         # ->
    add_eax, %4
    push_eax              # 1
    mov_eax, %1
    pop_ebx               # =
    mov_[ebx],eax
    pop_eax               # ;
# stdlib.c 604
    push_eax              # 4294967295
    mov_eax, %4294967295
    mov_ebx,[ebp]         # return
    push_ebx
    ret
# stdlib.c 606
:_fgetc_else2 # no else
    push_eax              # ch (local)
    lea_eax,[ebp+DWORD] %8
    mov_al,[eax]          # ?1
    movzx_eax,al
    mov_ebx,[ebp]         # return
    push_ebx
    ret
    push_eax              # 0
    mov_eax, %0
    mov_ebx,[ebp]         # return
    push_ebx
    ret

:f_ldexp
    pop_eax
    mov_[ebp],eax
    pop_eax
    push_eax              # exp (local)
    lea_eax,[ebp+DWORD] %4
    pop_ebx               # =:
    mov_[eax],ebx
    pop_eax
    push_eax              # x (local)
    lea_eax,[ebp+DWORD] %8
    pop_ebx               # =:
    mov_[eax],ebx
    pop_eax
    push_eax              # result (local)
    lea_eax,[ebp+DWORD] %12
    push_eax              # x (local)
    lea_eax,[ebp+DWORD] %8
    mov_eax,[eax]         # ?
    pop_ebx               # =
    mov_[ebx],eax
    pop_eax               # ;
# stdlib.c 613
    push_eax              # i (local)
    lea_eax,[ebp+DWORD] %16
    push_eax              # 1
    mov_eax, %1
    pop_ebx               # =
    mov_[ebx],eax
    pop_eax               # ;
:_ldexp_loop1
    push_eax              # i (local)
    lea_eax,[ebp+DWORD] %16
    mov_eax,[eax]         # ?
    push_eax              # exp (local)
    lea_eax,[ebp+DWORD] %4
    mov_eax,[eax]         # ?
    pop_ebx               # <s
    cmp_eax_ebx
    setl_al
    movzx_eax,al
    test_eax,eax          # !
    sete_al
    movzx_eax,al
    test_eax,eax          # if
    pop_eax
    je %_ldexp_else2
    jmp %_ldexp_loop_end1
# stdlib.c 614
:_ldexp_else2 # no else
    push_eax              # result (local)
    lea_eax,[ebp+DWORD] %12
    push_eax              # $ (dup)
    mov_eax,[eax]         # ?
    push_eax              # x (local)
    lea_eax,[ebp+DWORD] %8
    mov_eax,[eax]         # ?
    pop_ebx               # *
    mul_ebx
    pop_ebx               # =
    mov_[ebx],eax
    pop_eax               # ;
    push_eax              # i (local)
    lea_eax,[ebp+DWORD] %16
    push_eax              # $ (dup)
    mov_eax,[eax]         # ?
    push_eax              # 1
    mov_eax, %1
    pop_ebx               # +
    add_eax,ebx
    pop_ebx               # =
    mov_[ebx],eax
    push_eax              # 1
    mov_eax, %1
    pop_ebx               # -
    sub_ebx,eax
    mov_eax,ebx
    pop_eax               # ;
    jmp %_ldexp_loop1
:_ldexp_loop_end1
# stdlib.c 615
    push_eax              # result (local)
    lea_eax,[ebp+DWORD] %12
    mov_eax,[eax]         # ?
    mov_ebx,[ebp]         # return
    push_ebx
    ret
    push_eax              # 0
    mov_eax, %0
    mov_ebx,[ebp]         # return
    push_ebx
    ret

:f_time
    pop_eax
    mov_[ebp],eax
    pop_eax
    push_eax              # tloc (local)
    lea_eax,[ebp+DWORD] %4
    pop_ebx               # =:
    mov_[eax],ebx
    pop_eax
# stdlib.c 621
    push_eax              # stderr (global)
    mov_eax, &g_stderr
    mov_eax,[eax]         # ?
    push_eax              # 'TODO time\n'
    mov_eax, &string_5
    push_eax              # 0
    mov_eax, %0
    push_eax              # fprintf (function)
    mov_eax, &f_fprintf
    add_ebp, %8         # ()
    call_eax
    sub_ebp, %8
    pop_eax               # ;
# stdlib.c 621
    push_eax              # 1
    mov_eax, %1
    push_eax              # exit (function)
    mov_eax, &f_exit
    add_ebp, %8         # ()
    call_eax
    sub_ebp, %8
    pop_eax               # ;
    push_eax              # 0
    mov_eax, %0
    mov_ebx,[ebp]         # return
    push_ebx
    ret

:f_localtime
    pop_eax
    mov_[ebp],eax
    pop_eax
    push_eax              # timep (local)
    lea_eax,[ebp+DWORD] %4
    pop_ebx               # =:
    mov_[eax],ebx
    pop_eax
# stdlib.c 638
    push_eax              # stderr (global)
    mov_eax, &g_stderr
    mov_eax,[eax]         # ?
    push_eax              # 'TODO localtime\n'
    mov_eax, &string_6
    push_eax              # 0
    mov_eax, %0
    push_eax              # fprintf (function)
    mov_eax, &f_fprintf
    add_ebp, %8         # ()
    call_eax
    sub_ebp, %8
    pop_eax               # ;
# stdlib.c 638
    push_eax              # 1
    mov_eax, %1
    push_eax              # exit (function)
    mov_eax, &f_exit
    add_ebp, %8         # ()
    call_eax
    sub_ebp, %8
    pop_eax               # ;
    push_eax              # 0
    mov_eax, %0
    mov_ebx,[ebp]         # return
    push_ebx
    ret

:f_gettimeofday
    pop_eax
    mov_[ebp],eax
    pop_eax
    push_eax              # tz (local)
    lea_eax,[ebp+DWORD] %4
    pop_ebx               # =:
    mov_[eax],ebx
    pop_eax
    push_eax              # tv (local)
    lea_eax,[ebp+DWORD] %8
    pop_ebx               # =:
    mov_[eax],ebx
    pop_eax
# stdlib.c 651
    push_eax              # 0
    mov_eax, %0
    mov_ebx,[ebp]         # return
    push_ebx
    ret
    push_eax              # 0
    mov_eax, %0
    mov_ebx,[ebp]         # return
    push_ebx
    ret

:f_write
    pop_eax
    mov_[ebp],eax
    pop_eax
    push_eax              # count (local)
    lea_eax,[ebp+DWORD] %4
    pop_ebx               # =:
    mov_[eax],ebx
    pop_eax
    push_eax              # buf (local)
    lea_eax,[ebp+DWORD] %8
    pop_ebx               # =:
    mov_[eax],ebx
    pop_eax
    push_eax              # fd (local)
    lea_eax,[ebp+DWORD] %12
    pop_ebx               # =:
    mov_[eax],ebx
    pop_eax
# stdlib.c 667
    push_eax              # 4
    mov_eax, %4
    push_eax              # fd (local)
    lea_eax,[ebp+DWORD] %12
    mov_eax,[eax]         # ?
    push_eax              # buf (local)
    lea_eax,[ebp+DWORD] %8
    mov_eax,[eax]         # ?
    push_eax              # count (local)
    lea_eax,[ebp+DWORD] %4
    mov_eax,[eax]         # ?
    push_eax              # sys_int80 (function)
    mov_eax, &f_sys_int80
    add_ebp, %16         # ()
    call_eax
    sub_ebp, %16
    mov_ebx,[ebp]         # return
    push_ebx
    ret
    push_eax              # 0
    mov_eax, %0
    mov_ebx,[ebp]         # return
    push_ebx
    ret

:f_fileno
    pop_eax
    mov_[ebp],eax
    pop_eax
    push_eax              # stream (local)
    lea_eax,[ebp+DWORD] %4
    pop_ebx               # =:
    mov_[eax],ebx
    pop_eax
# stdlib.c 672
    push_eax              # stream (local)
    lea_eax,[ebp+DWORD] %4
    mov_eax,[eax]         # ->
    add_eax, %0
    mov_eax,[eax]         # ?
    mov_ebx,[ebp]         # return
    push_ebx
    ret
    push_eax              # 0
    mov_eax, %0
    mov_ebx,[ebp]         # return
    push_ebx
    ret

:f_getcwd
    pop_eax
    mov_[ebp],eax
    pop_eax
    push_eax              # size (local)
    lea_eax,[ebp+DWORD] %4
    pop_ebx               # =:
    mov_[eax],ebx
    pop_eax
    push_eax              # buf (local)
    lea_eax,[ebp+DWORD] %8
    pop_ebx               # =:
    mov_[eax],ebx
    pop_eax
# stdlib.c 681
    push_eax              # 183
    mov_eax, %183
    push_eax              # buf (local)
    lea_eax,[ebp+DWORD] %8
    mov_eax,[eax]         # ?
    push_eax              # size (local)
    lea_eax,[ebp+DWORD] %4
    mov_eax,[eax]         # ?
    push_eax              # 0
    mov_eax, %0
    push_eax              # sys_int80 (function)
    mov_eax, &f_sys_int80
    add_ebp, %12         # ()
    call_eax
    sub_ebp, %12
    pop_eax               # ;
# stdlib.c 682
    push_eax              # buf (local)
    lea_eax,[ebp+DWORD] %8
    mov_eax,[eax]         # ?
    mov_ebx,[ebp]         # return
    push_ebx
    ret
    push_eax              # 0
    mov_eax, %0
    mov_ebx,[ebp]         # return
    push_ebx
    ret

:f_getenv
    pop_eax
    mov_[ebp],eax
    pop_eax
    push_eax              # name (local)
    lea_eax,[ebp+DWORD] %4
    pop_ebx               # =:
    mov_[eax],ebx
    pop_eax
    push_eax              # len (local)
    lea_eax,[ebp+DWORD] %8
    push_eax              # name (local)
    lea_eax,[ebp+DWORD] %4
    mov_eax,[eax]         # ?
    push_eax              # strlen (function)
    mov_eax, &f_strlen
    add_ebp, %12         # ()
    call_eax
    sub_ebp, %12
    pop_ebx               # =
    mov_[ebx],eax
    pop_eax               # ;
# stdlib.c 690
    push_eax              # env (local)
    lea_eax,[ebp+DWORD] %12
    push_eax              # _sys_env (global)
    mov_eax, &g__sys_env
    mov_eax,[eax]         # ?
    pop_ebx               # =
    mov_[ebx],eax
    pop_eax               # ;
:_getenv_loop1
    push_eax              # env (local)
    lea_eax,[ebp+DWORD] %12
    mov_eax,[eax]         # ?
    mov_eax,[eax]         # ?
    push_eax              # 0
    mov_eax, %0
    pop_ebx               # !=
    cmp_eax_ebx
    setne_al
    movzx_eax,al
    test_eax,eax          # !
    sete_al
    movzx_eax,al
    test_eax,eax          # if
    pop_eax
    je %_getenv_else2
    jmp %_getenv_loop_end1
# stdlib.c 691
:_getenv_else2 # no else
    push_eax              # env (local)
    lea_eax,[ebp+DWORD] %12
    mov_eax,[eax]         # ?
    mov_eax,[eax]         # ?
    push_eax              # name (local)
    lea_eax,[ebp+DWORD] %4
    mov_eax,[eax]         # ?
    push_eax              # len (local)
    lea_eax,[ebp+DWORD] %8
    mov_eax,[eax]         # ?
    push_eax              # strncmp (function)
    mov_eax, &f_strncmp
    add_ebp, %16         # ()
    call_eax
    sub_ebp, %16
    push_eax              # 0
    mov_eax, %0
    pop_ebx               # ==
    cmp_eax_ebx
    sete_al
    movzx_eax,al
    test_eax,eax          # &&
    je %_getenv_and_end3
    pop_eax
    push_eax              # env (local)
    lea_eax,[ebp+DWORD] %12
    mov_eax,[eax]         # ?
    mov_eax,[eax]         # ?
    push_eax              # len (local)
    lea_eax,[ebp+DWORD] %8
    mov_eax,[eax]         # ?
    pop_ebx               # +
    add_eax,ebx
    mov_al,[eax]          # ?1
    movzx_eax,al
    movsx_eax,al          # char
    push_eax              # 61
    mov_eax, %61
    pop_ebx               # ==
    cmp_eax_ebx
    sete_al
    movzx_eax,al
:_getenv_and_end3
    test_eax,eax          # if
    pop_eax
    je %_getenv_else4
# stdlib.c 692
    push_eax              # env (local)
    lea_eax,[ebp+DWORD] %12
    mov_eax,[eax]         # ?
    mov_eax,[eax]         # ?
    push_eax              # len (local)
    lea_eax,[ebp+DWORD] %8
    mov_eax,[eax]         # ?
    pop_ebx               # +
    add_eax,ebx
    push_eax              # 1
    mov_eax, %1
    pop_ebx               # +
    add_eax,ebx
    mov_ebx,[ebp]         # return
    push_ebx
    ret
:_getenv_else4 # no else
    push_eax              # env (local)
    lea_eax,[ebp+DWORD] %12
    push_eax              # $ (dup)
    mov_eax,[eax]         # ?
    push_eax              # 4
    mov_eax, %4
    pop_ebx               # +
    add_eax,ebx
    pop_ebx               # =
    mov_[ebx],eax
    push_eax              # 4
    mov_eax, %4
    pop_ebx               # -
    sub_ebx,eax
    mov_eax,ebx
    pop_eax               # ;
    jmp %_getenv_loop1
:_getenv_loop_end1
    push_eax              # 0
    mov_eax, %0
    mov_ebx,[ebp]         # return
    push_ebx
    ret

:f_qsort
    pop_eax
    mov_[ebp],eax
    pop_eax
    push_eax              # compar (local)
    lea_eax,[ebp+DWORD] %4
    pop_ebx               # =:
    mov_[eax],ebx
    pop_eax
    push_eax              # size (local)
    lea_eax,[ebp+DWORD] %8
    pop_ebx               # =:
    mov_[eax],ebx
    pop_eax
    push_eax              # nmemb (local)
    lea_eax,[ebp+DWORD] %12
    pop_ebx               # =:
    mov_[eax],ebx
    pop_eax
    push_eax              # base (local)
    lea_eax,[ebp+DWORD] %16
    pop_ebx               # =:
    mov_[eax],ebx
    pop_eax
# stdlib.c 698
    push_eax              # go (local)
    lea_eax,[ebp+DWORD] %20
    push_eax              # 1
    mov_eax, %1
    pop_ebx               # =
    mov_[ebx],eax
    pop_eax               # ;
:_qsort_loop1
    push_eax              # go (local)
    lea_eax,[ebp+DWORD] %20
    mov_eax,[eax]         # ?
    push_eax              # 1
    mov_eax, %1
    pop_ebx               # ==
    cmp_eax_ebx
    sete_al
    movzx_eax,al
    test_eax,eax          # !
    sete_al
    movzx_eax,al
    test_eax,eax          # if
    pop_eax
    je %_qsort_else2
    jmp %_qsort_loop_end1
# stdlib.c 699
# stdlib.c 700
:_qsort_else2 # no else
    push_eax              # go (local)
    lea_eax,[ebp+DWORD] %20
    push_eax              # 0
    mov_eax, %0
    pop_ebx               # =
    mov_[ebx],eax
    pop_eax               # ;
# stdlib.c 701
    push_eax              # i (local)
    lea_eax,[ebp+DWORD] %24
    push_eax              # 0
    mov_eax, %0
    pop_ebx               # =
    mov_[ebx],eax
    pop_eax               # ;
:_qsort_loop3
    push_eax              # i (local)
    lea_eax,[ebp+DWORD] %24
    mov_eax,[eax]         # ?
    push_eax              # 1
    mov_eax, %1
    pop_ebx               # +
    add_eax,ebx
    push_eax              # nmemb (local)
    lea_eax,[ebp+DWORD] %12
    mov_eax,[eax]         # ?
    pop_ebx               # <s
    cmp_eax_ebx
    setl_al
    movzx_eax,al
    test_eax,eax          # !
    sete_al
    movzx_eax,al
    test_eax,eax          # if
    pop_eax
    je %_qsort_else4
    jmp %_qsort_loop_end3
# stdlib.c 702
:_qsort_else4 # no else
    push_eax              # arg1 (local)
    lea_eax,[ebp+DWORD] %28
    push_eax              # base (local)
    lea_eax,[ebp+DWORD] %16
    mov_eax,[eax]         # ?
    push_eax              # i (local)
    lea_eax,[ebp+DWORD] %24
    mov_eax,[eax]         # ?
    push_eax              # size (local)
    lea_eax,[ebp+DWORD] %8
    mov_eax,[eax]         # ?
    pop_ebx               # *
    mul_ebx
    pop_ebx               # +
    add_eax,ebx
    pop_ebx               # =
    mov_[ebx],eax
    pop_eax               # ;
    push_eax              # arg2 (local)
    lea_eax,[ebp+DWORD] %32
    push_eax              # base (local)
    lea_eax,[ebp+DWORD] %16
    mov_eax,[eax]         # ?
    push_eax              # 1
    mov_eax, %1
    push_eax              # i (local)
    lea_eax,[ebp+DWORD] %24
    mov_eax,[eax]         # ?
    pop_ebx               # +
    add_eax,ebx
    push_eax              # size (local)
    lea_eax,[ebp+DWORD] %8
    mov_eax,[eax]         # ?
    pop_ebx               # *
    mul_ebx
    pop_ebx               # +
    add_eax,ebx
    pop_ebx               # =
    mov_[ebx],eax
    pop_eax               # ;
    push_eax              # sign (local)
    lea_eax,[ebp+DWORD] %36
    push_eax              # arg1 (local)
    lea_eax,[ebp+DWORD] %28
    mov_eax,[eax]         # ?
    push_eax              # arg2 (local)
    lea_eax,[ebp+DWORD] %32
    mov_eax,[eax]         # ?
    push_eax              # compar (local)
    lea_eax,[ebp+DWORD] %4
    mov_eax,[eax]         # ?
    add_ebp, %40         # ()
    call_eax
    sub_ebp, %40
    pop_ebx               # =
    mov_[ebx],eax
    pop_eax               # ;
# stdlib.c 706
    push_eax              # sign (local)
    lea_eax,[ebp+DWORD] %36
    mov_eax,[eax]         # ?
    push_eax              # 0
    mov_eax, %0
    pop_ebx               # >s
    cmp_eax_ebx
    setg_al
    movzx_eax,al
    test_eax,eax          # if
    pop_eax
    je %_qsort_else5
# stdlib.c 707
# stdlib.c 708
    push_eax              # go (local)
    lea_eax,[ebp+DWORD] %20
    push_eax              # 1
    mov_eax, %1
    pop_ebx               # =
    mov_[ebx],eax
    pop_eax               # ;
# stdlib.c 709
    push_eax              # j (local)
    lea_eax,[ebp+DWORD] %40
    push_eax              # 0
    mov_eax, %0
    pop_ebx               # =
    mov_[ebx],eax
    pop_eax               # ;
:_qsort_loop6
    push_eax              # j (local)
    lea_eax,[ebp+DWORD] %40
    mov_eax,[eax]         # ?
    push_eax              # size (local)
    lea_eax,[ebp+DWORD] %8
    mov_eax,[eax]         # ?
    pop_ebx               # <s
    cmp_eax_ebx
    setl_al
    movzx_eax,al
    test_eax,eax          # !
    sete_al
    movzx_eax,al
    test_eax,eax          # if
    pop_eax
    je %_qsort_else7
    jmp %_qsort_loop_end6
# stdlib.c 710
:_qsort_else7 # no else
    push_eax              # j (local)
    lea_eax,[ebp+DWORD] %40
    mov_eax,[eax]         # ?
    push_eax              # 3
    mov_eax, %3
    pop_ebx               # +
    add_eax,ebx
    push_eax              # size (local)
    lea_eax,[ebp+DWORD] %8
    mov_eax,[eax]         # ?
    pop_ebx               # <s
    cmp_eax_ebx
    setl_al
    movzx_eax,al
    test_eax,eax          # if
    pop_eax
    je %_qsort_else8
# stdlib.c 711
    push_eax              # h (local)
    lea_eax,[ebp+DWORD] %44
    push_eax              # arg1 (local)
    lea_eax,[ebp+DWORD] %28
    mov_eax,[eax]         # ?
    push_eax              # j (local)
    lea_eax,[ebp+DWORD] %40
    mov_eax,[eax]         # ?
    pop_ebx               # +
    add_eax,ebx
    mov_eax,[eax]         # ?
    pop_ebx               # =
    mov_[ebx],eax
    pop_eax               # ;
# stdlib.c 714
    push_eax              # arg1 (local)
    lea_eax,[ebp+DWORD] %28
    mov_eax,[eax]         # ?
    push_eax              # j (local)
    lea_eax,[ebp+DWORD] %40
    mov_eax,[eax]         # ?
    pop_ebx               # +
    add_eax,ebx
    push_eax              # arg2 (local)
    lea_eax,[ebp+DWORD] %32
    mov_eax,[eax]         # ?
    push_eax              # j (local)
    lea_eax,[ebp+DWORD] %40
    mov_eax,[eax]         # ?
    pop_ebx               # +
    add_eax,ebx
    mov_eax,[eax]         # ?
    pop_ebx               # =
    mov_[ebx],eax
    pop_eax               # ;
# stdlib.c 715
    push_eax              # arg2 (local)
    lea_eax,[ebp+DWORD] %32
    mov_eax,[eax]         # ?
    push_eax              # j (local)
    lea_eax,[ebp+DWORD] %40
    mov_eax,[eax]         # ?
    pop_ebx               # +
    add_eax,ebx
    push_eax              # h (local)
    lea_eax,[ebp+DWORD] %44
    mov_eax,[eax]         # ?
    pop_ebx               # =
    mov_[ebx],eax
    pop_eax               # ;
# stdlib.c 716
    push_eax              # j (local)
    lea_eax,[ebp+DWORD] %40
    push_eax              # $ (dup)
    mov_eax,[eax]         # ?
    push_eax              # 3
    mov_eax, %3
    pop_ebx               # +
    add_eax,ebx
    pop_ebx               # =
    mov_[ebx],eax
    pop_eax               # ;
    jmp %_qsort_else_end8
:_qsort_else8
# stdlib.c 719
    push_eax              # h (local)
    lea_eax,[ebp+DWORD] %44
    push_eax              # arg1 (local)
    lea_eax,[ebp+DWORD] %28
    mov_eax,[eax]         # ?
    push_eax              # j (local)
    lea_eax,[ebp+DWORD] %40
    mov_eax,[eax]         # ?
    pop_ebx               # +
    add_eax,ebx
    mov_al,[eax]          # ?1
    movzx_eax,al
    movsx_eax,al          # char
    pop_ebx               # =1
    mov_[ebx],al
    pop_eax               # ;
# stdlib.c 722
    push_eax              # arg1 (local)
    lea_eax,[ebp+DWORD] %28
    mov_eax,[eax]         # ?
    push_eax              # j (local)
    lea_eax,[ebp+DWORD] %40
    mov_eax,[eax]         # ?
    pop_ebx               # +
    add_eax,ebx
    push_eax              # arg2 (local)
    lea_eax,[ebp+DWORD] %32
    mov_eax,[eax]         # ?
    push_eax              # j (local)
    lea_eax,[ebp+DWORD] %40
    mov_eax,[eax]         # ?
    pop_ebx               # +
    add_eax,ebx
    mov_al,[eax]          # ?1
    movzx_eax,al
    movsx_eax,al          # char
    pop_ebx               # =1
    mov_[ebx],al
    pop_eax               # ;
# stdlib.c 723
    push_eax              # arg2 (local)
    lea_eax,[ebp+DWORD] %32
    mov_eax,[eax]         # ?
    push_eax              # j (local)
    lea_eax,[ebp+DWORD] %40
    mov_eax,[eax]         # ?
    pop_ebx               # +
    add_eax,ebx
    push_eax              # h (local)
    lea_eax,[ebp+DWORD] %44
    mov_al,[eax]          # ?1
    movzx_eax,al
    movsx_eax,al          # char
    pop_ebx               # =1
    mov_[ebx],al
    pop_eax               # ;
:_qsort_else_end8
    push_eax              # j (local)
    lea_eax,[ebp+DWORD] %40
    push_eax              # $ (dup)
    mov_eax,[eax]         # ?
    push_eax              # 1
    mov_eax, %1
    pop_ebx               # +
    add_eax,ebx
    pop_ebx               # =
    mov_[ebx],eax
    push_eax              # 1
    mov_eax, %1
    pop_ebx               # -
    sub_ebx,eax
    mov_eax,ebx
    pop_eax               # ;
    jmp %_qsort_loop6
:_qsort_loop_end6
:_qsort_else5 # no else
    push_eax              # i (local)
    lea_eax,[ebp+DWORD] %24
    push_eax              # $ (dup)
    mov_eax,[eax]         # ?
    push_eax              # 1
    mov_eax, %1
    pop_ebx               # +
    add_eax,ebx
    pop_ebx               # =
    mov_[ebx],eax
    push_eax              # 1
    mov_eax, %1
    pop_ebx               # -
    sub_ebx,eax
    mov_eax,ebx
    pop_eax               # ;
    jmp %_qsort_loop3
:_qsort_loop_end3
    jmp %_qsort_loop1
:_qsort_loop_end1
    push_eax              # 0
    mov_eax, %0
    mov_ebx,[ebp]         # return
    push_ebx
    ret

:f_time
    pop_eax
    mov_[ebp],eax
    pop_eax
    push_eax              # tloc (local)
    lea_eax,[ebp+DWORD] %4
    pop_ebx               # =:
    mov_[eax],ebx
    pop_eax
# stdlib.c 733
    push_eax              # stderr (global)
    mov_eax, &g_stderr
    mov_eax,[eax]         # ?
    push_eax              # 'TODO time\n'
    mov_eax, &string_5
    push_eax              # 0
    mov_eax, %0
    push_eax              # fprintf (function)
    mov_eax, &f_fprintf
    add_ebp, %8         # ()
    call_eax
    sub_ebp, %8
    pop_eax               # ;
# stdlib.c 733
    push_eax              # 1
    mov_eax, %1
    push_eax              # exit (function)
    mov_eax, &f_exit
    add_ebp, %8         # ()
    call_eax
    sub_ebp, %8
    pop_eax               # ;
    push_eax              # 0
    mov_eax, %0
    mov_ebx,[ebp]         # return
    push_ebx
    ret

:f_setjmp
    pop_eax
    mov_[ebp],eax
    pop_eax
    push_eax              # env (local)
    lea_eax,[ebp+DWORD] %4
    pop_ebx               # =:
    mov_[eax],ebx
    pop_eax
# stdlib.c 739
    push_eax              # stderr (global)
    mov_eax, &g_stderr
    mov_eax,[eax]         # ?
    push_eax              # 'TODO setjmp\n'
    mov_eax, &string_7
    push_eax              # 0
    mov_eax, %0
    push_eax              # fprintf (function)
    mov_eax, &f_fprintf
    add_ebp, %8         # ()
    call_eax
    sub_ebp, %8
    pop_eax               # ;
# stdlib.c 739
    push_eax              # 1
    mov_eax, %1
    push_eax              # exit (function)
    mov_eax, &f_exit
    add_ebp, %8         # ()
    call_eax
    sub_ebp, %8
    pop_eax               # ;
# stdlib.c 740
    push_eax              # 0
    mov_eax, %0
    mov_ebx,[ebp]         # return
    push_ebx
    ret
    push_eax              # 0
    mov_eax, %0
    mov_ebx,[ebp]         # return
    push_ebx
    ret

:f_longjmp
    pop_eax
    mov_[ebp],eax
    pop_eax
    push_eax              # val (local)
    lea_eax,[ebp+DWORD] %4
    pop_ebx               # =:
    mov_[eax],ebx
    pop_eax
    push_eax              # env (local)
    lea_eax,[ebp+DWORD] %8
    pop_ebx               # =:
    mov_[eax],ebx
    pop_eax
# stdlib.c 746
    push_eax              # stderr (global)
    mov_eax, &g_stderr
    mov_eax,[eax]         # ?
    push_eax              # 'TODO longjmp\n'
    mov_eax, &string_8
    push_eax              # 0
    mov_eax, %0
    push_eax              # fprintf (function)
    mov_eax, &f_fprintf
    add_ebp, %12         # ()
    call_eax
    sub_ebp, %12
    pop_eax               # ;
# stdlib.c 746
    push_eax              # 0
    mov_eax, %0
    push_eax              # exit (function)
    mov_eax, &f_exit
    add_ebp, %12         # ()
    call_eax
    sub_ebp, %12
    pop_eax               # ;
# stdlib.c 747
    push_eax              # 4294967295
    mov_eax, %4294967295
    push_eax              # exit (function)
    mov_eax, &f_exit
    add_ebp, %12         # ()
    call_eax
    sub_ebp, %12
    pop_eax               # ;
    push_eax              # 0
    mov_eax, %0
    mov_ebx,[ebp]         # return
    push_ebx
    ret

:f_unlink
    pop_eax
    mov_[ebp],eax
    pop_eax
    push_eax              # pathname (local)
    lea_eax,[ebp+DWORD] %4
    pop_ebx               # =:
    mov_[eax],ebx
    pop_eax
# stdlib.c 752
    push_eax              # 10
    mov_eax, %10
    push_eax              # pathname (local)
    lea_eax,[ebp+DWORD] %4
    mov_eax,[eax]         # ?
    push_eax              # 0
    mov_eax, %0
    push_eax              # 0
    mov_eax, %0
    push_eax              # sys_int80 (function)
    mov_eax, &f_sys_int80
    add_ebp, %8         # ()
    call_eax
    sub_ebp, %8
    mov_ebx,[ebp]         # return
    push_ebx
    ret
    push_eax              # 0
    mov_eax, %0
    mov_ebx,[ebp]         # return
    push_ebx
    ret

:f_sscanf
    pop_eax
    mov_[ebp],eax
    pop_eax
    push_eax              # __var_args (local)
    lea_eax,[ebp+DWORD] %4
    pop_ebx               # =:
    mov_[eax],ebx
    pop_eax
    push_eax              # format (local)
    lea_eax,[ebp+DWORD] %8
    pop_ebx               # =:
    mov_[eax],ebx
    pop_eax
    push_eax              # str (local)
    lea_eax,[ebp+DWORD] %12
    pop_ebx               # =:
    mov_[eax],ebx
    pop_eax
# stdlib.c 758
    push_eax              # ap (local)
    lea_eax,[ebp+DWORD] %16
    push_eax              # __var_args (local)
    lea_eax,[ebp+DWORD] %4
    mov_eax,[eax]         # ?
    pop_ebx               # =
    mov_[ebx],eax
    pop_eax               # ;
    push_eax              # args_parsed (local)
    lea_eax,[ebp+DWORD] %20
    push_eax              # 0
    mov_eax, %0
    pop_ebx               # =
    mov_[ebx],eax
    pop_eax               # ;
# stdlib.c 762
:_sscanf_loop1
    push_eax              # format (local)
    lea_eax,[ebp+DWORD] %8
    mov_eax,[eax]         # ?
    mov_al,[eax]          # ?1
    movzx_eax,al
    movsx_eax,al          # char
    push_eax              # 0
    mov_eax, %0
    pop_ebx               # !=
    cmp_eax_ebx
    setne_al
    movzx_eax,al
    test_eax,eax          # !
    sete_al
    movzx_eax,al
    test_eax,eax          # if
    pop_eax
    je %_sscanf_else2
    jmp %_sscanf_loop_end1
# stdlib.c 763
:_sscanf_else2 # no else
    push_eax              # str (local)
    lea_eax,[ebp+DWORD] %12
    mov_eax,[eax]         # ?
    mov_al,[eax]          # ?1
    movzx_eax,al
    movsx_eax,al          # char
    push_eax              # 0
    mov_eax, %0
    pop_ebx               # ==
    cmp_eax_ebx
    sete_al
    movzx_eax,al
    test_eax,eax          # if
    pop_eax
    je %_sscanf_else3
# stdlib.c 764
    jmp %_sscanf_loop_end1
    jmp %_sscanf_else_end3
:_sscanf_else3
# stdlib.c 765
    push_eax              # format (local)
    lea_eax,[ebp+DWORD] %8
    mov_eax,[eax]         # ?
    mov_al,[eax]          # ?1
    movzx_eax,al
    movsx_eax,al          # char
    push_eax              # 37
    mov_eax, %37
    pop_ebx               # ==
    cmp_eax_ebx
    sete_al
    movzx_eax,al
    test_eax,eax          # if
    pop_eax
    je %_sscanf_else4
# stdlib.c 766
# stdlib.c 767
    push_eax              # format (local)
    lea_eax,[ebp+DWORD] %8
    push_eax              # $ (dup)
    mov_eax,[eax]         # ?
    push_eax              # 1
    mov_eax, %1
    pop_ebx               # +
    add_eax,ebx
    pop_ebx               # =
    mov_[ebx],eax
    push_eax              # 1
    mov_eax, %1
    pop_ebx               # -
    sub_ebx,eax
    mov_eax,ebx
    pop_eax               # ;
# stdlib.c 768
    push_eax              # format (local)
    lea_eax,[ebp+DWORD] %8
    mov_eax,[eax]         # ?
    mov_al,[eax]          # ?1
    movzx_eax,al
    movsx_eax,al          # char
    push_eax              # 100
    mov_eax, %100
    pop_ebx               # ==
    cmp_eax_ebx
    sete_al
    movzx_eax,al
    test_eax,eax          # if
    pop_eax
    je %_sscanf_else5
# stdlib.c 769
# stdlib.c 770
    push_eax              # format (local)
    lea_eax,[ebp+DWORD] %8
    push_eax              # $ (dup)
    mov_eax,[eax]         # ?
    push_eax              # 1
    mov_eax, %1
    pop_ebx               # +
    add_eax,ebx
    pop_ebx               # =
    mov_[ebx],eax
    push_eax              # 1
    mov_eax, %1
    pop_ebx               # -
    sub_ebx,eax
    mov_eax,ebx
    pop_eax               # ;
    push_eax              # v (local)
    lea_eax,[ebp+DWORD] %24
    push_eax              # 0
    mov_eax, %0
    pop_ebx               # =
    mov_[ebx],eax
    pop_eax               # ;
# stdlib.c 772
:_sscanf_loop6
    push_eax              # 48
    mov_eax, %48
    push_eax              # str (local)
    lea_eax,[ebp+DWORD] %12
    mov_eax,[eax]         # ?
    mov_al,[eax]          # ?1
    movzx_eax,al
    movsx_eax,al          # char
    pop_ebx               # <=s
    cmp_eax_ebx
    setle_al
    movzx_eax,al
    test_eax,eax          # &&
    je %_sscanf_and_end7
    pop_eax
    push_eax              # str (local)
    lea_eax,[ebp+DWORD] %12
    mov_eax,[eax]         # ?
    mov_al,[eax]          # ?1
    movzx_eax,al
    movsx_eax,al          # char
    push_eax              # 57
    mov_eax, %57
    pop_ebx               # <=s
    cmp_eax_ebx
    setle_al
    movzx_eax,al
:_sscanf_and_end7
    test_eax,eax          # !
    sete_al
    movzx_eax,al
    test_eax,eax          # if
    pop_eax
    je %_sscanf_else8
    jmp %_sscanf_loop_end6
# stdlib.c 773
# stdlib.c 774
:_sscanf_else8 # no else
    push_eax              # v (local)
    lea_eax,[ebp+DWORD] %24
    push_eax              # 10
    mov_eax, %10
    push_eax              # v (local)
    lea_eax,[ebp+DWORD] %24
    mov_eax,[eax]         # ?
    pop_ebx               # *
    mul_ebx
    push_eax              # str (local)
    lea_eax,[ebp+DWORD] %12
    mov_eax,[eax]         # ?
    mov_al,[eax]          # ?1
    movzx_eax,al
    movsx_eax,al          # char
    pop_ebx               # +
    add_eax,ebx
    push_eax              # 48
    mov_eax, %48
    pop_ebx               # -
    sub_ebx,eax
    mov_eax,ebx
    pop_ebx               # =
    mov_[ebx],eax
    pop_eax               # ;
# stdlib.c 775
    push_eax              # str (local)
    lea_eax,[ebp+DWORD] %12
    push_eax              # $ (dup)
    mov_eax,[eax]         # ?
    push_eax              # 1
    mov_eax, %1
    pop_ebx               # +
    add_eax,ebx
    pop_ebx               # =
    mov_[ebx],eax
    push_eax              # 1
    mov_eax, %1
    pop_ebx               # -
    sub_ebx,eax
    mov_eax,ebx
    pop_eax               # ;
    jmp %_sscanf_loop6
:_sscanf_loop_end6
# stdlib.c 777
    push_eax              # ap (local)
    lea_eax,[ebp+DWORD] %16
    mov_eax,[eax]         # ?
    mov_eax,[eax]         # ?
    push_eax              # v (local)
    lea_eax,[ebp+DWORD] %24
    mov_eax,[eax]         # ?
    pop_ebx               # =
    mov_[ebx],eax
    pop_eax               # ;
# stdlib.c 778
    push_eax              # ap (local)
    lea_eax,[ebp+DWORD] %16
    push_eax              # $ (dup)
    mov_eax,[eax]         # ?
    push_eax              # 4
    mov_eax, %4
    pop_ebx               # +
    add_eax,ebx
    pop_ebx               # =
    mov_[ebx],eax
    push_eax              # 4
    mov_eax, %4
    pop_ebx               # -
    sub_ebx,eax
    mov_eax,ebx
    pop_eax               # ;
# stdlib.c 779
    push_eax              # args_parsed (local)
    lea_eax,[ebp+DWORD] %20
    push_eax              # $ (dup)
    mov_eax,[eax]         # ?
    push_eax              # 1
    mov_eax, %1
    pop_ebx               # +
    add_eax,ebx
    pop_ebx               # =
    mov_[ebx],eax
    push_eax              # 1
    mov_eax, %1
    pop_ebx               # -
    sub_ebx,eax
    mov_eax,ebx
    pop_eax               # ;
    jmp %_sscanf_else_end5
:_sscanf_else5
# stdlib.c 782
# stdlib.c 783
    push_eax              # stderr (global)
    mov_eax, &g_stderr
    mov_eax,[eax]         # ?
    push_eax              # 'sscanf: format %%%c not supported\n'
    mov_eax, &string_9
    push_eax              # __var_args (local)
    lea_eax,[ebp+DWORD] %24
    push_eax              # format (local)
    lea_eax,[ebp+DWORD] %8
    mov_eax,[eax]         # ?
    mov_al,[eax]          # ?1
    movzx_eax,al
    movsx_eax,al          # char
    pop_ebx               # =
    mov_[ebx],eax
    pop_eax               # ;
    push_eax              # __var_args (local)
    lea_eax,[ebp+DWORD] %24
    push_eax              # fprintf (function)
    mov_eax, &f_fprintf
    add_ebp, %28         # ()
    call_eax
    sub_ebp, %28
    pop_eax               # ;
# stdlib.c 784
    push_eax              # 1
    mov_eax, %1
    push_eax              # exit (function)
    mov_eax, &f_exit
    add_ebp, %24         # ()
    call_eax
    sub_ebp, %24
    pop_eax               # ;
:_sscanf_else_end5
    jmp %_sscanf_else_end4
:_sscanf_else4
# stdlib.c 788
# stdlib.c 789
    push_eax              # format (local)
    lea_eax,[ebp+DWORD] %8
    mov_eax,[eax]         # ?
    mov_al,[eax]          # ?1
    movzx_eax,al
    movsx_eax,al          # char
    push_eax              # str (local)
    lea_eax,[ebp+DWORD] %12
    mov_eax,[eax]         # ?
    mov_al,[eax]          # ?1
    movzx_eax,al
    movsx_eax,al          # char
    pop_ebx               # !=
    cmp_eax_ebx
    setne_al
    movzx_eax,al
    test_eax,eax          # if
    pop_eax
    je %_sscanf_else9
# stdlib.c 790
    jmp %_sscanf_loop_end1
# stdlib.c 791
:_sscanf_else9 # no else
    push_eax              # format (local)
    lea_eax,[ebp+DWORD] %8
    push_eax              # $ (dup)
    mov_eax,[eax]         # ?
    push_eax              # 1
    mov_eax, %1
    pop_ebx               # +
    add_eax,ebx
    pop_ebx               # =
    mov_[ebx],eax
    push_eax              # 1
    mov_eax, %1
    pop_ebx               # -
    sub_ebx,eax
    mov_eax,ebx
    pop_eax               # ;
# stdlib.c 792
    push_eax              # str (local)
    lea_eax,[ebp+DWORD] %12
    push_eax              # $ (dup)
    mov_eax,[eax]         # ?
    push_eax              # 1
    mov_eax, %1
    pop_ebx               # +
    add_eax,ebx
    pop_ebx               # =
    mov_[ebx],eax
    push_eax              # 1
    mov_eax, %1
    pop_ebx               # -
    sub_ebx,eax
    mov_eax,ebx
    pop_eax               # ;
:_sscanf_else_end4
:_sscanf_else_end3
    jmp %_sscanf_loop1
:_sscanf_loop_end1
# stdlib.c 794
    push_eax              # args_parsed (local)
    lea_eax,[ebp+DWORD] %20
    mov_eax,[eax]         # ?
    mov_ebx,[ebp]         # return
    push_ebx
    ret
    push_eax              # 0
    mov_eax, %0
    mov_ebx,[ebp]         # return
    push_ebx
    ret

:f_atoi
    pop_eax
    mov_[ebp],eax
    pop_eax
    push_eax              # nptr (local)
    lea_eax,[ebp+DWORD] %4
    pop_ebx               # =:
    mov_[eax],ebx
    pop_eax
# stdlib.c 800
    push_eax              # stderr (global)
    mov_eax, &g_stderr
    mov_eax,[eax]         # ?
    push_eax              # 'TODO atoi\n'
    mov_eax, &string_10
    push_eax              # 0
    mov_eax, %0
    push_eax              # fprintf (function)
    mov_eax, &f_fprintf
    add_ebp, %8         # ()
    call_eax
    sub_ebp, %8
    pop_eax               # ;
# stdlib.c 800
    push_eax              # 1
    mov_eax, %1
    push_eax              # exit (function)
    mov_eax, &f_exit
    add_ebp, %8         # ()
    call_eax
    sub_ebp, %8
    pop_eax               # ;
    push_eax              # 0
    mov_eax, %0
    mov_ebx,[ebp]         # return
    push_ebx
    ret

:f_remove
    pop_eax
    mov_[ebp],eax
    pop_eax
    push_eax              # pathname (local)
    lea_eax,[ebp+DWORD] %4
    pop_ebx               # =:
    mov_[eax],ebx
    pop_eax
# stdlib.c 805
    push_eax              # 10
    mov_eax, %10
    push_eax              # pathname (local)
    lea_eax,[ebp+DWORD] %4
    mov_eax,[eax]         # ?
    push_eax              # 0
    mov_eax, %0
    push_eax              # 0
    mov_eax, %0
    push_eax              # sys_int80 (function)
    mov_eax, &f_sys_int80
    add_ebp, %8         # ()
    call_eax
    sub_ebp, %8
    mov_ebx,[ebp]         # return
    push_ebx
    ret
    push_eax              # 0
    mov_eax, %0
    mov_ebx,[ebp]         # return
    push_ebx
    ret

:f_execvp
    pop_eax
    mov_[ebp],eax
    pop_eax
    push_eax              # argv (local)
    lea_eax,[ebp+DWORD] %4
    pop_ebx               # =:
    mov_[eax],ebx
    pop_eax
    push_eax              # file (local)
    lea_eax,[ebp+DWORD] %8
    pop_ebx               # =:
    mov_[eax],ebx
    pop_eax
# stdlib.c 811
    push_eax              # stderr (global)
    mov_eax, &g_stderr
    mov_eax,[eax]         # ?
    push_eax              # 'TODO execvp\n'
    mov_eax, &string_11
    push_eax              # 0
    mov_eax, %0
    push_eax              # fprintf (function)
    mov_eax, &f_fprintf
    add_ebp, %12         # ()
    call_eax
    sub_ebp, %12
    pop_eax               # ;
# stdlib.c 811
    push_eax              # 1
    mov_eax, %1
    push_eax              # exit (function)
    mov_eax, &f_exit
    add_ebp, %12         # ()
    call_eax
    sub_ebp, %12
    pop_eax               # ;
    push_eax              # 0
    mov_eax, %0
    mov_ebx,[ebp]         # return
    push_ebx
    ret

:f_mkdir
    pop_eax
    mov_[ebp],eax
    pop_eax
    push_eax              # mode (local)
    lea_eax,[ebp+DWORD] %4
    pop_ebx               # =:
    mov_[eax],ebx
    pop_eax
    push_eax              # pathname (local)
    lea_eax,[ebp+DWORD] %8
    pop_ebx               # =:
    mov_[eax],ebx
    pop_eax
# stdlib.c 816
    push_eax              # 39
    mov_eax, %39
    push_eax              # pathname (local)
    lea_eax,[ebp+DWORD] %8
    mov_eax,[eax]         # ?
    push_eax              # mode (local)
    lea_eax,[ebp+DWORD] %4
    mov_eax,[eax]         # ?
    push_eax              # 0
    mov_eax, %0
    push_eax              # sys_int80 (function)
    mov_eax, &f_sys_int80
    add_ebp, %12         # ()
    call_eax
    sub_ebp, %12
    mov_ebx,[ebp]         # return
    push_ebx
    ret
    push_eax              # 0
    mov_eax, %0
    mov_ebx,[ebp]         # return
    push_ebx
    ret

:f_chdir
    pop_eax
    mov_[ebp],eax
    pop_eax
    push_eax              # path (local)
    lea_eax,[ebp+DWORD] %4
    pop_ebx               # =:
    mov_[eax],ebx
    pop_eax
# stdlib.c 821
    push_eax              # 12
    mov_eax, %12
    push_eax              # path (local)
    lea_eax,[ebp+DWORD] %4
    mov_eax,[eax]         # ?
    push_eax              # 0
    mov_eax, %0
    push_eax              # 0
    mov_eax, %0
    push_eax              # sys_int80 (function)
    mov_eax, &f_sys_int80
    add_ebp, %8         # ()
    call_eax
    sub_ebp, %8
    pop_eax               # ;
    push_eax              # 0
    mov_eax, %0
    mov_ebx,[ebp]         # return
    push_ebx
    ret

:f_access
    pop_eax
    mov_[ebp],eax
    pop_eax
    push_eax              # mode (local)
    lea_eax,[ebp+DWORD] %4
    pop_ebx               # =:
    mov_[eax],ebx
    pop_eax
    push_eax              # filename (local)
    lea_eax,[ebp+DWORD] %8
    pop_ebx               # =:
    mov_[eax],ebx
    pop_eax
# stdlib.c 826
    push_eax              # 33
    mov_eax, %33
    push_eax              # filename (local)
    lea_eax,[ebp+DWORD] %8
    mov_eax,[eax]         # ?
    push_eax              # mode (local)
    lea_eax,[ebp+DWORD] %4
    mov_eax,[eax]         # ?
    push_eax              # 0
    mov_eax, %0
    push_eax              # sys_int80 (function)
    mov_eax, &f_sys_int80
    add_ebp, %12         # ()
    call_eax
    sub_ebp, %12
    mov_ebx,[ebp]         # return
    push_ebx
    ret
    push_eax              # 0
    mov_eax, %0
    mov_ebx,[ebp]         # return
    push_ebx
    ret

:f_chmod
    pop_eax
    mov_[ebp],eax
    pop_eax
    push_eax              # mode (local)
    lea_eax,[ebp+DWORD] %4
    pop_ebx               # =:
    mov_[eax],ebx
    pop_eax
    push_eax              # filename (local)
    lea_eax,[ebp+DWORD] %8
    pop_ebx               # =:
    mov_[eax],ebx
    pop_eax
# stdlib.c 831
    push_eax              # 15
    mov_eax, %15
    push_eax              # filename (local)
    lea_eax,[ebp+DWORD] %8
    mov_eax,[eax]         # ?
    push_eax              # mode (local)
    lea_eax,[ebp+DWORD] %4
    mov_eax,[eax]         # ?
    push_eax              # 0
    mov_eax, %0
    push_eax              # sys_int80 (function)
    mov_eax, &f_sys_int80
    add_ebp, %12         # ()
    call_eax
    sub_ebp, %12
    mov_ebx,[ebp]         # return
    push_ebx
    ret
    push_eax              # 0
    mov_eax, %0
    mov_ebx,[ebp]         # return
    push_ebx
    ret

:f_symlink
    pop_eax
    mov_[ebp],eax
    pop_eax
    push_eax              # linkpath (local)
    lea_eax,[ebp+DWORD] %4
    pop_ebx               # =:
    mov_[eax],ebx
    pop_eax
    push_eax              # target (local)
    lea_eax,[ebp+DWORD] %8
    pop_ebx               # =:
    mov_[eax],ebx
    pop_eax
# stdlib.c 836
    push_eax              # 83
    mov_eax, %83
    push_eax              # target (local)
    lea_eax,[ebp+DWORD] %8
    mov_eax,[eax]         # ?
    push_eax              # linkpath (local)
    lea_eax,[ebp+DWORD] %4
    mov_eax,[eax]         # ?
    push_eax              # 0
    mov_eax, %0
    push_eax              # sys_int80 (function)
    mov_eax, &f_sys_int80
    add_ebp, %12         # ()
    call_eax
    sub_ebp, %12
    mov_ebx,[ebp]         # return
    push_ebx
    ret
    push_eax              # 0
    mov_eax, %0
    mov_ebx,[ebp]         # return
    push_ebx
    ret

:f_uname
    pop_eax
    mov_[ebp],eax
    pop_eax
    push_eax              # buf (local)
    lea_eax,[ebp+DWORD] %4
    pop_ebx               # =:
    mov_[eax],ebx
    pop_eax
# stdlib.c 854
    push_eax              # 109
    mov_eax, %109
    push_eax              # buf (local)
    lea_eax,[ebp+DWORD] %4
    mov_eax,[eax]         # ?
    push_eax              # 0
    mov_eax, %0
    push_eax              # 0
    mov_eax, %0
    push_eax              # sys_int80 (function)
    mov_eax, &f_sys_int80
    add_ebp, %8         # ()
    call_eax
    sub_ebp, %8
    mov_ebx,[ebp]         # return
    push_ebx
    ret
    push_eax              # 0
    mov_eax, %0
    mov_ebx,[ebp]         # return
    push_ebx
    ret

:f_execve
    pop_eax
    mov_[ebp],eax
    pop_eax
    push_eax              # env (local)
    lea_eax,[ebp+DWORD] %4
    pop_ebx               # =:
    mov_[eax],ebx
    pop_eax
    push_eax              # argv (local)
    lea_eax,[ebp+DWORD] %8
    pop_ebx               # =:
    mov_[eax],ebx
    pop_eax
    push_eax              # program (local)
    lea_eax,[ebp+DWORD] %12
    pop_ebx               # =:
    mov_[eax],ebx
    pop_eax
# stdlib.c 859
    push_eax              # 11
    mov_eax, %11
    push_eax              # program (local)
    lea_eax,[ebp+DWORD] %12
    mov_eax,[eax]         # ?
    push_eax              # argv (local)
    lea_eax,[ebp+DWORD] %8
    mov_eax,[eax]         # ?
    push_eax              # env (local)
    lea_eax,[ebp+DWORD] %4
    mov_eax,[eax]         # ?
    push_eax              # sys_int80 (function)
    mov_eax, &f_sys_int80
    add_ebp, %16         # ()
    call_eax
    sub_ebp, %16
    mov_ebx,[ebp]         # return
    push_ebx
    ret
    push_eax              # 0
    mov_eax, %0
    mov_ebx,[ebp]         # return
    push_ebx
    ret

:f_fgets
    pop_eax
    mov_[ebp],eax
    pop_eax
    push_eax              # f (local)
    lea_eax,[ebp+DWORD] %4
    pop_ebx               # =:
    mov_[eax],ebx
    pop_eax
    push_eax              # len (local)
    lea_eax,[ebp+DWORD] %8
    pop_ebx               # =:
    mov_[eax],ebx
    pop_eax
    push_eax              # str (local)
    lea_eax,[ebp+DWORD] %12
    pop_ebx               # =:
    mov_[eax],ebx
    pop_eax
# stdlib.c 864
    push_eax              # f (local)
    lea_eax,[ebp+DWORD] %4
    mov_eax,[eax]         # ?
    push_eax              # feof (function)
    mov_eax, &f_feof
    add_ebp, %16         # ()
    call_eax
    sub_ebp, %16
    test_eax,eax          # if
    pop_eax
    je %_fgets_else1
# stdlib.c 865
    push_eax              # 0
    mov_eax, %0
    mov_ebx,[ebp]         # return
    push_ebx
    ret
# stdlib.c 867
:_fgets_else1 # no else
    push_eax              # i (local)
    lea_eax,[ebp+DWORD] %16
    push_eax              # 0
    mov_eax, %0
    pop_ebx               # =
    mov_[ebx],eax
    pop_eax               # ;
:_fgets_loop2
    push_eax              # i (local)
    lea_eax,[ebp+DWORD] %16
    mov_eax,[eax]         # ?
    push_eax              # len (local)
    lea_eax,[ebp+DWORD] %8
    mov_eax,[eax]         # ?
    push_eax              # 1
    mov_eax, %1
    pop_ebx               # -
    sub_ebx,eax
    mov_eax,ebx
    pop_ebx               # <s
    cmp_eax_ebx
    setl_al
    movzx_eax,al
    test_eax,eax          # !
    sete_al
    movzx_eax,al
    test_eax,eax          # if
    pop_eax
    je %_fgets_else3
    jmp %_fgets_loop_end2
# stdlib.c 868
:_fgets_else3 # no else
    push_eax              # ch (local)
    lea_eax,[ebp+DWORD] %20
    push_eax              # f (local)
    lea_eax,[ebp+DWORD] %4
    mov_eax,[eax]         # ?
    push_eax              # fgetc (function)
    mov_eax, &f_fgetc
    add_ebp, %24         # ()
    call_eax
    sub_ebp, %24
    pop_ebx               # =
    mov_[ebx],eax
    pop_eax               # ;
# stdlib.c 870
    push_eax              # ch (local)
    lea_eax,[ebp+DWORD] %20
    mov_eax,[eax]         # ?
    push_eax              # 0
    mov_eax, %0
    pop_ebx               # <s
    cmp_eax_ebx
    setl_al
    movzx_eax,al
    test_eax,eax          # if
    pop_eax
    je %_fgets_else4
# stdlib.c 871
# stdlib.c 872
    push_eax              # str (local)
    lea_eax,[ebp+DWORD] %12
    mov_eax,[eax]         # ?
    push_eax              # i (local)
    lea_eax,[ebp+DWORD] %16
    mov_eax,[eax]         # ?
    pop_ebx               # +
    add_eax,ebx
    push_eax              # 0
    mov_eax, %0
    pop_ebx               # =1
    mov_[ebx],al
    pop_eax               # ;
# stdlib.c 873
    jmp %_fgets_loop_end2
# stdlib.c 875
:_fgets_else4 # no else
    push_eax              # str (local)
    lea_eax,[ebp+DWORD] %12
    mov_eax,[eax]         # ?
    push_eax              # i (local)
    lea_eax,[ebp+DWORD] %16
    mov_eax,[eax]         # ?
    pop_ebx               # +
    add_eax,ebx
    push_eax              # ch (local)
    lea_eax,[ebp+DWORD] %20
    mov_eax,[eax]         # ?
    pop_ebx               # =1
    mov_[ebx],al
    pop_eax               # ;
# stdlib.c 876
    push_eax              # ch (local)
    lea_eax,[ebp+DWORD] %20
    mov_eax,[eax]         # ?
    push_eax              # 10
    mov_eax, %10
    pop_ebx               # ==
    cmp_eax_ebx
    sete_al
    movzx_eax,al
    test_eax,eax          # if
    pop_eax
    je %_fgets_else5
# stdlib.c 877
# stdlib.c 878
    push_eax              # str (local)
    lea_eax,[ebp+DWORD] %12
    mov_eax,[eax]         # ?
    push_eax              # i (local)
    lea_eax,[ebp+DWORD] %16
    mov_eax,[eax]         # ?
    push_eax              # 1
    mov_eax, %1
    pop_ebx               # +
    add_eax,ebx
    pop_ebx               # +
    add_eax,ebx
    push_eax              # 0
    mov_eax, %0
    pop_ebx               # =1
    mov_[ebx],al
    pop_eax               # ;
# stdlib.c 879
    jmp %_fgets_loop_end2
:_fgets_else5 # no else
    push_eax              # i (local)
    lea_eax,[ebp+DWORD] %16
    push_eax              # $ (dup)
    mov_eax,[eax]         # ?
    push_eax              # 1
    mov_eax, %1
    pop_ebx               # +
    add_eax,ebx
    pop_ebx               # =
    mov_[ebx],eax
    push_eax              # 1
    mov_eax, %1
    pop_ebx               # -
    sub_ebx,eax
    mov_eax,ebx
    pop_eax               # ;
    jmp %_fgets_loop2
:_fgets_loop_end2
# stdlib.c 882
    push_eax              # str (local)
    lea_eax,[ebp+DWORD] %12
    mov_eax,[eax]         # ?
    mov_ebx,[ebp]         # return
    push_ebx
    ret
    push_eax              # 0
    mov_eax, %0
    mov_ebx,[ebp]         # return
    push_ebx
    ret

:f_read_char
    pop_eax
    mov_[ebp],eax
    pop_eax
# stack_c.c 54
    push_eax              # fin (global)
    mov_eax, &g_fin
    mov_eax,[eax]         # ?
    push_eax              # feof (function)
    mov_eax, &f_feof
    add_ebp, %4         # ()
    call_eax
    sub_ebp, %4
    test_eax,eax          # if
    pop_eax
    je %_read_char_else1
# stack_c.c 55
    push_eax              # cur_char (global)
    mov_eax, &g_cur_char
    push_eax              # 0
    mov_eax, %0
    pop_ebx               # =1
    mov_[ebx],al
    pop_eax               # ;
    jmp %_read_char_else_end1
:_read_char_else1
# stack_c.c 57
# stack_c.c 58
    push_eax              # cur_char (global)
    mov_eax, &g_cur_char
    mov_al,[eax]          # ?1
    movzx_eax,al
    movsx_eax,al          # char
    push_eax              # 10
    mov_eax, %10
    pop_ebx               # ==
    cmp_eax_ebx
    sete_al
    movzx_eax,al
    test_eax,eax          # if
    pop_eax
    je %_read_char_else2
# stack_c.c 59
# stack_c.c 60
    push_eax              # cur_char_line (global)
    mov_eax, &g_cur_char_line
    push_eax              # $ (dup)
    mov_eax,[eax]         # ?
    push_eax              # 1
    mov_eax, %1
    pop_ebx               # +
    add_eax,ebx
    pop_ebx               # =
    mov_[ebx],eax
    push_eax              # 1
    mov_eax, %1
    pop_ebx               # -
    sub_ebx,eax
    mov_eax,ebx
    pop_eax               # ;
# stack_c.c 61
    push_eax              # cur_char_column (global)
    mov_eax, &g_cur_char_column
    push_eax              # 0
    mov_eax, %0
    pop_ebx               # =
    mov_[ebx],eax
    pop_eax               # ;
# stack_c.c 63
:_read_char_else2 # no else
    push_eax              # cur_char (global)
    mov_eax, &g_cur_char
    push_eax              # fin (global)
    mov_eax, &g_fin
    mov_eax,[eax]         # ?
    push_eax              # fgetc (function)
    mov_eax, &f_fgetc
    add_ebp, %4         # ()
    call_eax
    sub_ebp, %4
    pop_ebx               # =1
    mov_[ebx],al
    pop_eax               # ;
# stack_c.c 64
    push_eax              # fin (global)
    mov_eax, &g_fin
    mov_eax,[eax]         # ?
    push_eax              # feof (function)
    mov_eax, &f_feof
    add_ebp, %4         # ()
    call_eax
    sub_ebp, %4
    test_eax,eax          # if
    pop_eax
    je %_read_char_else3
# stack_c.c 65
    push_eax              # cur_char (global)
    mov_eax, &g_cur_char
    push_eax              # 0
    mov_eax, %0
    pop_ebx               # =1
    mov_[ebx],al
    pop_eax               # ;
    jmp %_read_char_else_end3
:_read_char_else3
# stack_c.c 67
# stack_c.c 68
    push_eax              # cur_char_column (global)
    mov_eax, &g_cur_char_column
    push_eax              # $ (dup)
    mov_eax,[eax]         # ?
    push_eax              # 1
    mov_eax, %1
    pop_ebx               # +
    add_eax,ebx
    pop_ebx               # =
    mov_[ebx],eax
    push_eax              # 1
    mov_eax, %1
    pop_ebx               # -
    sub_ebx,eax
    mov_eax,ebx
    pop_eax               # ;
# stack_c.c 69
    push_eax              # cur_char (global)
    mov_eax, &g_cur_char
    mov_al,[eax]          # ?1
    movzx_eax,al
    movsx_eax,al          # char
    push_eax              # 9
    mov_eax, %9
    pop_ebx               # ==
    cmp_eax_ebx
    sete_al
    movzx_eax,al
    test_eax,eax          # if
    pop_eax
    je %_read_char_else4
# stack_c.c 70
    push_eax              # cur_char_column (global)
    mov_eax, &g_cur_char_column
    push_eax              # $ (dup)
    mov_eax,[eax]         # ?
    push_eax              # 4
    mov_eax, %4
    push_eax              # cur_char_column (global)
    mov_eax, &g_cur_char_column
    mov_eax,[eax]         # ?
    push_eax              # 1
    mov_eax, %1
    pop_ebx               # -
    sub_ebx,eax
    mov_eax,ebx
    push_eax              # 4
    mov_eax, %4
    mov_ebx,eax           # %s
    pop_eax
    cdq
    idiv_ebx
    mov_eax,edx pop_ebx               # -
    sub_ebx,eax
    mov_eax,ebx
    pop_ebx               # +
    add_eax,ebx
    pop_ebx               # =
    mov_[ebx],eax
    pop_eax               # ;
:_read_char_else4 # no else
:_read_char_else_end3
:_read_char_else_end1
    push_eax              # 0
    mov_eax, %0
    mov_ebx,[ebp]         # return
    push_ebx
    ret

:f_get_token
    pop_eax
    mov_[ebp],eax
    pop_eax
# stack_c.c 159
    push_eax              # token_len (global)
    mov_eax, &g_token_len
    push_eax              # 0
    mov_eax, %0
    pop_ebx               # =
    mov_[ebx],eax
    pop_eax               # ;
# stack_c.c 161
:_get_token_loop1
    push_eax              # cur_char (global)
    mov_eax, &g_cur_char
    mov_al,[eax]          # ?1
    movzx_eax,al
    movsx_eax,al          # char
    push_eax              # 0
    mov_eax, %0
    pop_ebx               # !=
    cmp_eax_ebx
    setne_al
    movzx_eax,al
    test_eax,eax          # &&
    je %_get_token_and_end2
    pop_eax
    push_eax              # cur_char (global)
    mov_eax, &g_cur_char
    mov_al,[eax]          # ?1
    movzx_eax,al
    movsx_eax,al          # char
    push_eax              # 32
    mov_eax, %32
    pop_ebx               # <=s
    cmp_eax_ebx
    setle_al
    movzx_eax,al
:_get_token_and_end2
    test_eax,eax          # ||
    jne %_get_token_or_end3
    pop_eax
    push_eax              # cur_char (global)
    mov_eax, &g_cur_char
    mov_al,[eax]          # ?1
    movzx_eax,al
    movsx_eax,al          # char
    push_eax              # 35
    mov_eax, %35
    pop_ebx               # ==
    cmp_eax_ebx
    sete_al
    movzx_eax,al
:_get_token_or_end3
    test_eax,eax          # !
    sete_al
    movzx_eax,al
    test_eax,eax          # if
    pop_eax
    je %_get_token_else4
    jmp %_get_token_loop_end1
# stack_c.c 162
# stack_c.c 163
:_get_token_else4 # no else
    push_eax              # cur_char (global)
    mov_eax, &g_cur_char
    mov_al,[eax]          # ?1
    movzx_eax,al
    movsx_eax,al          # char
    push_eax              # 35
    mov_eax, %35
    pop_ebx               # ==
    cmp_eax_ebx
    sete_al
    movzx_eax,al
    test_eax,eax          # if
    pop_eax
    je %_get_token_else5
# stack_c.c 164
# stack_c.c 165
:_get_token_loop6
# stack_c.c 166
# stack_c.c 167
    push_eax              # cur_char (global)
    mov_eax, &g_cur_char
    mov_al,[eax]          # ?1
    movzx_eax,al
    movsx_eax,al          # char
    push_eax              # fout (global)
    mov_eax, &g_fout
    mov_eax,[eax]         # ?
    push_eax              # fputc (function)
    mov_eax, &f_fputc
    add_ebp, %4         # ()
    call_eax
    sub_ebp, %4
    pop_eax               # ;
# stack_c.c 168
    push_eax              # read_char (function)
    mov_eax, &f_read_char
    add_ebp, %4         # ()
    call_eax
    sub_ebp, %4
    pop_eax               # ;
    push_eax              # cur_char (global)
    mov_eax, &g_cur_char
    mov_al,[eax]          # ?1
    movzx_eax,al
    movsx_eax,al          # char
    push_eax              # 0
    mov_eax, %0
    pop_ebx               # !=
    cmp_eax_ebx
    setne_al
    movzx_eax,al
    test_eax,eax          # &&
    je %_get_token_and_end7
    pop_eax
    push_eax              # cur_char (global)
    mov_eax, &g_cur_char
    mov_al,[eax]          # ?1
    movzx_eax,al
    movsx_eax,al          # char
    push_eax              # 10
    mov_eax, %10
    pop_ebx               # !=
    cmp_eax_ebx
    setne_al
    movzx_eax,al
:_get_token_and_end7
    test_eax,eax          # !
    sete_al
    movzx_eax,al
    test_eax,eax          # if
    pop_eax
    je %_get_token_else8
    jmp %_get_token_loop_end6
:_get_token_else8 # no else
    jmp %_get_token_loop6
:_get_token_loop_end6
# stack_c.c 171
    push_eax              # 10
    mov_eax, %10
    push_eax              # fout (global)
    mov_eax, &g_fout
    mov_eax,[eax]         # ?
    push_eax              # fputc (function)
    mov_eax, &f_fputc
    add_ebp, %4         # ()
    call_eax
    sub_ebp, %4
    pop_eax               # ;
    jmp %_get_token_else_end5
:_get_token_else5
# stack_c.c 174
    push_eax              # read_char (function)
    mov_eax, &f_read_char
    add_ebp, %4         # ()
    call_eax
    sub_ebp, %4
    pop_eax               # ;
:_get_token_else_end5
    jmp %_get_token_loop1
:_get_token_loop_end1
# stack_c.c 178
    push_eax              # cur_char (global)
    mov_eax, &g_cur_char
    mov_al,[eax]          # ?1
    movzx_eax,al
    movsx_eax,al          # char
    push_eax              # 0
    mov_eax, %0
    pop_ebx               # ==
    cmp_eax_ebx
    sete_al
    movzx_eax,al
    test_eax,eax          # if
    pop_eax
    je %_get_token_else9
# stack_c.c 179
# stack_c.c 180
    push_eax              # sym (global)
    mov_eax, &g_sym
    push_eax              # 0
    mov_eax, %0
    pop_ebx               # =1
    mov_[ebx],al
    pop_eax               # ;
# stack_c.c 181
    push_eax              # 0
    mov_eax, %0
    mov_ebx,[ebp]         # return
    push_ebx
    ret
# stack_c.c 185
:_get_token_else9 # no else
    push_eax              # cur_line (global)
    mov_eax, &g_cur_line
    push_eax              # cur_char_line (global)
    mov_eax, &g_cur_char_line
    mov_eax,[eax]         # ?
    pop_ebx               # =
    mov_[ebx],eax
    pop_eax               # ;
# stack_c.c 186
    push_eax              # cur_column (global)
    mov_eax, &g_cur_column
    push_eax              # cur_char_column (global)
    mov_eax, &g_cur_char_column
    mov_eax,[eax]         # ?
    pop_ebx               # =
    mov_[ebx],eax
    pop_eax               # ;
# stack_c.c 189
    push_eax              # 97
    mov_eax, %97
    push_eax              # cur_char (global)
    mov_eax, &g_cur_char
    mov_al,[eax]          # ?1
    movzx_eax,al
    movsx_eax,al          # char
    pop_ebx               # <=s
    cmp_eax_ebx
    setle_al
    movzx_eax,al
    test_eax,eax          # &&
    je %_get_token_and_end10
    pop_eax
    push_eax              # cur_char (global)
    mov_eax, &g_cur_char
    mov_al,[eax]          # ?1
    movzx_eax,al
    movsx_eax,al          # char
    push_eax              # 122
    mov_eax, %122
    pop_ebx               # <=s
    cmp_eax_ebx
    setle_al
    movzx_eax,al
:_get_token_and_end10
    test_eax,eax          # ||
    jne %_get_token_or_end11
    pop_eax
    push_eax              # 65
    mov_eax, %65
    push_eax              # cur_char (global)
    mov_eax, &g_cur_char
    mov_al,[eax]          # ?1
    movzx_eax,al
    movsx_eax,al          # char
    pop_ebx               # <=s
    cmp_eax_ebx
    setle_al
    movzx_eax,al
    test_eax,eax          # &&
    je %_get_token_and_end12
    pop_eax
    push_eax              # cur_char (global)
    mov_eax, &g_cur_char
    mov_al,[eax]          # ?1
    movzx_eax,al
    movsx_eax,al          # char
    push_eax              # 90
    mov_eax, %90
    pop_ebx               # <=s
    cmp_eax_ebx
    setle_al
    movzx_eax,al
:_get_token_and_end12
:_get_token_or_end11
    test_eax,eax          # ||
    jne %_get_token_or_end13
    pop_eax
    push_eax              # cur_char (global)
    mov_eax, &g_cur_char
    mov_al,[eax]          # ?1
    movzx_eax,al
    movsx_eax,al          # char
    push_eax              # 95
    mov_eax, %95
    pop_ebx               # ==
    cmp_eax_ebx
    sete_al
    movzx_eax,al
:_get_token_or_end13
    test_eax,eax          # if
    pop_eax
    je %_get_token_else14
# stack_c.c 190
# stack_c.c 191
    push_eax              # sym (global)
    mov_eax, &g_sym
    push_eax              # 65
    mov_eax, %65
    pop_ebx               # =1
    mov_[ebx],al
    pop_eax               # ;
# stack_c.c 192
:_get_token_loop15
# stack_c.c 193
# stack_c.c 194
    push_eax              # token (global)
    mov_eax, &g_token
    push_eax              # token_len (global)
    mov_eax, &g_token_len
    push_eax              # $ (dup)
    mov_eax,[eax]         # ?
    push_eax              # 1
    mov_eax, %1
    pop_ebx               # +
    add_eax,ebx
    pop_ebx               # =
    mov_[ebx],eax
    push_eax              # 1
    mov_eax, %1
    pop_ebx               # -
    sub_ebx,eax
    mov_eax,ebx
    pop_ebx               # +
    add_eax,ebx
    push_eax              # cur_char (global)
    mov_eax, &g_cur_char
    mov_al,[eax]          # ?1
    movzx_eax,al
    movsx_eax,al          # char
    pop_ebx               # =1
    mov_[ebx],al
    pop_eax               # ;
# stack_c.c 195
    push_eax              # read_char (function)
    mov_eax, &f_read_char
    add_ebp, %4         # ()
    call_eax
    sub_ebp, %4
    pop_eax               # ;
    push_eax              # 97
    mov_eax, %97
    push_eax              # cur_char (global)
    mov_eax, &g_cur_char
    mov_al,[eax]          # ?1
    movzx_eax,al
    movsx_eax,al          # char
    pop_ebx               # <=s
    cmp_eax_ebx
    setle_al
    movzx_eax,al
    test_eax,eax          # &&
    je %_get_token_and_end16
    pop_eax
    push_eax              # cur_char (global)
    mov_eax, &g_cur_char
    mov_al,[eax]          # ?1
    movzx_eax,al
    movsx_eax,al          # char
    push_eax              # 122
    mov_eax, %122
    pop_ebx               # <=s
    cmp_eax_ebx
    setle_al
    movzx_eax,al
:_get_token_and_end16
    test_eax,eax          # ||
    jne %_get_token_or_end17
    pop_eax
    push_eax              # 65
    mov_eax, %65
    push_eax              # cur_char (global)
    mov_eax, &g_cur_char
    mov_al,[eax]          # ?1
    movzx_eax,al
    movsx_eax,al          # char
    pop_ebx               # <=s
    cmp_eax_ebx
    setle_al
    movzx_eax,al
    test_eax,eax          # &&
    je %_get_token_and_end18
    pop_eax
    push_eax              # cur_char (global)
    mov_eax, &g_cur_char
    mov_al,[eax]          # ?1
    movzx_eax,al
    movsx_eax,al          # char
    push_eax              # 90
    mov_eax, %90
    pop_ebx               # <=s
    cmp_eax_ebx
    setle_al
    movzx_eax,al
:_get_token_and_end18
:_get_token_or_end17
    test_eax,eax          # ||
    jne %_get_token_or_end19
    pop_eax
    push_eax              # cur_char (global)
    mov_eax, &g_cur_char
    mov_al,[eax]          # ?1
    movzx_eax,al
    movsx_eax,al          # char
    push_eax              # 95
    mov_eax, %95
    pop_ebx               # ==
    cmp_eax_ebx
    sete_al
    movzx_eax,al
:_get_token_or_end19
    test_eax,eax          # ||
    jne %_get_token_or_end20
    pop_eax
    push_eax              # 48
    mov_eax, %48
    push_eax              # cur_char (global)
    mov_eax, &g_cur_char
    mov_al,[eax]          # ?1
    movzx_eax,al
    movsx_eax,al          # char
    pop_ebx               # <=s
    cmp_eax_ebx
    setle_al
    movzx_eax,al
    test_eax,eax          # &&
    je %_get_token_and_end21
    pop_eax
    push_eax              # cur_char (global)
    mov_eax, &g_cur_char
    mov_al,[eax]          # ?1
    movzx_eax,al
    movsx_eax,al          # char
    push_eax              # 57
    mov_eax, %57
    pop_ebx               # <=s
    cmp_eax_ebx
    setle_al
    movzx_eax,al
:_get_token_and_end21
:_get_token_or_end20
    test_eax,eax          # !
    sete_al
    movzx_eax,al
    test_eax,eax          # if
    pop_eax
    je %_get_token_else22
    jmp %_get_token_loop_end15
:_get_token_else22 # no else
    jmp %_get_token_loop15
:_get_token_loop_end15
# stack_c.c 198
    push_eax              # token (global)
    mov_eax, &g_token
    push_eax              # token_len (global)
    mov_eax, &g_token_len
    mov_eax,[eax]         # ?
    pop_ebx               # +
    add_eax,ebx
    push_eax              # 0
    mov_eax, %0
    pop_ebx               # =1
    mov_[ebx],al
    pop_eax               # ;
# stack_c.c 200
    push_eax              # token_len (global)
    mov_eax, &g_token_len
    mov_eax,[eax]         # ?
    push_eax              # 50
    mov_eax, %50
    pop_ebx               # >s
    cmp_eax_ebx
    setg_al
    movzx_eax,al
    test_eax,eax          # if
    pop_eax
    je %_get_token_else23
# stack_c.c 201
# stack_c.c 202
    push_eax              # ferr (global)
    mov_eax, &g_ferr
    mov_eax,[eax]         # ?
    push_eax              # 'ERROR %d: Variable '%s' is longer than %d characters\n'
    mov_eax, &string_12
    push_eax              # __var_args (local)
    lea_eax,[ebp+DWORD] %4
    push_eax              # cur_line (global)
    mov_eax, &g_cur_line
    mov_eax,[eax]         # ?
    pop_ebx               # =
    mov_[ebx],eax
    pop_eax               # ;
    push_eax              # __var_args (local)
    lea_eax,[ebp+DWORD] %4
    push_eax              # 4
    mov_eax, %4
    pop_ebx               # +
    add_eax,ebx
    push_eax              # token (global)
    mov_eax, &g_token
    pop_ebx               # =
    mov_[ebx],eax
    pop_eax               # ;
    push_eax              # __var_args (local)
    lea_eax,[ebp+DWORD] %4
    push_eax              # 8
    mov_eax, %8
    pop_ebx               # +
    add_eax,ebx
    push_eax              # 50
    mov_eax, %50
    pop_ebx               # =
    mov_[ebx],eax
    pop_eax               # ;
    push_eax              # __var_args (local)
    lea_eax,[ebp+DWORD] %4
    push_eax              # fprintf (function)
    mov_eax, &f_fprintf
    add_ebp, %16         # ()
    call_eax
    sub_ebp, %16
    pop_eax               # ;
# stack_c.c 203
    push_eax              # error (global)
    mov_eax, &g_error
    push_eax              # 1
    mov_eax, %1
    pop_ebx               # =
    mov_[ebx],eax
    pop_eax               # ;
# stack_c.c 204
    push_eax              # sym (global)
    mov_eax, &g_sym
    push_eax              # 0
    mov_eax, %0
    pop_ebx               # =1
    mov_[ebx],al
    pop_eax               # ;
# stack_c.c 205
    push_eax              # 0
    mov_eax, %0
    mov_ebx,[ebp]         # return
    push_ebx
    ret
# stack_c.c 209
:_get_token_else23 # no else
    push_eax              # i (local)
    lea_eax,[ebp+DWORD] %4
    push_eax              # 0
    mov_eax, %0
    pop_ebx               # =
    mov_[ebx],eax
    pop_eax               # ;
:_get_token_loop24
    push_eax              # i (local)
    lea_eax,[ebp+DWORD] %4
    mov_eax,[eax]         # ?
    push_eax              # 12
    mov_eax, %12
    pop_ebx               # <s
    cmp_eax_ebx
    setl_al
    movzx_eax,al
    test_eax,eax          # !
    sete_al
    movzx_eax,al
    test_eax,eax          # if
    pop_eax
    je %_get_token_else25
    jmp %_get_token_loop_end24
# stack_c.c 210
:_get_token_else25 # no else
    push_eax              # keywords (global)
    mov_eax, &g_keywords
    push_eax              # i (local)
    lea_eax,[ebp+DWORD] %4
    mov_eax,[eax]         # ?
    push_eax              # 8
    mov_eax, %8
    pop_ebx               # *
    mul_ebx
    pop_ebx               # +
    add_eax,ebx
    push_eax              # 0 (const s6_m_name)
    mov_eax, %0
    pop_ebx               # +
    add_eax,ebx
    mov_eax,[eax]         # ?
    push_eax              # token (global)
    mov_eax, &g_token
    push_eax              # strcmp (function)
    mov_eax, &f_strcmp
    add_ebp, %8         # ()
    call_eax
    sub_ebp, %8
    push_eax              # 0
    mov_eax, %0
    pop_ebx               # ==
    cmp_eax_ebx
    sete_al
    movzx_eax,al
    test_eax,eax          # if
    pop_eax
    je %_get_token_else26
# stack_c.c 211
# stack_c.c 212
    push_eax              # sym (global)
    mov_eax, &g_sym
    push_eax              # keywords (global)
    mov_eax, &g_keywords
    push_eax              # i (local)
    lea_eax,[ebp+DWORD] %4
    mov_eax,[eax]         # ?
    push_eax              # 8
    mov_eax, %8
    pop_ebx               # *
    mul_ebx
    pop_ebx               # +
    add_eax,ebx
    push_eax              # 4 (const s6_m_sym)
    mov_eax, %4
    pop_ebx               # +
    add_eax,ebx
    mov_al,[eax]          # ?1
    movzx_eax,al
    movsx_eax,al          # char
    pop_ebx               # =1
    mov_[ebx],al
    pop_eax               # ;
# stack_c.c 213
    jmp %_get_token_loop_end24
:_get_token_else26 # no else
    push_eax              # i (local)
    lea_eax,[ebp+DWORD] %4
    push_eax              # $ (dup)
    mov_eax,[eax]         # ?
    push_eax              # 1
    mov_eax, %1
    pop_ebx               # +
    add_eax,ebx
    pop_ebx               # =
    mov_[ebx],eax
    push_eax              # 1
    mov_eax, %1
    pop_ebx               # -
    sub_ebx,eax
    mov_eax,ebx
    pop_eax               # ;
    jmp %_get_token_loop24
:_get_token_loop_end24
# stack_c.c 215
    push_eax              # 0
    mov_eax, %0
    mov_ebx,[ebp]         # return
    push_ebx
    ret
# stack_c.c 219
:_get_token_else14 # no else
    push_eax              # cur_char (global)
    mov_eax, &g_cur_char
    mov_al,[eax]          # ?1
    movzx_eax,al
    movsx_eax,al          # char
    push_eax              # 39
    mov_eax, %39
    pop_ebx               # ==
    cmp_eax_ebx
    sete_al
    movzx_eax,al
    test_eax,eax          # ||
    jne %_get_token_or_end27
    pop_eax
    push_eax              # cur_char (global)
    mov_eax, &g_cur_char
    mov_al,[eax]          # ?1
    movzx_eax,al
    movsx_eax,al          # char
    push_eax              # 34
    mov_eax, %34
    pop_ebx               # ==
    cmp_eax_ebx
    sete_al
    movzx_eax,al
:_get_token_or_end27
    test_eax,eax          # if
    pop_eax
    je %_get_token_else28
# stack_c.c 220
# stack_c.c 221
    push_eax              # sym (global)
    mov_eax, &g_sym
    push_eax              # cur_char (global)
    mov_eax, &g_cur_char
    mov_al,[eax]          # ?1
    movzx_eax,al
    movsx_eax,al          # char
    pop_ebx               # =1
    mov_[ebx],al
    pop_eax               # ;
    push_eax              # quote (local)
    lea_eax,[ebp+DWORD] %4
    push_eax              # cur_char (global)
    mov_eax, &g_cur_char
    mov_al,[eax]          # ?1
    movzx_eax,al
    movsx_eax,al          # char
    pop_ebx               # =1
    mov_[ebx],al
    pop_eax               # ;
# stack_c.c 223
:_get_token_loop29
# stack_c.c 224
# stack_c.c 225
    push_eax              # read_char (function)
    mov_eax, &f_read_char
    add_ebp, %8         # ()
    call_eax
    sub_ebp, %8
    pop_eax               # ;
# stack_c.c 226
    push_eax              # cur_char (global)
    mov_eax, &g_cur_char
    mov_al,[eax]          # ?1
    movzx_eax,al
    movsx_eax,al          # char
    push_eax              # 0
    mov_eax, %0
    pop_ebx               # ==
    cmp_eax_ebx
    sete_al
    movzx_eax,al
    test_eax,eax          # if
    pop_eax
    je %_get_token_else30
# stack_c.c 227
    jmp %_get_token_loop_end29
# stack_c.c 228
:_get_token_else30 # no else
    push_eax              # cur_char (global)
    mov_eax, &g_cur_char
    mov_al,[eax]          # ?1
    movzx_eax,al
    movsx_eax,al          # char
    push_eax              # quote (local)
    lea_eax,[ebp+DWORD] %4
    mov_al,[eax]          # ?1
    movzx_eax,al
    movsx_eax,al          # char
    pop_ebx               # ==
    cmp_eax_ebx
    sete_al
    movzx_eax,al
    test_eax,eax          # if
    pop_eax
    je %_get_token_else31
# stack_c.c 229
# stack_c.c 230
    push_eax              # read_char (function)
    mov_eax, &f_read_char
    add_ebp, %8         # ()
    call_eax
    sub_ebp, %8
    pop_eax               # ;
# stack_c.c 231
    jmp %_get_token_loop_end29
# stack_c.c 233
:_get_token_else31 # no else
    push_eax              # token_len (global)
    mov_eax, &g_token_len
    mov_eax,[eax]         # ?
    push_eax              # 8000
    mov_eax, %8000
    pop_ebx               # >s
    cmp_eax_ebx
    setg_al
    movzx_eax,al
    test_eax,eax          # if
    pop_eax
    je %_get_token_else32
# stack_c.c 234
# stack_c.c 235
    push_eax              # ferr (global)
    mov_eax, &g_ferr
    mov_eax,[eax]         # ?
    push_eax              # 'ERROR %d: String longer than %d characters\n'
    mov_eax, &string_13
    push_eax              # __var_args (local)
    lea_eax,[ebp+DWORD] %8
    push_eax              # cur_line (global)
    mov_eax, &g_cur_line
    mov_eax,[eax]         # ?
    pop_ebx               # =
    mov_[ebx],eax
    pop_eax               # ;
    push_eax              # __var_args (local)
    lea_eax,[ebp+DWORD] %8
    push_eax              # 4
    mov_eax, %4
    pop_ebx               # +
    add_eax,ebx
    push_eax              # 8000
    mov_eax, %8000
    pop_ebx               # =
    mov_[ebx],eax
    pop_eax               # ;
    push_eax              # __var_args (local)
    lea_eax,[ebp+DWORD] %8
    push_eax              # fprintf (function)
    mov_eax, &f_fprintf
    add_ebp, %16         # ()
    call_eax
    sub_ebp, %16
    pop_eax               # ;
# stack_c.c 236
    push_eax              # error (global)
    mov_eax, &g_error
    push_eax              # 1
    mov_eax, %1
    pop_ebx               # =
    mov_[ebx],eax
    pop_eax               # ;
# stack_c.c 237
    push_eax              # sym (global)
    mov_eax, &g_sym
    push_eax              # 0
    mov_eax, %0
    pop_ebx               # =1
    mov_[ebx],al
    pop_eax               # ;
# stack_c.c 238
    push_eax              # 0
    mov_eax, %0
    mov_ebx,[ebp]         # return
    push_ebx
    ret
# stack_c.c 240
:_get_token_else32 # no else
    push_eax              # cur_char (global)
    mov_eax, &g_cur_char
    mov_al,[eax]          # ?1
    movzx_eax,al
    movsx_eax,al          # char
    push_eax              # 92
    mov_eax, %92
    pop_ebx               # ==
    cmp_eax_ebx
    sete_al
    movzx_eax,al
    test_eax,eax          # if
    pop_eax
    je %_get_token_else33
# stack_c.c 241
# stack_c.c 242
    push_eax              # read_char (function)
    mov_eax, &f_read_char
    add_ebp, %8         # ()
    call_eax
    sub_ebp, %8
    pop_eax               # ;
# stack_c.c 243
    push_eax              # cur_char (global)
    mov_eax, &g_cur_char
    mov_al,[eax]          # ?1
    movzx_eax,al
    movsx_eax,al          # char
    push_eax              # 48
    mov_eax, %48
    pop_ebx               # ==
    cmp_eax_ebx
    sete_al
    movzx_eax,al
    test_eax,eax          # if
    pop_eax
    je %_get_token_else34
# stack_c.c 244
    push_eax              # cur_char (global)
    mov_eax, &g_cur_char
    push_eax              # 0
    mov_eax, %0
    pop_ebx               # =1
    mov_[ebx],al
    pop_eax               # ;
    jmp %_get_token_else_end34
:_get_token_else34
# stack_c.c 245
    push_eax              # cur_char (global)
    mov_eax, &g_cur_char
    mov_al,[eax]          # ?1
    movzx_eax,al
    movsx_eax,al          # char
    push_eax              # 110
    mov_eax, %110
    pop_ebx               # ==
    cmp_eax_ebx
    sete_al
    movzx_eax,al
    test_eax,eax          # if
    pop_eax
    je %_get_token_else35
# stack_c.c 246
    push_eax              # cur_char (global)
    mov_eax, &g_cur_char
    push_eax              # 10
    mov_eax, %10
    pop_ebx               # =1
    mov_[ebx],al
    pop_eax               # ;
    jmp %_get_token_else_end35
:_get_token_else35
# stack_c.c 247
    push_eax              # cur_char (global)
    mov_eax, &g_cur_char
    mov_al,[eax]          # ?1
    movzx_eax,al
    movsx_eax,al          # char
    push_eax              # 114
    mov_eax, %114
    pop_ebx               # ==
    cmp_eax_ebx
    sete_al
    movzx_eax,al
    test_eax,eax          # if
    pop_eax
    je %_get_token_else36
# stack_c.c 248
    push_eax              # cur_char (global)
    mov_eax, &g_cur_char
    push_eax              # 13
    mov_eax, %13
    pop_ebx               # =1
    mov_[ebx],al
    pop_eax               # ;
    jmp %_get_token_else_end36
:_get_token_else36
# stack_c.c 249
    push_eax              # cur_char (global)
    mov_eax, &g_cur_char
    mov_al,[eax]          # ?1
    movzx_eax,al
    movsx_eax,al          # char
    push_eax              # 116
    mov_eax, %116
    pop_ebx               # ==
    cmp_eax_ebx
    sete_al
    movzx_eax,al
    test_eax,eax          # if
    pop_eax
    je %_get_token_else37
# stack_c.c 250
    push_eax              # cur_char (global)
    mov_eax, &g_cur_char
    push_eax              # 9
    mov_eax, %9
    pop_ebx               # =1
    mov_[ebx],al
    pop_eax               # ;
    jmp %_get_token_else_end37
:_get_token_else37
# stack_c.c 251
    push_eax              # cur_char (global)
    mov_eax, &g_cur_char
    mov_al,[eax]          # ?1
    movzx_eax,al
    movsx_eax,al          # char
    push_eax              # 120
    mov_eax, %120
    pop_ebx               # ==
    cmp_eax_ebx
    sete_al
    movzx_eax,al
    test_eax,eax          # if
    pop_eax
    je %_get_token_else38
# stack_c.c 252
# stack_c.c 253
    push_eax              # read_char (function)
    mov_eax, &f_read_char
    add_ebp, %8         # ()
    call_eax
    sub_ebp, %8
    pop_eax               # ;
    push_eax              # v (local)
    lea_eax,[ebp+DWORD] %8
    push_eax              # 0
    mov_eax, %0
    pop_ebx               # =
    mov_[ebx],eax
    pop_eax               # ;
# stack_c.c 255
    push_eax              # 48
    mov_eax, %48
    push_eax              # cur_char (global)
    mov_eax, &g_cur_char
    mov_al,[eax]          # ?1
    movzx_eax,al
    movsx_eax,al          # char
    pop_ebx               # <=s
    cmp_eax_ebx
    setle_al
    movzx_eax,al
    test_eax,eax          # &&
    je %_get_token_and_end39
    pop_eax
    push_eax              # cur_char (global)
    mov_eax, &g_cur_char
    mov_al,[eax]          # ?1
    movzx_eax,al
    movsx_eax,al          # char
    push_eax              # 57
    mov_eax, %57
    pop_ebx               # <=s
    cmp_eax_ebx
    setle_al
    movzx_eax,al
:_get_token_and_end39
    test_eax,eax          # if
    pop_eax
    je %_get_token_else40
# stack_c.c 256
    push_eax              # v (local)
    lea_eax,[ebp+DWORD] %8
    push_eax              # 16
    mov_eax, %16
    push_eax              # cur_char (global)
    mov_eax, &g_cur_char
    mov_al,[eax]          # ?1
    movzx_eax,al
    movsx_eax,al          # char
    push_eax              # 48
    mov_eax, %48
    pop_ebx               # -
    sub_ebx,eax
    mov_eax,ebx
    pop_ebx               # *
    mul_ebx
    pop_ebx               # =
    mov_[ebx],eax
    pop_eax               # ;
    jmp %_get_token_else_end40
:_get_token_else40
# stack_c.c 257
    push_eax              # 65
    mov_eax, %65
    push_eax              # cur_char (global)
    mov_eax, &g_cur_char
    mov_al,[eax]          # ?1
    movzx_eax,al
    movsx_eax,al          # char
    pop_ebx               # <=s
    cmp_eax_ebx
    setle_al
    movzx_eax,al
    test_eax,eax          # &&
    je %_get_token_and_end41
    pop_eax
    push_eax              # cur_char (global)
    mov_eax, &g_cur_char
    mov_al,[eax]          # ?1
    movzx_eax,al
    movsx_eax,al          # char
    push_eax              # 70
    mov_eax, %70
    pop_ebx               # <=s
    cmp_eax_ebx
    setle_al
    movzx_eax,al
:_get_token_and_end41
    test_eax,eax          # if
    pop_eax
    je %_get_token_else42
# stack_c.c 258
    push_eax              # v (local)
    lea_eax,[ebp+DWORD] %8
    push_eax              # 16
    mov_eax, %16
    push_eax              # cur_char (global)
    mov_eax, &g_cur_char
    mov_al,[eax]          # ?1
    movzx_eax,al
    movsx_eax,al          # char
    push_eax              # 65
    mov_eax, %65
    pop_ebx               # -
    sub_ebx,eax
    mov_eax,ebx
    push_eax              # 10
    mov_eax, %10
    pop_ebx               # +
    add_eax,ebx
    pop_ebx               # *
    mul_ebx
    pop_ebx               # =
    mov_[ebx],eax
    pop_eax               # ;
    jmp %_get_token_else_end42
:_get_token_else42
# stack_c.c 259
    push_eax              # 97
    mov_eax, %97
    push_eax              # cur_char (global)
    mov_eax, &g_cur_char
    mov_al,[eax]          # ?1
    movzx_eax,al
    movsx_eax,al          # char
    pop_ebx               # <=s
    cmp_eax_ebx
    setle_al
    movzx_eax,al
    test_eax,eax          # &&
    je %_get_token_and_end43
    pop_eax
    push_eax              # cur_char (global)
    mov_eax, &g_cur_char
    mov_al,[eax]          # ?1
    movzx_eax,al
    movsx_eax,al          # char
    push_eax              # 102
    mov_eax, %102
    pop_ebx               # <=s
    cmp_eax_ebx
    setle_al
    movzx_eax,al
:_get_token_and_end43
    test_eax,eax          # if
    pop_eax
    je %_get_token_else44
# stack_c.c 260
    push_eax              # v (local)
    lea_eax,[ebp+DWORD] %8
    push_eax              # 16
    mov_eax, %16
    push_eax              # cur_char (global)
    mov_eax, &g_cur_char
    mov_al,[eax]          # ?1
    movzx_eax,al
    movsx_eax,al          # char
    push_eax              # 97
    mov_eax, %97
    pop_ebx               # -
    sub_ebx,eax
    mov_eax,ebx
    push_eax              # 10
    mov_eax, %10
    pop_ebx               # +
    add_eax,ebx
    pop_ebx               # *
    mul_ebx
    pop_ebx               # =
    mov_[ebx],eax
    pop_eax               # ;
    jmp %_get_token_else_end44
:_get_token_else44
# stack_c.c 262
    push_eax              # ferr (global)
    mov_eax, &g_ferr
    mov_eax,[eax]         # ?
    push_eax              # 'ERROR %d.%d: Illegal character '%c' after \\x\n'
    mov_eax, &string_14
    push_eax              # __var_args (local)
    lea_eax,[ebp+DWORD] %12
    push_eax              # cur_line (global)
    mov_eax, &g_cur_line
    mov_eax,[eax]         # ?
    pop_ebx               # =
    mov_[ebx],eax
    pop_eax               # ;
    push_eax              # __var_args (local)
    lea_eax,[ebp+DWORD] %12
    push_eax              # 4
    mov_eax, %4
    pop_ebx               # +
    add_eax,ebx
    push_eax              # cur_column (global)
    mov_eax, &g_cur_column
    mov_eax,[eax]         # ?
    pop_ebx               # =
    mov_[ebx],eax
    pop_eax               # ;
    push_eax              # __var_args (local)
    lea_eax,[ebp+DWORD] %12
    push_eax              # 8
    mov_eax, %8
    pop_ebx               # +
    add_eax,ebx
    push_eax              # cur_char (global)
    mov_eax, &g_cur_char
    mov_al,[eax]          # ?1
    movzx_eax,al
    movsx_eax,al          # char
    pop_ebx               # =
    mov_[ebx],eax
    pop_eax               # ;
    push_eax              # __var_args (local)
    lea_eax,[ebp+DWORD] %12
    push_eax              # fprintf (function)
    mov_eax, &f_fprintf
    add_ebp, %24         # ()
    call_eax
    sub_ebp, %24
    pop_eax               # ;
:_get_token_else_end44
:_get_token_else_end42
:_get_token_else_end40
# stack_c.c 263
    push_eax              # read_char (function)
    mov_eax, &f_read_char
    add_ebp, %12         # ()
    call_eax
    sub_ebp, %12
    pop_eax               # ;
# stack_c.c 264
    push_eax              # 48
    mov_eax, %48
    push_eax              # cur_char (global)
    mov_eax, &g_cur_char
    mov_al,[eax]          # ?1
    movzx_eax,al
    movsx_eax,al          # char
    pop_ebx               # <=s
    cmp_eax_ebx
    setle_al
    movzx_eax,al
    test_eax,eax          # &&
    je %_get_token_and_end45
    pop_eax
    push_eax              # cur_char (global)
    mov_eax, &g_cur_char
    mov_al,[eax]          # ?1
    movzx_eax,al
    movsx_eax,al          # char
    push_eax              # 57
    mov_eax, %57
    pop_ebx               # <=s
    cmp_eax_ebx
    setle_al
    movzx_eax,al
:_get_token_and_end45
    test_eax,eax          # if
    pop_eax
    je %_get_token_else46
# stack_c.c 265
    push_eax              # v (local)
    lea_eax,[ebp+DWORD] %8
    push_eax              # $ (dup)
    mov_eax,[eax]         # ?
    push_eax              # cur_char (global)
    mov_eax, &g_cur_char
    mov_al,[eax]          # ?1
    movzx_eax,al
    movsx_eax,al          # char
    push_eax              # 48
    mov_eax, %48
    pop_ebx               # -
    sub_ebx,eax
    mov_eax,ebx
    pop_ebx               # +
    add_eax,ebx
    pop_ebx               # =
    mov_[ebx],eax
    pop_eax               # ;
    jmp %_get_token_else_end46
:_get_token_else46
# stack_c.c 266
    push_eax              # 65
    mov_eax, %65
    push_eax              # cur_char (global)
    mov_eax, &g_cur_char
    mov_al,[eax]          # ?1
    movzx_eax,al
    movsx_eax,al          # char
    pop_ebx               # <=s
    cmp_eax_ebx
    setle_al
    movzx_eax,al
    test_eax,eax          # &&
    je %_get_token_and_end47
    pop_eax
    push_eax              # cur_char (global)
    mov_eax, &g_cur_char
    mov_al,[eax]          # ?1
    movzx_eax,al
    movsx_eax,al          # char
    push_eax              # 70
    mov_eax, %70
    pop_ebx               # <=s
    cmp_eax_ebx
    setle_al
    movzx_eax,al
:_get_token_and_end47
    test_eax,eax          # if
    pop_eax
    je %_get_token_else48
# stack_c.c 267
    push_eax              # v (local)
    lea_eax,[ebp+DWORD] %8
    push_eax              # $ (dup)
    mov_eax,[eax]         # ?
    push_eax              # cur_char (global)
    mov_eax, &g_cur_char
    mov_al,[eax]          # ?1
    movzx_eax,al
    movsx_eax,al          # char
    push_eax              # 65
    mov_eax, %65
    pop_ebx               # -
    sub_ebx,eax
    mov_eax,ebx
    push_eax              # 10
    mov_eax, %10
    pop_ebx               # +
    add_eax,ebx
    pop_ebx               # +
    add_eax,ebx
    pop_ebx               # =
    mov_[ebx],eax
    pop_eax               # ;
    jmp %_get_token_else_end48
:_get_token_else48
# stack_c.c 268
    push_eax              # 97
    mov_eax, %97
    push_eax              # cur_char (global)
    mov_eax, &g_cur_char
    mov_al,[eax]          # ?1
    movzx_eax,al
    movsx_eax,al          # char
    pop_ebx               # <=s
    cmp_eax_ebx
    setle_al
    movzx_eax,al
    test_eax,eax          # &&
    je %_get_token_and_end49
    pop_eax
    push_eax              # cur_char (global)
    mov_eax, &g_cur_char
    mov_al,[eax]          # ?1
    movzx_eax,al
    movsx_eax,al          # char
    push_eax              # 102
    mov_eax, %102
    pop_ebx               # <=s
    cmp_eax_ebx
    setle_al
    movzx_eax,al
:_get_token_and_end49
    test_eax,eax          # if
    pop_eax
    je %_get_token_else50
# stack_c.c 269
    push_eax              # v (local)
    lea_eax,[ebp+DWORD] %8
    push_eax              # $ (dup)
    mov_eax,[eax]         # ?
    push_eax              # cur_char (global)
    mov_eax, &g_cur_char
    mov_al,[eax]          # ?1
    movzx_eax,al
    movsx_eax,al          # char
    push_eax              # 97
    mov_eax, %97
    pop_ebx               # -
    sub_ebx,eax
    mov_eax,ebx
    push_eax              # 10
    mov_eax, %10
    pop_ebx               # +
    add_eax,ebx
    pop_ebx               # +
    add_eax,ebx
    pop_ebx               # =
    mov_[ebx],eax
    pop_eax               # ;
    jmp %_get_token_else_end50
:_get_token_else50
# stack_c.c 271
    push_eax              # ferr (global)
    mov_eax, &g_ferr
    mov_eax,[eax]         # ?
    push_eax              # 'ERROR %d.%d: Illegal character '%c' after \\x\n'
    mov_eax, &string_14
    push_eax              # __var_args (local)
    lea_eax,[ebp+DWORD] %12
    push_eax              # cur_line (global)
    mov_eax, &g_cur_line
    mov_eax,[eax]         # ?
    pop_ebx               # =
    mov_[ebx],eax
    pop_eax               # ;
    push_eax              # __var_args (local)
    lea_eax,[ebp+DWORD] %12
    push_eax              # 4
    mov_eax, %4
    pop_ebx               # +
    add_eax,ebx
    push_eax              # cur_column (global)
    mov_eax, &g_cur_column
    mov_eax,[eax]         # ?
    pop_ebx               # =
    mov_[ebx],eax
    pop_eax               # ;
    push_eax              # __var_args (local)
    lea_eax,[ebp+DWORD] %12
    push_eax              # 8
    mov_eax, %8
    pop_ebx               # +
    add_eax,ebx
    push_eax              # cur_char (global)
    mov_eax, &g_cur_char
    mov_al,[eax]          # ?1
    movzx_eax,al
    movsx_eax,al          # char
    pop_ebx               # =
    mov_[ebx],eax
    pop_eax               # ;
    push_eax              # __var_args (local)
    lea_eax,[ebp+DWORD] %12
    push_eax              # fprintf (function)
    mov_eax, &f_fprintf
    add_ebp, %24         # ()
    call_eax
    sub_ebp, %24
    pop_eax               # ;
:_get_token_else_end50
:_get_token_else_end48
:_get_token_else_end46
# stack_c.c 272
    push_eax              # cur_char (global)
    mov_eax, &g_cur_char
    push_eax              # v (local)
    lea_eax,[ebp+DWORD] %8
    mov_eax,[eax]         # ?
    pop_ebx               # =1
    mov_[ebx],al
    pop_eax               # ;
:_get_token_else38 # no else
:_get_token_else_end37
:_get_token_else_end36
:_get_token_else_end35
:_get_token_else_end34
# stack_c.c 274
    push_eax              # token (global)
    mov_eax, &g_token
    push_eax              # token_len (global)
    mov_eax, &g_token_len
    push_eax              # $ (dup)
    mov_eax,[eax]         # ?
    push_eax              # 1
    mov_eax, %1
    pop_ebx               # +
    add_eax,ebx
    pop_ebx               # =
    mov_[ebx],eax
    push_eax              # 1
    mov_eax, %1
    pop_ebx               # -
    sub_ebx,eax
    mov_eax,ebx
    pop_ebx               # +
    add_eax,ebx
    push_eax              # cur_char (global)
    mov_eax, &g_cur_char
    mov_al,[eax]          # ?1
    movzx_eax,al
    movsx_eax,al          # char
    pop_ebx               # =1
    mov_[ebx],al
    pop_eax               # ;
    jmp %_get_token_else_end33
:_get_token_else33
# stack_c.c 277
    push_eax              # token (global)
    mov_eax, &g_token
    push_eax              # token_len (global)
    mov_eax, &g_token_len
    push_eax              # $ (dup)
    mov_eax,[eax]         # ?
    push_eax              # 1
    mov_eax, %1
    pop_ebx               # +
    add_eax,ebx
    pop_ebx               # =
    mov_[ebx],eax
    push_eax              # 1
    mov_eax, %1
    pop_ebx               # -
    sub_ebx,eax
    mov_eax,ebx
    pop_ebx               # +
    add_eax,ebx
    push_eax              # cur_char (global)
    mov_eax, &g_cur_char
    mov_al,[eax]          # ?1
    movzx_eax,al
    movsx_eax,al          # char
    pop_ebx               # =1
    mov_[ebx],al
    pop_eax               # ;
:_get_token_else_end33
    jmp %_get_token_loop29
:_get_token_loop_end29
# stack_c.c 279
    push_eax              # token (global)
    mov_eax, &g_token
    push_eax              # token_len (global)
    mov_eax, &g_token_len
    mov_eax,[eax]         # ?
    pop_ebx               # +
    add_eax,ebx
    push_eax              # 0
    mov_eax, %0
    pop_ebx               # =1
    mov_[ebx],al
    pop_eax               # ;
# stack_c.c 280
    push_eax              # 0
    mov_eax, %0
    mov_ebx,[ebp]         # return
    push_ebx
    ret
# stack_c.c 284
:_get_token_else28 # no else
    push_eax              # 48
    mov_eax, %48
    push_eax              # cur_char (global)
    mov_eax, &g_cur_char
    mov_al,[eax]          # ?1
    movzx_eax,al
    movsx_eax,al          # char
    pop_ebx               # <=s
    cmp_eax_ebx
    setle_al
    movzx_eax,al
    test_eax,eax          # &&
    je %_get_token_and_end51
    pop_eax
    push_eax              # cur_char (global)
    mov_eax, &g_cur_char
    mov_al,[eax]          # ?1
    movzx_eax,al
    movsx_eax,al          # char
    push_eax              # 57
    mov_eax, %57
    pop_ebx               # <=s
    cmp_eax_ebx
    setle_al
    movzx_eax,al
:_get_token_and_end51
    test_eax,eax          # ||
    jne %_get_token_or_end52
    pop_eax
    push_eax              # cur_char (global)
    mov_eax, &g_cur_char
    mov_al,[eax]          # ?1
    movzx_eax,al
    movsx_eax,al          # char
    push_eax              # 45
    mov_eax, %45
    pop_ebx               # ==
    cmp_eax_ebx
    sete_al
    movzx_eax,al
:_get_token_or_end52
    test_eax,eax          # if
    pop_eax
    je %_get_token_else53
# stack_c.c 285
# stack_c.c 286
    push_eax              # token (global)
    mov_eax, &g_token
    push_eax              # token_len (global)
    mov_eax, &g_token_len
    push_eax              # $ (dup)
    mov_eax,[eax]         # ?
    push_eax              # 1
    mov_eax, %1
    pop_ebx               # +
    add_eax,ebx
    pop_ebx               # =
    mov_[ebx],eax
    push_eax              # 1
    mov_eax, %1
    pop_ebx               # -
    sub_ebx,eax
    mov_eax,ebx
    pop_ebx               # +
    add_eax,ebx
    push_eax              # cur_char (global)
    mov_eax, &g_cur_char
    mov_al,[eax]          # ?1
    movzx_eax,al
    movsx_eax,al          # char
    pop_ebx               # =1
    mov_[ebx],al
    pop_eax               # ;
    push_eax              # sign (local)
    lea_eax,[ebp+DWORD] %4
    push_eax              # 1
    mov_eax, %1
    pop_ebx               # =
    mov_[ebx],eax
    pop_eax               # ;
# stack_c.c 288
    push_eax              # cur_char (global)
    mov_eax, &g_cur_char
    mov_al,[eax]          # ?1
    movzx_eax,al
    movsx_eax,al          # char
    push_eax              # 45
    mov_eax, %45
    pop_ebx               # ==
    cmp_eax_ebx
    sete_al
    movzx_eax,al
    test_eax,eax          # if
    pop_eax
    je %_get_token_else54
# stack_c.c 289
# stack_c.c 290
    push_eax              # sign (local)
    lea_eax,[ebp+DWORD] %4
    push_eax              # 4294967295
    mov_eax, %4294967295
    pop_ebx               # =
    mov_[ebx],eax
    pop_eax               # ;
# stack_c.c 291
    push_eax              # read_char (function)
    mov_eax, &f_read_char
    add_ebp, %8         # ()
    call_eax
    sub_ebp, %8
    pop_eax               # ;
# stack_c.c 293
    push_eax              # cur_char (global)
    mov_eax, &g_cur_char
    mov_al,[eax]          # ?1
    movzx_eax,al
    movsx_eax,al          # char
    push_eax              # 62
    mov_eax, %62
    pop_ebx               # ==
    cmp_eax_ebx
    sete_al
    movzx_eax,al
    test_eax,eax          # if
    pop_eax
    je %_get_token_else55
# stack_c.c 294
# stack_c.c 295
    push_eax              # sym (global)
    mov_eax, &g_sym
    push_eax              # 97
    mov_eax, %97
    push_eax              # 20
    mov_eax, %20
    pop_ebx               # +
    add_eax,ebx
    pop_ebx               # =1
    mov_[ebx],al
    pop_eax               # ;
# stack_c.c 296
    push_eax              # token (global)
    mov_eax, &g_token
    push_eax              # token_len (global)
    mov_eax, &g_token_len
    push_eax              # $ (dup)
    mov_eax,[eax]         # ?
    push_eax              # 1
    mov_eax, %1
    pop_ebx               # +
    add_eax,ebx
    pop_ebx               # =
    mov_[ebx],eax
    push_eax              # 1
    mov_eax, %1
    pop_ebx               # -
    sub_ebx,eax
    mov_eax,ebx
    pop_ebx               # +
    add_eax,ebx
    push_eax              # cur_char (global)
    mov_eax, &g_cur_char
    mov_al,[eax]          # ?1
    movzx_eax,al
    movsx_eax,al          # char
    pop_ebx               # =1
    mov_[ebx],al
    pop_eax               # ;
# stack_c.c 297
    push_eax              # token (global)
    mov_eax, &g_token
    push_eax              # token_len (global)
    mov_eax, &g_token_len
    mov_eax,[eax]         # ?
    pop_ebx               # +
    add_eax,ebx
    push_eax              # 0
    mov_eax, %0
    pop_ebx               # =1
    mov_[ebx],al
    pop_eax               # ;
# stack_c.c 298
    push_eax              # read_char (function)
    mov_eax, &f_read_char
    add_ebp, %8         # ()
    call_eax
    sub_ebp, %8
    pop_eax               # ;
# stack_c.c 299
    push_eax              # 0
    mov_eax, %0
    mov_ebx,[ebp]         # return
    push_ebx
    ret
# stack_c.c 301
:_get_token_else55 # no else
    push_eax              # cur_char (global)
    mov_eax, &g_cur_char
    mov_al,[eax]          # ?1
    movzx_eax,al
    movsx_eax,al          # char
    push_eax              # 112
    mov_eax, %112
    pop_ebx               # ==
    cmp_eax_ebx
    sete_al
    movzx_eax,al
    test_eax,eax          # if
    pop_eax
    je %_get_token_else56
# stack_c.c 302
# stack_c.c 303
    push_eax              # sym (global)
    mov_eax, &g_sym
    push_eax              # 97
    mov_eax, %97
    push_eax              # 22
    mov_eax, %22
    pop_ebx               # +
    add_eax,ebx
    pop_ebx               # =1
    mov_[ebx],al
    pop_eax               # ;
# stack_c.c 304
    push_eax              # token (global)
    mov_eax, &g_token
    push_eax              # token_len (global)
    mov_eax, &g_token_len
    push_eax              # $ (dup)
    mov_eax,[eax]         # ?
    push_eax              # 1
    mov_eax, %1
    pop_ebx               # +
    add_eax,ebx
    pop_ebx               # =
    mov_[ebx],eax
    push_eax              # 1
    mov_eax, %1
    pop_ebx               # -
    sub_ebx,eax
    mov_eax,ebx
    pop_ebx               # +
    add_eax,ebx
    push_eax              # cur_char (global)
    mov_eax, &g_cur_char
    mov_al,[eax]          # ?1
    movzx_eax,al
    movsx_eax,al          # char
    pop_ebx               # =1
    mov_[ebx],al
    pop_eax               # ;
# stack_c.c 305
    push_eax              # token (global)
    mov_eax, &g_token
    push_eax              # token_len (global)
    mov_eax, &g_token_len
    mov_eax,[eax]         # ?
    pop_ebx               # +
    add_eax,ebx
    push_eax              # 0
    mov_eax, %0
    pop_ebx               # =1
    mov_[ebx],al
    pop_eax               # ;
# stack_c.c 306
    push_eax              # read_char (function)
    mov_eax, &f_read_char
    add_ebp, %8         # ()
    call_eax
    sub_ebp, %8
    pop_eax               # ;
# stack_c.c 307
    push_eax              # 0
    mov_eax, %0
    mov_ebx,[ebp]         # return
    push_ebx
    ret
# stack_c.c 309
:_get_token_else56 # no else
    push_eax              # cur_char (global)
    mov_eax, &g_cur_char
    mov_al,[eax]          # ?1
    movzx_eax,al
    movsx_eax,al          # char
    push_eax              # 32
    mov_eax, %32
    pop_ebx               # <=s
    cmp_eax_ebx
    setle_al
    movzx_eax,al
    test_eax,eax          # if
    pop_eax
    je %_get_token_else57
# stack_c.c 310
# stack_c.c 311
    push_eax              # sym (global)
    mov_eax, &g_sym
    push_eax              # 45
    mov_eax, %45
    pop_ebx               # =1
    mov_[ebx],al
    pop_eax               # ;
# stack_c.c 312
    push_eax              # token (global)
    mov_eax, &g_token
    push_eax              # token_len (global)
    mov_eax, &g_token_len
    mov_eax,[eax]         # ?
    pop_ebx               # +
    add_eax,ebx
    push_eax              # 0
    mov_eax, %0
    pop_ebx               # =1
    mov_[ebx],al
    pop_eax               # ;
# stack_c.c 313
    push_eax              # 0
    mov_eax, %0
    mov_ebx,[ebp]         # return
    push_ebx
    ret
:_get_token_else57 # no else
# stack_c.c 317
:_get_token_else54 # no else
    push_eax              # 48
    mov_eax, %48
    push_eax              # cur_char (global)
    mov_eax, &g_cur_char
    mov_al,[eax]          # ?1
    movzx_eax,al
    movsx_eax,al          # char
    pop_ebx               # <=s
    cmp_eax_ebx
    setle_al
    movzx_eax,al
    test_eax,eax          # &&
    je %_get_token_and_end58
    pop_eax
    push_eax              # cur_char (global)
    mov_eax, &g_cur_char
    mov_al,[eax]          # ?1
    movzx_eax,al
    movsx_eax,al          # char
    push_eax              # 57
    mov_eax, %57
    pop_ebx               # <=s
    cmp_eax_ebx
    setle_al
    movzx_eax,al
:_get_token_and_end58
    test_eax,eax          # if
    pop_eax
    je %_get_token_else59
# stack_c.c 318
# stack_c.c 319
    push_eax              # sym (global)
    mov_eax, &g_sym
    push_eax              # 48
    mov_eax, %48
    pop_ebx               # =1
    mov_[ebx],al
    pop_eax               # ;
# stack_c.c 320
    push_eax              # int_value (global)
    mov_eax, &g_int_value
    push_eax              # 0
    mov_eax, %0
    pop_ebx               # =
    mov_[ebx],eax
    pop_eax               # ;
# stack_c.c 321
    push_eax              # cur_char (global)
    mov_eax, &g_cur_char
    mov_al,[eax]          # ?1
    movzx_eax,al
    movsx_eax,al          # char
    push_eax              # 48
    mov_eax, %48
    pop_ebx               # ==
    cmp_eax_ebx
    sete_al
    movzx_eax,al
    test_eax,eax          # if
    pop_eax
    je %_get_token_else60
# stack_c.c 322
# stack_c.c 323
    push_eax              # read_char (function)
    mov_eax, &f_read_char
    add_ebp, %8         # ()
    call_eax
    sub_ebp, %8
    pop_eax               # ;
# stack_c.c 324
    push_eax              # cur_char (global)
    mov_eax, &g_cur_char
    mov_al,[eax]          # ?1
    movzx_eax,al
    movsx_eax,al          # char
    push_eax              # 120
    mov_eax, %120
    pop_ebx               # ==
    cmp_eax_ebx
    sete_al
    movzx_eax,al
    test_eax,eax          # if
    pop_eax
    je %_get_token_else61
# stack_c.c 325
# stack_c.c 326
    push_eax              # read_char (function)
    mov_eax, &f_read_char
    add_ebp, %8         # ()
    call_eax
    sub_ebp, %8
    pop_eax               # ;
# stack_c.c 328
:_get_token_loop62
    push_eax              # 1
    mov_eax, %1
    test_eax,eax          # !
    sete_al
    movzx_eax,al
    test_eax,eax          # if
    pop_eax
    je %_get_token_else63
    jmp %_get_token_loop_end62
# stack_c.c 329
# stack_c.c 330
:_get_token_else63 # no else
    push_eax              # 48
    mov_eax, %48
    push_eax              # cur_char (global)
    mov_eax, &g_cur_char
    mov_al,[eax]          # ?1
    movzx_eax,al
    movsx_eax,al          # char
    pop_ebx               # <=s
    cmp_eax_ebx
    setle_al
    movzx_eax,al
    test_eax,eax          # &&
    je %_get_token_and_end64
    pop_eax
    push_eax              # cur_char (global)
    mov_eax, &g_cur_char
    mov_al,[eax]          # ?1
    movzx_eax,al
    movsx_eax,al          # char
    push_eax              # 57
    mov_eax, %57
    pop_ebx               # <=s
    cmp_eax_ebx
    setle_al
    movzx_eax,al
:_get_token_and_end64
    test_eax,eax          # if
    pop_eax
    je %_get_token_else65
# stack_c.c 331
    push_eax              # int_value (global)
    mov_eax, &g_int_value
    push_eax              # 16
    mov_eax, %16
    push_eax              # int_value (global)
    mov_eax, &g_int_value
    mov_eax,[eax]         # ?
    pop_ebx               # *
    mul_ebx
    push_eax              # cur_char (global)
    mov_eax, &g_cur_char
    mov_al,[eax]          # ?1
    movzx_eax,al
    movsx_eax,al          # char
    pop_ebx               # +
    add_eax,ebx
    push_eax              # 48
    mov_eax, %48
    pop_ebx               # -
    sub_ebx,eax
    mov_eax,ebx
    pop_ebx               # =
    mov_[ebx],eax
    pop_eax               # ;
    jmp %_get_token_else_end65
:_get_token_else65
# stack_c.c 332
    push_eax              # 97
    mov_eax, %97
    push_eax              # cur_char (global)
    mov_eax, &g_cur_char
    mov_al,[eax]          # ?1
    movzx_eax,al
    movsx_eax,al          # char
    pop_ebx               # <=s
    cmp_eax_ebx
    setle_al
    movzx_eax,al
    test_eax,eax          # &&
    je %_get_token_and_end66
    pop_eax
    push_eax              # cur_char (global)
    mov_eax, &g_cur_char
    mov_al,[eax]          # ?1
    movzx_eax,al
    movsx_eax,al          # char
    push_eax              # 102
    mov_eax, %102
    pop_ebx               # <=s
    cmp_eax_ebx
    setle_al
    movzx_eax,al
:_get_token_and_end66
    test_eax,eax          # if
    pop_eax
    je %_get_token_else67
# stack_c.c 333
    push_eax              # int_value (global)
    mov_eax, &g_int_value
    push_eax              # 16
    mov_eax, %16
    push_eax              # int_value (global)
    mov_eax, &g_int_value
    mov_eax,[eax]         # ?
    pop_ebx               # *
    mul_ebx
    push_eax              # cur_char (global)
    mov_eax, &g_cur_char
    mov_al,[eax]          # ?1
    movzx_eax,al
    movsx_eax,al          # char
    pop_ebx               # +
    add_eax,ebx
    push_eax              # 97
    mov_eax, %97
    pop_ebx               # -
    sub_ebx,eax
    mov_eax,ebx
    push_eax              # 10
    mov_eax, %10
    pop_ebx               # +
    add_eax,ebx
    pop_ebx               # =
    mov_[ebx],eax
    pop_eax               # ;
    jmp %_get_token_else_end67
:_get_token_else67
# stack_c.c 334
    push_eax              # 65
    mov_eax, %65
    push_eax              # cur_char (global)
    mov_eax, &g_cur_char
    mov_al,[eax]          # ?1
    movzx_eax,al
    movsx_eax,al          # char
    pop_ebx               # <=s
    cmp_eax_ebx
    setle_al
    movzx_eax,al
    test_eax,eax          # &&
    je %_get_token_and_end68
    pop_eax
    push_eax              # cur_char (global)
    mov_eax, &g_cur_char
    mov_al,[eax]          # ?1
    movzx_eax,al
    movsx_eax,al          # char
    push_eax              # 70
    mov_eax, %70
    pop_ebx               # <=s
    cmp_eax_ebx
    setle_al
    movzx_eax,al
:_get_token_and_end68
    test_eax,eax          # if
    pop_eax
    je %_get_token_else69
# stack_c.c 335
    push_eax              # int_value (global)
    mov_eax, &g_int_value
    push_eax              # 16
    mov_eax, %16
    push_eax              # int_value (global)
    mov_eax, &g_int_value
    mov_eax,[eax]         # ?
    pop_ebx               # *
    mul_ebx
    push_eax              # cur_char (global)
    mov_eax, &g_cur_char
    mov_al,[eax]          # ?1
    movzx_eax,al
    movsx_eax,al          # char
    pop_ebx               # +
    add_eax,ebx
    push_eax              # 65
    mov_eax, %65
    pop_ebx               # -
    sub_ebx,eax
    mov_eax,ebx
    push_eax              # 10
    mov_eax, %10
    pop_ebx               # +
    add_eax,ebx
    pop_ebx               # =
    mov_[ebx],eax
    pop_eax               # ;
    jmp %_get_token_else_end69
:_get_token_else69
# stack_c.c 337
    jmp %_get_token_loop_end62
:_get_token_else_end69
:_get_token_else_end67
:_get_token_else_end65
# stack_c.c 338
    push_eax              # read_char (function)
    mov_eax, &f_read_char
    add_ebp, %8         # ()
    call_eax
    sub_ebp, %8
    pop_eax               # ;
    jmp %_get_token_loop62
:_get_token_loop_end62
    jmp %_get_token_else_end61
:_get_token_else61
# stack_c.c 342
# stack_c.c 344
:_get_token_loop70
    push_eax              # 48
    mov_eax, %48
    push_eax              # cur_char (global)
    mov_eax, &g_cur_char
    mov_al,[eax]          # ?1
    movzx_eax,al
    movsx_eax,al          # char
    pop_ebx               # <=s
    cmp_eax_ebx
    setle_al
    movzx_eax,al
    test_eax,eax          # &&
    je %_get_token_and_end71
    pop_eax
    push_eax              # cur_char (global)
    mov_eax, &g_cur_char
    mov_al,[eax]          # ?1
    movzx_eax,al
    movsx_eax,al          # char
    push_eax              # 55
    mov_eax, %55
    pop_ebx               # <=s
    cmp_eax_ebx
    setle_al
    movzx_eax,al
:_get_token_and_end71
    test_eax,eax          # !
    sete_al
    movzx_eax,al
    test_eax,eax          # if
    pop_eax
    je %_get_token_else72
    jmp %_get_token_loop_end70
# stack_c.c 345
# stack_c.c 346
:_get_token_else72 # no else
    push_eax              # int_value (global)
    mov_eax, &g_int_value
    push_eax              # 8
    mov_eax, %8
    push_eax              # int_value (global)
    mov_eax, &g_int_value
    mov_eax,[eax]         # ?
    pop_ebx               # *
    mul_ebx
    push_eax              # cur_char (global)
    mov_eax, &g_cur_char
    mov_al,[eax]          # ?1
    movzx_eax,al
    movsx_eax,al          # char
    pop_ebx               # +
    add_eax,ebx
    push_eax              # 48
    mov_eax, %48
    pop_ebx               # -
    sub_ebx,eax
    mov_eax,ebx
    pop_ebx               # =
    mov_[ebx],eax
    pop_eax               # ;
# stack_c.c 347
    push_eax              # read_char (function)
    mov_eax, &f_read_char
    add_ebp, %8         # ()
    call_eax
    sub_ebp, %8
    pop_eax               # ;
    jmp %_get_token_loop70
:_get_token_loop_end70
:_get_token_else_end61
    jmp %_get_token_else_end60
:_get_token_else60
# stack_c.c 352
# stack_c.c 354
:_get_token_loop73
    push_eax              # 48
    mov_eax, %48
    push_eax              # cur_char (global)
    mov_eax, &g_cur_char
    mov_al,[eax]          # ?1
    movzx_eax,al
    movsx_eax,al          # char
    pop_ebx               # <=s
    cmp_eax_ebx
    setle_al
    movzx_eax,al
    test_eax,eax          # &&
    je %_get_token_and_end74
    pop_eax
    push_eax              # cur_char (global)
    mov_eax, &g_cur_char
    mov_al,[eax]          # ?1
    movzx_eax,al
    movsx_eax,al          # char
    push_eax              # 57
    mov_eax, %57
    pop_ebx               # <=s
    cmp_eax_ebx
    setle_al
    movzx_eax,al
:_get_token_and_end74
    test_eax,eax          # !
    sete_al
    movzx_eax,al
    test_eax,eax          # if
    pop_eax
    je %_get_token_else75
    jmp %_get_token_loop_end73
# stack_c.c 355
# stack_c.c 356
:_get_token_else75 # no else
    push_eax              # int_value (global)
    mov_eax, &g_int_value
    push_eax              # 10
    mov_eax, %10
    push_eax              # int_value (global)
    mov_eax, &g_int_value
    mov_eax,[eax]         # ?
    pop_ebx               # *
    mul_ebx
    push_eax              # cur_char (global)
    mov_eax, &g_cur_char
    mov_al,[eax]          # ?1
    movzx_eax,al
    movsx_eax,al          # char
    pop_ebx               # +
    add_eax,ebx
    push_eax              # 48
    mov_eax, %48
    pop_ebx               # -
    sub_ebx,eax
    mov_eax,ebx
    pop_ebx               # =
    mov_[ebx],eax
    pop_eax               # ;
# stack_c.c 357
    push_eax              # read_char (function)
    mov_eax, &f_read_char
    add_ebp, %8         # ()
    call_eax
    sub_ebp, %8
    pop_eax               # ;
    jmp %_get_token_loop73
:_get_token_loop_end73
:_get_token_else_end60
# stack_c.c 360
    push_eax              # int_value (global)
    mov_eax, &g_int_value
    push_eax              # sign (local)
    lea_eax,[ebp+DWORD] %4
    mov_eax,[eax]         # ?
    push_eax              # int_value (global)
    mov_eax, &g_int_value
    mov_eax,[eax]         # ?
    pop_ebx               # *
    mul_ebx
    pop_ebx               # =
    mov_[ebx],eax
    pop_eax               # ;
# stack_c.c 361
    push_eax              # token (global)
    mov_eax, &g_token
    push_eax              # '%d'
    mov_eax, &string_15
    push_eax              # __var_args (local)
    lea_eax,[ebp+DWORD] %8
    push_eax              # int_value (global)
    mov_eax, &g_int_value
    mov_eax,[eax]         # ?
    pop_ebx               # =
    mov_[ebx],eax
    pop_eax               # ;
    push_eax              # __var_args (local)
    lea_eax,[ebp+DWORD] %8
    push_eax              # sprintf (function)
    mov_eax, &f_sprintf
    add_ebp, %12         # ()
    call_eax
    sub_ebp, %12
    pop_eax               # ;
# stack_c.c 362
    push_eax              # 0
    mov_eax, %0
    mov_ebx,[ebp]         # return
    push_ebx
    ret
:_get_token_else59 # no else
# stack_c.c 367
:_get_token_else53 # no else
    push_eax              # cur_char (global)
    mov_eax, &g_cur_char
    mov_al,[eax]          # ?1
    movzx_eax,al
    movsx_eax,al          # char
    push_eax              # 58
    mov_eax, %58
    pop_ebx               # ==
    cmp_eax_ebx
    sete_al
    movzx_eax,al
    test_eax,eax          # if
    pop_eax
    je %_get_token_else76
# stack_c.c 368
# stack_c.c 369
    push_eax              # sym (global)
    mov_eax, &g_sym
    push_eax              # 58
    mov_eax, %58
    pop_ebx               # =1
    mov_[ebx],al
    pop_eax               # ;
# stack_c.c 370
    push_eax              # token (global)
    mov_eax, &g_token
    push_eax              # 1
    mov_eax, %1
    pop_ebx               # +
    add_eax,ebx
    push_eax              # 0
    mov_eax, %0
    pop_ebx               # =1
    mov_[ebx],al
    pop_eax               # ;
# stack_c.c 371
    push_eax              # read_char (function)
    mov_eax, &f_read_char
    add_ebp, %4         # ()
    call_eax
    sub_ebp, %4
    pop_eax               # ;
# stack_c.c 372
    push_eax              # 0
    mov_eax, %0
    mov_ebx,[ebp]         # return
    push_ebx
    ret
# stack_c.c 376
:_get_token_else76 # no else
    push_eax              # sym (global)
    mov_eax, &g_sym
    push_eax              # 32
    mov_eax, %32
    pop_ebx               # =1
    mov_[ebx],al
    pop_eax               # ;
# stack_c.c 377
:_get_token_loop77
# stack_c.c 378
# stack_c.c 379
    push_eax              # token (global)
    mov_eax, &g_token
    push_eax              # token_len (global)
    mov_eax, &g_token_len
    push_eax              # $ (dup)
    mov_eax,[eax]         # ?
    push_eax              # 1
    mov_eax, %1
    pop_ebx               # +
    add_eax,ebx
    pop_ebx               # =
    mov_[ebx],eax
    push_eax              # 1
    mov_eax, %1
    pop_ebx               # -
    sub_ebx,eax
    mov_eax,ebx
    pop_ebx               # +
    add_eax,ebx
    push_eax              # cur_char (global)
    mov_eax, &g_cur_char
    mov_al,[eax]          # ?1
    movzx_eax,al
    movsx_eax,al          # char
    pop_ebx               # =1
    mov_[ebx],al
    pop_eax               # ;
# stack_c.c 380
    push_eax              # read_char (function)
    mov_eax, &f_read_char
    add_ebp, %4         # ()
    call_eax
    sub_ebp, %4
    pop_eax               # ;
    push_eax              # cur_char (global)
    mov_eax, &g_cur_char
    mov_al,[eax]          # ?1
    movzx_eax,al
    movsx_eax,al          # char
    push_eax              # 32
    mov_eax, %32
    pop_ebx               # >s
    cmp_eax_ebx
    setg_al
    movzx_eax,al
    test_eax,eax          # !
    sete_al
    movzx_eax,al
    test_eax,eax          # if
    pop_eax
    je %_get_token_else78
    jmp %_get_token_loop_end77
:_get_token_else78 # no else
    jmp %_get_token_loop77
:_get_token_loop_end77
# stack_c.c 384
    push_eax              # token (global)
    mov_eax, &g_token
    push_eax              # token_len (global)
    mov_eax, &g_token_len
    mov_eax,[eax]         # ?
    pop_ebx               # +
    add_eax,ebx
    push_eax              # 0
    mov_eax, %0
    pop_ebx               # =1
    mov_[ebx],al
    pop_eax               # ;
# stack_c.c 385
    push_eax              # token_len (global)
    mov_eax, &g_token_len
    mov_eax,[eax]         # ?
    push_eax              # 1
    mov_eax, %1
    pop_ebx               # ==
    cmp_eax_ebx
    sete_al
    movzx_eax,al
    test_eax,eax          # if
    pop_eax
    je %_get_token_else79
# stack_c.c 386
    push_eax              # sym (global)
    mov_eax, &g_sym
    push_eax              # token (global)
    mov_eax, &g_token
    push_eax              # 0
    mov_eax, %0
    pop_ebx               # +
    add_eax,ebx
    mov_al,[eax]          # ?1
    movzx_eax,al
    movsx_eax,al          # char
    pop_ebx               # =1
    mov_[ebx],al
    pop_eax               # ;
    jmp %_get_token_else_end79
:_get_token_else79
# stack_c.c 388
    push_eax              # i (local)
    lea_eax,[ebp+DWORD] %4
    push_eax              # 0
    mov_eax, %0
    pop_ebx               # =
    mov_[ebx],eax
    pop_eax               # ;
:_get_token_loop80
    push_eax              # i (local)
    lea_eax,[ebp+DWORD] %4
    mov_eax,[eax]         # ?
    push_eax              # 23
    mov_eax, %23
    pop_ebx               # <s
    cmp_eax_ebx
    setl_al
    movzx_eax,al
    test_eax,eax          # !
    sete_al
    movzx_eax,al
    test_eax,eax          # if
    pop_eax
    je %_get_token_else81
    jmp %_get_token_loop_end80
# stack_c.c 389
:_get_token_else81 # no else
    push_eax              # token (global)
    mov_eax, &g_token
    push_eax              # symbols (global)
    mov_eax, &g_symbols
    push_eax              # i (local)
    lea_eax,[ebp+DWORD] %4
    mov_eax,[eax]         # ?
    push_eax              # 8
    mov_eax, %8
    pop_ebx               # *
    mul_ebx
    pop_ebx               # +
    add_eax,ebx
    push_eax              # 0 (const s6_m_name)
    mov_eax, %0
    pop_ebx               # +
    add_eax,ebx
    mov_eax,[eax]         # ?
    push_eax              # strcmp (function)
    mov_eax, &f_strcmp
    add_ebp, %8         # ()
    call_eax
    sub_ebp, %8
    push_eax              # 0
    mov_eax, %0
    pop_ebx               # ==
    cmp_eax_ebx
    sete_al
    movzx_eax,al
    test_eax,eax          # if
    pop_eax
    je %_get_token_else82
# stack_c.c 390
# stack_c.c 391
    push_eax              # sym (global)
    mov_eax, &g_sym
    push_eax              # symbols (global)
    mov_eax, &g_symbols
    push_eax              # i (local)
    lea_eax,[ebp+DWORD] %4
    mov_eax,[eax]         # ?
    push_eax              # 8
    mov_eax, %8
    pop_ebx               # *
    mul_ebx
    pop_ebx               # +
    add_eax,ebx
    push_eax              # 4 (const s6_m_sym)
    mov_eax, %4
    pop_ebx               # +
    add_eax,ebx
    mov_al,[eax]          # ?1
    movzx_eax,al
    movsx_eax,al          # char
    pop_ebx               # =1
    mov_[ebx],al
    pop_eax               # ;
# stack_c.c 392
    push_eax              # 0
    mov_eax, %0
    mov_ebx,[ebp]         # return
    push_ebx
    ret
:_get_token_else82 # no else
    push_eax              # i (local)
    lea_eax,[ebp+DWORD] %4
    push_eax              # $ (dup)
    mov_eax,[eax]         # ?
    push_eax              # 1
    mov_eax, %1
    pop_ebx               # +
    add_eax,ebx
    pop_ebx               # =
    mov_[ebx],eax
    push_eax              # 1
    mov_eax, %1
    pop_ebx               # -
    sub_ebx,eax
    mov_eax,ebx
    pop_eax               # ;
    jmp %_get_token_loop80
:_get_token_loop_end80
:_get_token_else_end79
    push_eax              # 0
    mov_eax, %0
    mov_ebx,[ebp]         # return
    push_ebx
    ret

:f_save_print_string
    pop_eax
    mov_[ebp],eax
    pop_eax
    push_eax              # s (local)
    lea_eax,[ebp+DWORD] %4
    pop_ebx               # =:
    mov_[eax],ebx
    pop_eax
    push_eax              # fout (local)
    lea_eax,[ebp+DWORD] %8
    pop_ebx               # =:
    mov_[eax],ebx
    pop_eax
# stack_c.c 434
:_save_print_string_loop1
    push_eax              # s (local)
    lea_eax,[ebp+DWORD] %4
    mov_eax,[eax]         # ?
    mov_al,[eax]          # ?1
    movzx_eax,al
    movsx_eax,al          # char
    push_eax              # 0
    mov_eax, %0
    pop_ebx               # !=
    cmp_eax_ebx
    setne_al
    movzx_eax,al
    test_eax,eax          # !
    sete_al
    movzx_eax,al
    test_eax,eax          # if
    pop_eax
    je %_save_print_string_else2
    jmp %_save_print_string_loop_end1
# stack_c.c 435
:_save_print_string_else2 # no else
    push_eax              # s (local)
    lea_eax,[ebp+DWORD] %4
    mov_eax,[eax]         # ?
    mov_al,[eax]          # ?1
    movzx_eax,al
    movsx_eax,al          # char
    push_eax              # 10
    mov_eax, %10
    pop_ebx               # ==
    cmp_eax_ebx
    sete_al
    movzx_eax,al
    test_eax,eax          # if
    pop_eax
    je %_save_print_string_else3
# stack_c.c 436
    push_eax              # fout (local)
    lea_eax,[ebp+DWORD] %8
    mov_eax,[eax]         # ?
    push_eax              # '\\n'
    mov_eax, &string_16
    push_eax              # 0
    mov_eax, %0
    push_eax              # fprintf (function)
    mov_eax, &f_fprintf
    add_ebp, %12         # ()
    call_eax
    sub_ebp, %12
    pop_eax               # ;
    jmp %_save_print_string_else_end3
:_save_print_string_else3
# stack_c.c 437
    push_eax              # s (local)
    lea_eax,[ebp+DWORD] %4
    mov_eax,[eax]         # ?
    mov_al,[eax]          # ?1
    movzx_eax,al
    movsx_eax,al          # char
    push_eax              # 9
    mov_eax, %9
    pop_ebx               # ==
    cmp_eax_ebx
    sete_al
    movzx_eax,al
    test_eax,eax          # if
    pop_eax
    je %_save_print_string_else4
# stack_c.c 438
    push_eax              # fout (local)
    lea_eax,[ebp+DWORD] %8
    mov_eax,[eax]         # ?
    push_eax              # '\\t'
    mov_eax, &string_17
    push_eax              # 0
    mov_eax, %0
    push_eax              # fprintf (function)
    mov_eax, &f_fprintf
    add_ebp, %12         # ()
    call_eax
    sub_ebp, %12
    pop_eax               # ;
    jmp %_save_print_string_else_end4
:_save_print_string_else4
# stack_c.c 439
    push_eax              # s (local)
    lea_eax,[ebp+DWORD] %4
    mov_eax,[eax]         # ?
    mov_al,[eax]          # ?1
    movzx_eax,al
    movsx_eax,al          # char
    push_eax              # 92
    mov_eax, %92
    pop_ebx               # ==
    cmp_eax_ebx
    sete_al
    movzx_eax,al
    test_eax,eax          # ||
    jne %_save_print_string_or_end5
    pop_eax
    push_eax              # s (local)
    lea_eax,[ebp+DWORD] %4
    mov_eax,[eax]         # ?
    mov_al,[eax]          # ?1
    movzx_eax,al
    movsx_eax,al          # char
    push_eax              # 34
    mov_eax, %34
    pop_ebx               # ==
    cmp_eax_ebx
    sete_al
    movzx_eax,al
:_save_print_string_or_end5
    test_eax,eax          # if
    pop_eax
    je %_save_print_string_else6
# stack_c.c 440
    push_eax              # fout (local)
    lea_eax,[ebp+DWORD] %8
    mov_eax,[eax]         # ?
    push_eax              # '\\%c'
    mov_eax, &string_18
    push_eax              # __var_args (local)
    lea_eax,[ebp+DWORD] %12
    push_eax              # s (local)
    lea_eax,[ebp+DWORD] %4
    mov_eax,[eax]         # ?
    mov_al,[eax]          # ?1
    movzx_eax,al
    movsx_eax,al          # char
    pop_ebx               # =
    mov_[ebx],eax
    pop_eax               # ;
    push_eax              # __var_args (local)
    lea_eax,[ebp+DWORD] %12
    push_eax              # fprintf (function)
    mov_eax, &f_fprintf
    add_ebp, %16         # ()
    call_eax
    sub_ebp, %16
    pop_eax               # ;
    jmp %_save_print_string_else_end6
:_save_print_string_else6
# stack_c.c 441
    push_eax              # s (local)
    lea_eax,[ebp+DWORD] %4
    mov_eax,[eax]         # ?
    mov_al,[eax]          # ?1
    movzx_eax,al
    movsx_eax,al          # char
    push_eax              # 32
    mov_eax, %32
    pop_ebx               # <s
    cmp_eax_ebx
    setl_al
    movzx_eax,al
    test_eax,eax          # if
    pop_eax
    je %_save_print_string_else7
# stack_c.c 442
    push_eax              # fout (local)
    lea_eax,[ebp+DWORD] %8
    mov_eax,[eax]         # ?
    push_eax              # '?'
    mov_eax, &string_19
    push_eax              # 0
    mov_eax, %0
    push_eax              # fprintf (function)
    mov_eax, &f_fprintf
    add_ebp, %12         # ()
    call_eax
    sub_ebp, %12
    pop_eax               # ;
    jmp %_save_print_string_else_end7
:_save_print_string_else7
# stack_c.c 444
    push_eax              # fout (local)
    lea_eax,[ebp+DWORD] %8
    mov_eax,[eax]         # ?
    push_eax              # '%c'
    mov_eax, &string_20
    push_eax              # __var_args (local)
    lea_eax,[ebp+DWORD] %12
    push_eax              # s (local)
    lea_eax,[ebp+DWORD] %4
    mov_eax,[eax]         # ?
    mov_al,[eax]          # ?1
    movzx_eax,al
    movsx_eax,al          # char
    pop_ebx               # =
    mov_[ebx],eax
    pop_eax               # ;
    push_eax              # __var_args (local)
    lea_eax,[ebp+DWORD] %12
    push_eax              # fprintf (function)
    mov_eax, &f_fprintf
    add_ebp, %16         # ()
    call_eax
    sub_ebp, %16
    pop_eax               # ;
:_save_print_string_else_end7
:_save_print_string_else_end6
:_save_print_string_else_end4
:_save_print_string_else_end3
    push_eax              # s (local)
    lea_eax,[ebp+DWORD] %4
    push_eax              # $ (dup)
    mov_eax,[eax]         # ?
    push_eax              # 1
    mov_eax, %1
    pop_ebx               # +
    add_eax,ebx
    pop_ebx               # =
    mov_[ebx],eax
    push_eax              # 1
    mov_eax, %1
    pop_ebx               # -
    sub_ebx,eax
    mov_eax,ebx
    pop_eax               # ;
    jmp %_save_print_string_loop1
:_save_print_string_loop_end1
    push_eax              # 0
    mov_eax, %0
    mov_ebx,[ebp]         # return
    push_ebx
    ret

:f_nr_for_string
    pop_eax
    mov_[ebp],eax
    pop_eax
    push_eax              # length (local)
    lea_eax,[ebp+DWORD] %4
    pop_ebx               # =:
    mov_[eax],ebx
    pop_eax
    push_eax              # s (local)
    lea_eax,[ebp+DWORD] %8
    pop_ebx               # =:
    mov_[eax],ebx
    pop_eax
    push_eax              # nr (local)
    lea_eax,[ebp+DWORD] %12
    push_eax              # 0
    mov_eax, %0
    pop_ebx               # =
    mov_[ebx],eax
    pop_eax               # ;
    push_eax              # ref_string (local)
    lea_eax,[ebp+DWORD] %16
    push_eax              # strings (global)
    mov_eax, &g_strings
    pop_ebx               # =
    mov_[ebx],eax
    pop_eax               # ;
# stack_c.c 452
:_nr_for_string_loop1
    push_eax              # ref_string (local)
    lea_eax,[ebp+DWORD] %16
    mov_eax,[eax]         # ?
    mov_eax,[eax]         # ?
    push_eax              # 0
    mov_eax, %0
    pop_ebx               # !=
    cmp_eax_ebx
    setne_al
    movzx_eax,al
    test_eax,eax          # !
    sete_al
    movzx_eax,al
    test_eax,eax          # if
    pop_eax
    je %_nr_for_string_else2
    jmp %_nr_for_string_loop_end1
# stack_c.c 453
:_nr_for_string_else2 # no else
    push_eax              # ref_string (local)
    lea_eax,[ebp+DWORD] %16
    mov_eax,[eax]         # ?
    mov_eax,[eax]         # ->
    add_eax, %4
    mov_eax,[eax]         # ?
    push_eax              # length (local)
    lea_eax,[ebp+DWORD] %4
    mov_eax,[eax]         # ?
    pop_ebx               # ==
    cmp_eax_ebx
    sete_al
    movzx_eax,al
    test_eax,eax          # &&
    je %_nr_for_string_and_end3
    pop_eax
    push_eax              # ref_string (local)
    lea_eax,[ebp+DWORD] %16
    mov_eax,[eax]         # ?
    mov_eax,[eax]         # ->
    add_eax, %0
    mov_eax,[eax]         # ?
    push_eax              # s (local)
    lea_eax,[ebp+DWORD] %8
    mov_eax,[eax]         # ?
    push_eax              # length (local)
    lea_eax,[ebp+DWORD] %4
    mov_eax,[eax]         # ?
    push_eax              # memcmp (function)
    mov_eax, &f_memcmp
    add_ebp, %20         # ()
    call_eax
    sub_ebp, %20
    push_eax              # 0
    mov_eax, %0
    pop_ebx               # ==
    cmp_eax_ebx
    sete_al
    movzx_eax,al
:_nr_for_string_and_end3
    test_eax,eax          # if
    pop_eax
    je %_nr_for_string_else4
# stack_c.c 454
    push_eax              # nr (local)
    lea_eax,[ebp+DWORD] %12
    mov_eax,[eax]         # ?
    mov_ebx,[ebp]         # return
    push_ebx
    ret
:_nr_for_string_else4 # no else
    push_eax              # ref_string (local)
    lea_eax,[ebp+DWORD] %16
    push_eax              # ref_string (local)
    lea_eax,[ebp+DWORD] %16
    mov_eax,[eax]         # ?
    mov_eax,[eax]         # ->
    add_eax, %8
    pop_ebx               # =
    mov_[ebx],eax
    pop_eax               # ;
    push_eax              # nr (local)
    lea_eax,[ebp+DWORD] %12
    push_eax              # $ (dup)
    mov_eax,[eax]         # ?
    push_eax              # 1
    mov_eax, %1
    pop_ebx               # +
    add_eax,ebx
    pop_ebx               # =
    mov_[ebx],eax
    push_eax              # 1
    mov_eax, %1
    pop_ebx               # -
    sub_ebx,eax
    mov_eax,ebx
    pop_eax               # ;
    jmp %_nr_for_string_loop1
:_nr_for_string_loop_end1
# stack_c.c 455
    push_eax              # ref_string (local)
    lea_eax,[ebp+DWORD] %16
    mov_eax,[eax]         # ?
    push_eax              # 12
    mov_eax, %12
    push_eax              # malloc (function)
    mov_eax, &f_malloc
    add_ebp, %20         # ()
    call_eax
    sub_ebp, %20
    pop_ebx               # =
    mov_[ebx],eax
    pop_eax               # ;
# stack_c.c 456
    push_eax              # ref_string (local)
    lea_eax,[ebp+DWORD] %16
    mov_eax,[eax]         # ?
    mov_eax,[eax]         # ->
    add_eax, %0
    push_eax              # length (local)
    lea_eax,[ebp+DWORD] %4
    mov_eax,[eax]         # ?
    push_eax              # 1
    mov_eax, %1
    pop_ebx               # +
    add_eax,ebx
    push_eax              # malloc (function)
    mov_eax, &f_malloc
    add_ebp, %20         # ()
    call_eax
    sub_ebp, %20
    pop_ebx               # =
    mov_[ebx],eax
    pop_eax               # ;
# stack_c.c 457
    push_eax              # ref_string (local)
    lea_eax,[ebp+DWORD] %16
    mov_eax,[eax]         # ?
    mov_eax,[eax]         # ->
    add_eax, %0
    mov_eax,[eax]         # ?
    push_eax              # s (local)
    lea_eax,[ebp+DWORD] %8
    mov_eax,[eax]         # ?
    push_eax              # length (local)
    lea_eax,[ebp+DWORD] %4
    mov_eax,[eax]         # ?
    push_eax              # 1
    mov_eax, %1
    pop_ebx               # +
    add_eax,ebx
    push_eax              # memcpy (function)
    mov_eax, &f_memcpy
    add_ebp, %20         # ()
    call_eax
    sub_ebp, %20
    pop_eax               # ;
# stack_c.c 458
    push_eax              # ref_string (local)
    lea_eax,[ebp+DWORD] %16
    mov_eax,[eax]         # ?
    mov_eax,[eax]         # ->
    add_eax, %4
    push_eax              # length (local)
    lea_eax,[ebp+DWORD] %4
    mov_eax,[eax]         # ?
    pop_ebx               # =
    mov_[ebx],eax
    pop_eax               # ;
# stack_c.c 459
    push_eax              # ref_string (local)
    lea_eax,[ebp+DWORD] %16
    mov_eax,[eax]         # ?
    mov_eax,[eax]         # ->
    add_eax, %8
    push_eax              # 0
    mov_eax, %0
    pop_ebx               # =
    mov_[ebx],eax
    pop_eax               # ;
# stack_c.c 460
    push_eax              # nr (local)
    lea_eax,[ebp+DWORD] %12
    mov_eax,[eax]         # ?
    mov_ebx,[ebp]         # return
    push_ebx
    ret
    push_eax              # 0
    mov_eax, %0
    mov_ebx,[ebp]         # return
    push_ebx
    ret

:f_add_function
    pop_eax
    mov_[ebp],eax
    pop_eax
    push_eax              # name (local)
    lea_eax,[ebp+DWORD] %4
    pop_ebx               # =:
    mov_[eax],ebx
    pop_eax
# stack_c.c 472
    push_eax              # idents (global)
    mov_eax, &g_idents
    push_eax              # nr_idents (global)
    mov_eax, &g_nr_idents
    mov_eax,[eax]         # ?
    push_eax              # 68
    mov_eax, %68
    pop_ebx               # *
    mul_ebx
    pop_ebx               # +
    add_eax,ebx
    push_eax              # 0 (const s7_m_type)
    mov_eax, %0
    pop_ebx               # +
    add_eax,ebx
    push_eax              # 70
    mov_eax, %70
    pop_ebx               # =1
    mov_[ebx],al
    pop_eax               # ;
# stack_c.c 473
    push_eax              # idents (global)
    mov_eax, &g_idents
    push_eax              # nr_idents (global)
    mov_eax, &g_nr_idents
    mov_eax,[eax]         # ?
    push_eax              # 68
    mov_eax, %68
    pop_ebx               # *
    mul_ebx
    pop_ebx               # +
    add_eax,ebx
    push_eax              # 4 (const s7_m_name)
    mov_eax, %4
    pop_ebx               # +
    add_eax,ebx
    push_eax              # name (local)
    lea_eax,[ebp+DWORD] %4
    mov_eax,[eax]         # ?
    push_eax              # strcpy (function)
    mov_eax, &f_strcpy
    add_ebp, %8         # ()
    call_eax
    sub_ebp, %8
    pop_eax               # ;
# stack_c.c 474
    push_eax              # nr_idents (global)
    mov_eax, &g_nr_idents
    push_eax              # $ (dup)
    mov_eax,[eax]         # ?
    push_eax              # 1
    mov_eax, %1
    pop_ebx               # +
    add_eax,ebx
    pop_ebx               # =
    mov_[ebx],eax
    push_eax              # 1
    mov_eax, %1
    pop_ebx               # -
    sub_ebx,eax
    mov_eax,ebx
    pop_eax               # ;
    push_eax              # 0
    mov_eax, %0
    mov_ebx,[ebp]         # return
    push_ebx
    ret

:f_main
    pop_eax
    mov_[ebp],eax
    pop_eax
    push_eax              # argv (local)
    lea_eax,[ebp+DWORD] %4
    pop_ebx               # =:
    mov_[eax],ebx
    pop_eax
    push_eax              # argc (local)
    lea_eax,[ebp+DWORD] %8
    pop_ebx               # =:
    mov_[eax],ebx
    pop_eax
    push_eax              # __init_globals__ (function)
    mov_eax, &f___init_globals__
    add_ebp, %12         # ()
    call_eax
    sub_ebp, %12
    push_eax              # _sys_env (global)
    mov_eax, &g__sys_env
    push_eax              # argv (local)
    lea_eax,[ebp+DWORD] %4
    mov_eax,[eax]         # ?
    push_eax              # argc (local)
    lea_eax,[ebp+DWORD] %8
    mov_eax,[eax]         # ?
    push_eax              # 4
    mov_eax, %4
    pop_ebx               # *
    mul_ebx
    push_eax              # 4
    mov_eax, %4
    pop_ebx               # +
    add_eax,ebx
    pop_ebx               # +
    add_eax,ebx
    pop_ebx               # =
    mov_[ebx],eax
    pop_eax               # ;
# stack_c.c 479
    push_eax              # ferr (global)
    mov_eax, &g_ferr
    push_eax              # stderr (global)
    mov_eax, &g_stderr
    mov_eax,[eax]         # ?
    pop_ebx               # =
    mov_[ebx],eax
    pop_eax               # ;
# stack_c.c 480
    push_eax              # fout (global)
    mov_eax, &g_fout
    push_eax              # stdout (global)
    mov_eax, &g_stdout
    mov_eax,[eax]         # ?
    pop_ebx               # =
    mov_[ebx],eax
    pop_eax               # ;
# stack_c.c 481
    push_eax              # fin (global)
    mov_eax, &g_fin
    push_eax              # stdin (global)
    mov_eax, &g_stdin
    mov_eax,[eax]         # ?
    pop_ebx               # =
    mov_[ebx],eax
    pop_eax               # ;
    push_eax              # fintro (local)
    lea_eax,[ebp+DWORD] %12
    push_eax              # 0
    mov_eax, %0
    pop_ebx               # =
    mov_[ebx],eax
    pop_eax               # ;
# stack_c.c 484
    push_eax              # i (local)
    lea_eax,[ebp+DWORD] %16
    push_eax              # 1
    mov_eax, %1
    pop_ebx               # =
    mov_[ebx],eax
    pop_eax               # ;
:_main_loop1
    push_eax              # i (local)
    lea_eax,[ebp+DWORD] %16
    mov_eax,[eax]         # ?
    push_eax              # argc (local)
    lea_eax,[ebp+DWORD] %8
    mov_eax,[eax]         # ?
    pop_ebx               # <s
    cmp_eax_ebx
    setl_al
    movzx_eax,al
    test_eax,eax          # !
    sete_al
    movzx_eax,al
    test_eax,eax          # if
    pop_eax
    je %_main_else2
    jmp %_main_loop_end1
# stack_c.c 485
:_main_else2 # no else
    push_eax              # i (local)
    lea_eax,[ebp+DWORD] %16
    mov_eax,[eax]         # ?
    push_eax              # 1
    mov_eax, %1
    pop_ebx               # +
    add_eax,ebx
    push_eax              # argc (local)
    lea_eax,[ebp+DWORD] %8
    mov_eax,[eax]         # ?
    pop_ebx               # <s
    cmp_eax_ebx
    setl_al
    movzx_eax,al
    test_eax,eax          # &&
    je %_main_and_end3
    pop_eax
    push_eax              # argv (local)
    lea_eax,[ebp+DWORD] %4
    mov_eax,[eax]         # ?
    push_eax              # i (local)
    lea_eax,[ebp+DWORD] %16
    mov_eax,[eax]         # ?
    push_eax              # 4
    mov_eax, %4
    pop_ebx               # *
    mul_ebx
    pop_ebx               # +
    add_eax,ebx
    mov_eax,[eax]         # ?
    push_eax              # '-o'
    mov_eax, &string_21
    push_eax              # strcmp (function)
    mov_eax, &f_strcmp
    add_ebp, %20         # ()
    call_eax
    sub_ebp, %20
    push_eax              # 0
    mov_eax, %0
    pop_ebx               # ==
    cmp_eax_ebx
    sete_al
    movzx_eax,al
:_main_and_end3
    test_eax,eax          # if
    pop_eax
    je %_main_else4
# stack_c.c 486
# stack_c.c 487
    push_eax              # fout (global)
    mov_eax, &g_fout
    push_eax              # argv (local)
    lea_eax,[ebp+DWORD] %4
    mov_eax,[eax]         # ?
    push_eax              # i (local)
    lea_eax,[ebp+DWORD] %16
    push_eax              # $ (dup)
    mov_eax,[eax]         # ?
    push_eax              # 1
    mov_eax, %1
    pop_ebx               # +
    add_eax,ebx
    pop_ebx               # =
    mov_[ebx],eax
    push_eax              # 4
    mov_eax, %4
    pop_ebx               # *
    mul_ebx
    pop_ebx               # +
    add_eax,ebx
    mov_eax,[eax]         # ?
    push_eax              # 'w'
    mov_eax, &string_22
    push_eax              # fopen (function)
    mov_eax, &f_fopen
    add_ebp, %20         # ()
    call_eax
    sub_ebp, %20
    pop_ebx               # =
    mov_[ebx],eax
    pop_eax               # ;
# stack_c.c 488
    push_eax              # fout (global)
    mov_eax, &g_fout
    mov_eax,[eax]         # ?
    push_eax              # 0
    mov_eax, %0
    pop_ebx               # ==
    cmp_eax_ebx
    sete_al
    movzx_eax,al
    test_eax,eax          # if
    pop_eax
    je %_main_else5
# stack_c.c 489
# stack_c.c 490
    push_eax              # ferr (global)
    mov_eax, &g_ferr
    mov_eax,[eax]         # ?
    push_eax              # 'ERROR: Cannot open file '%s' for writing\n'
    mov_eax, &string_23
    push_eax              # __var_args (local)
    lea_eax,[ebp+DWORD] %20
    push_eax              # argv (local)
    lea_eax,[ebp+DWORD] %4
    mov_eax,[eax]         # ?
    push_eax              # i (local)
    lea_eax,[ebp+DWORD] %16
    mov_eax,[eax]         # ?
    push_eax              # 4
    mov_eax, %4
    pop_ebx               # *
    mul_ebx
    pop_ebx               # +
    add_eax,ebx
    mov_eax,[eax]         # ?
    pop_ebx               # =
    mov_[ebx],eax
    pop_eax               # ;
    push_eax              # __var_args (local)
    lea_eax,[ebp+DWORD] %20
    push_eax              # fprintf (function)
    mov_eax, &f_fprintf
    add_ebp, %24         # ()
    call_eax
    sub_ebp, %24
    pop_eax               # ;
# stack_c.c 491
    push_eax              # 1
    mov_eax, %1
    mov_ebx,[ebp]         # return
    push_ebx
    ret
:_main_else5 # no else
    jmp %_main_else_end4
:_main_else4
# stack_c.c 494
    push_eax              # i (local)
    lea_eax,[ebp+DWORD] %16
    mov_eax,[eax]         # ?
    push_eax              # 1
    mov_eax, %1
    pop_ebx               # +
    add_eax,ebx
    push_eax              # argc (local)
    lea_eax,[ebp+DWORD] %8
    mov_eax,[eax]         # ?
    pop_ebx               # <s
    cmp_eax_ebx
    setl_al
    movzx_eax,al
    test_eax,eax          # &&
    je %_main_and_end6
    pop_eax
    push_eax              # argv (local)
    lea_eax,[ebp+DWORD] %4
    mov_eax,[eax]         # ?
    push_eax              # i (local)
    lea_eax,[ebp+DWORD] %16
    mov_eax,[eax]         # ?
    push_eax              # 4
    mov_eax, %4
    pop_ebx               # *
    mul_ebx
    pop_ebx               # +
    add_eax,ebx
    mov_eax,[eax]         # ?
    push_eax              # '-i'
    mov_eax, &string_24
    push_eax              # strcmp (function)
    mov_eax, &f_strcmp
    add_ebp, %20         # ()
    call_eax
    sub_ebp, %20
    push_eax              # 0
    mov_eax, %0
    pop_ebx               # ==
    cmp_eax_ebx
    sete_al
    movzx_eax,al
:_main_and_end6
    test_eax,eax          # if
    pop_eax
    je %_main_else7
# stack_c.c 495
# stack_c.c 496
    push_eax              # fintro (local)
    lea_eax,[ebp+DWORD] %12
    push_eax              # argv (local)
    lea_eax,[ebp+DWORD] %4
    mov_eax,[eax]         # ?
    push_eax              # i (local)
    lea_eax,[ebp+DWORD] %16
    push_eax              # $ (dup)
    mov_eax,[eax]         # ?
    push_eax              # 1
    mov_eax, %1
    pop_ebx               # +
    add_eax,ebx
    pop_ebx               # =
    mov_[ebx],eax
    push_eax              # 4
    mov_eax, %4
    pop_ebx               # *
    mul_ebx
    pop_ebx               # +
    add_eax,ebx
    mov_eax,[eax]         # ?
    push_eax              # 'r'
    mov_eax, &string_25
    push_eax              # fopen (function)
    mov_eax, &f_fopen
    add_ebp, %20         # ()
    call_eax
    sub_ebp, %20
    pop_ebx               # =
    mov_[ebx],eax
    pop_eax               # ;
# stack_c.c 497
    push_eax              # fintro (local)
    lea_eax,[ebp+DWORD] %12
    mov_eax,[eax]         # ?
    push_eax              # 0
    mov_eax, %0
    pop_ebx               # ==
    cmp_eax_ebx
    sete_al
    movzx_eax,al
    test_eax,eax          # if
    pop_eax
    je %_main_else8
# stack_c.c 498
# stack_c.c 499
    push_eax              # ferr (global)
    mov_eax, &g_ferr
    mov_eax,[eax]         # ?
    push_eax              # 'ERROR: Cannot open file '%s' for input\n'
    mov_eax, &string_26
    push_eax              # __var_args (local)
    lea_eax,[ebp+DWORD] %20
    push_eax              # argv (local)
    lea_eax,[ebp+DWORD] %4
    mov_eax,[eax]         # ?
    push_eax              # i (local)
    lea_eax,[ebp+DWORD] %16
    mov_eax,[eax]         # ?
    push_eax              # 4
    mov_eax, %4
    pop_ebx               # *
    mul_ebx
    pop_ebx               # +
    add_eax,ebx
    mov_eax,[eax]         # ?
    pop_ebx               # =
    mov_[ebx],eax
    pop_eax               # ;
    push_eax              # __var_args (local)
    lea_eax,[ebp+DWORD] %20
    push_eax              # fprintf (function)
    mov_eax, &f_fprintf
    add_ebp, %24         # ()
    call_eax
    sub_ebp, %24
    pop_eax               # ;
# stack_c.c 500
    push_eax              # 1
    mov_eax, %1
    mov_ebx,[ebp]         # return
    push_ebx
    ret
:_main_else8 # no else
    jmp %_main_else_end7
:_main_else7
# stack_c.c 504
# stack_c.c 505
    push_eax              # fin (global)
    mov_eax, &g_fin
    push_eax              # argv (local)
    lea_eax,[ebp+DWORD] %4
    mov_eax,[eax]         # ?
    push_eax              # i (local)
    lea_eax,[ebp+DWORD] %16
    mov_eax,[eax]         # ?
    push_eax              # 4
    mov_eax, %4
    pop_ebx               # *
    mul_ebx
    pop_ebx               # +
    add_eax,ebx
    mov_eax,[eax]         # ?
    push_eax              # 'r'
    mov_eax, &string_25
    push_eax              # fopen (function)
    mov_eax, &f_fopen
    add_ebp, %20         # ()
    call_eax
    sub_ebp, %20
    pop_ebx               # =
    mov_[ebx],eax
    pop_eax               # ;
# stack_c.c 506
    push_eax              # fin (global)
    mov_eax, &g_fin
    mov_eax,[eax]         # ?
    push_eax              # 0
    mov_eax, %0
    pop_ebx               # ==
    cmp_eax_ebx
    sete_al
    movzx_eax,al
    test_eax,eax          # if
    pop_eax
    je %_main_else9
# stack_c.c 507
# stack_c.c 508
    push_eax              # ferr (global)
    mov_eax, &g_ferr
    mov_eax,[eax]         # ?
    push_eax              # 'ERROR: Cannot open file '%s' for input\n'
    mov_eax, &string_26
    push_eax              # __var_args (local)
    lea_eax,[ebp+DWORD] %20
    push_eax              # argv (local)
    lea_eax,[ebp+DWORD] %4
    mov_eax,[eax]         # ?
    push_eax              # i (local)
    lea_eax,[ebp+DWORD] %16
    mov_eax,[eax]         # ?
    push_eax              # 4
    mov_eax, %4
    pop_ebx               # *
    mul_ebx
    pop_ebx               # +
    add_eax,ebx
    mov_eax,[eax]         # ?
    pop_ebx               # =
    mov_[ebx],eax
    pop_eax               # ;
    push_eax              # __var_args (local)
    lea_eax,[ebp+DWORD] %20
    push_eax              # fprintf (function)
    mov_eax, &f_fprintf
    add_ebp, %24         # ()
    call_eax
    sub_ebp, %24
    pop_eax               # ;
# stack_c.c 509
    push_eax              # 1
    mov_eax, %1
    mov_ebx,[ebp]         # return
    push_ebx
    ret
:_main_else9 # no else
:_main_else_end7
:_main_else_end4
    push_eax              # i (local)
    lea_eax,[ebp+DWORD] %16
    push_eax              # $ (dup)
    mov_eax,[eax]         # ?
    push_eax              # 1
    mov_eax, %1
    pop_ebx               # +
    add_eax,ebx
    pop_ebx               # =
    mov_[ebx],eax
    push_eax              # 1
    mov_eax, %1
    pop_ebx               # -
    sub_ebx,eax
    mov_eax,ebx
    pop_eax               # ;
    jmp %_main_loop1
:_main_loop_end1
# stack_c.c 515
    push_eax              # 'sys_int80'
    mov_eax, &string_27
    push_eax              # add_function (function)
    mov_eax, &f_add_function
    add_ebp, %16         # ()
    call_eax
    sub_ebp, %16
    pop_eax               # ;
# stack_c.c 516
    push_eax              # 'sys_malloc'
    mov_eax, &string_28
    push_eax              # add_function (function)
    mov_eax, &f_add_function
    add_ebp, %16         # ()
    call_eax
    sub_ebp, %16
    pop_eax               # ;
# stack_c.c 519
    push_eax              # fintro (local)
    lea_eax,[ebp+DWORD] %12
    mov_eax,[eax]         # ?
    push_eax              # 0
    mov_eax, %0
    pop_ebx               # !=
    cmp_eax_ebx
    setne_al
    movzx_eax,al
    test_eax,eax          # if
    pop_eax
    je %_main_else10
# stack_c.c 520
# stack_c.c 521
:_main_loop11
# stack_c.c 522
# stack_c.c 523
    push_eax              # cur_char (global)
    mov_eax, &g_cur_char
    push_eax              # fintro (local)
    lea_eax,[ebp+DWORD] %12
    mov_eax,[eax]         # ?
    push_eax              # fgetc (function)
    mov_eax, &f_fgetc
    add_ebp, %16         # ()
    call_eax
    sub_ebp, %16
    pop_ebx               # =1
    mov_[ebx],al
    pop_eax               # ;
# stack_c.c 524
    push_eax              # fintro (local)
    lea_eax,[ebp+DWORD] %12
    mov_eax,[eax]         # ?
    push_eax              # feof (function)
    mov_eax, &f_feof
    add_ebp, %16         # ()
    call_eax
    sub_ebp, %16
    test_eax,eax          # if
    pop_eax
    je %_main_else12
# stack_c.c 525
    jmp %_main_loop_end11
# stack_c.c 526
:_main_else12 # no else
    push_eax              # cur_char (global)
    mov_eax, &g_cur_char
    mov_al,[eax]          # ?1
    movzx_eax,al
    movsx_eax,al          # char
    push_eax              # fout (global)
    mov_eax, &g_fout
    mov_eax,[eax]         # ?
    push_eax              # fputc (function)
    mov_eax, &f_fputc
    add_ebp, %16         # ()
    call_eax
    sub_ebp, %16
    pop_eax               # ;
    jmp %_main_loop11
:_main_loop_end11
# stack_c.c 528
    push_eax              # fintro (local)
    lea_eax,[ebp+DWORD] %12
    mov_eax,[eax]         # ?
    push_eax              # fclose (function)
    mov_eax, &f_fclose
    add_ebp, %16         # ()
    call_eax
    sub_ebp, %16
    pop_eax               # ;
:_main_else10 # no else
# stack_c.c 535
    push_eax              # read_char (function)
    mov_eax, &f_read_char
    add_ebp, %72         # ()
    call_eax
    sub_ebp, %72
    pop_eax               # ;
# stack_c.c 537
    push_eax              # get_token (function)
    mov_eax, &f_get_token
    add_ebp, %72         # ()
    call_eax
    sub_ebp, %72
    pop_eax               # ;
# stack_c.c 538
:_main_loop13
    push_eax              # 1
    mov_eax, %1
    test_eax,eax          # !
    sete_al
    movzx_eax,al
    test_eax,eax          # if
    pop_eax
    je %_main_else14
    jmp %_main_loop_end13
# stack_c.c 539
# stack_c.c 540
:_main_else14 # no else
    push_eax              # sym (global)
    mov_eax, &g_sym
    mov_al,[eax]          # ?1
    movzx_eax,al
    movsx_eax,al          # char
    push_eax              # 0
    mov_eax, %0
    pop_ebx               # ==
    cmp_eax_ebx
    sete_al
    movzx_eax,al
    test_eax,eax          # if
    pop_eax
    je %_main_else15
# stack_c.c 541
    jmp %_main_loop_end13
# stack_c.c 543
:_main_else15 # no else
    push_eax              # sym (global)
    mov_eax, &g_sym
    mov_al,[eax]          # ?1
    movzx_eax,al
    movsx_eax,al          # char
    push_eax              # 70
    mov_eax, %70
    pop_ebx               # ==
    cmp_eax_ebx
    sete_al
    movzx_eax,al
    test_eax,eax          # if
    pop_eax
    je %_main_else16
# stack_c.c 544
# stack_c.c 546
    push_eax              # get_token (function)
    mov_eax, &f_get_token
    add_ebp, %72         # ()
    call_eax
    sub_ebp, %72
    pop_eax               # ;
# stack_c.c 547
    push_eax              # sym (global)
    mov_eax, &g_sym
    mov_al,[eax]          # ?1
    movzx_eax,al
    movsx_eax,al          # char
    push_eax              # 65
    mov_eax, %65
    pop_ebx               # !=
    cmp_eax_ebx
    setne_al
    movzx_eax,al
    test_eax,eax          # if
    pop_eax
    je %_main_else17
# stack_c.c 548
# stack_c.c 549
    push_eax              # ferr (global)
    mov_eax, &g_ferr
    mov_eax,[eax]         # ?
    push_eax              # 'ERROR %d.%d: Expecting name after 'void' for function\n'
    mov_eax, &string_29
    push_eax              # __var_args (local)
    lea_eax,[ebp+DWORD] %72
    push_eax              # cur_line (global)
    mov_eax, &g_cur_line
    mov_eax,[eax]         # ?
    pop_ebx               # =
    mov_[ebx],eax
    pop_eax               # ;
    push_eax              # __var_args (local)
    lea_eax,[ebp+DWORD] %72
    push_eax              # 4
    mov_eax, %4
    pop_ebx               # +
    add_eax,ebx
    push_eax              # cur_column (global)
    mov_eax, &g_cur_column
    mov_eax,[eax]         # ?
    pop_ebx               # =
    mov_[ebx],eax
    pop_eax               # ;
    push_eax              # __var_args (local)
    lea_eax,[ebp+DWORD] %72
    push_eax              # fprintf (function)
    mov_eax, &f_fprintf
    add_ebp, %80         # ()
    call_eax
    sub_ebp, %80
    pop_eax               # ;
# stack_c.c 550
    push_eax              # 1
    mov_eax, %1
    mov_ebx,[ebp]         # return
    push_ebx
    ret
# stack_c.c 553
:_main_else17 # no else
    push_eax              # function_name (local)
    lea_eax,[ebp+DWORD] %20
    push_eax              # token (global)
    mov_eax, &g_token
    push_eax              # strcpy (function)
    mov_eax, &f_strcpy
    add_ebp, %72         # ()
    call_eax
    sub_ebp, %72
    pop_eax               # ;
# stack_c.c 555
    push_eax              # found (local)
    lea_eax,[ebp+DWORD] %72
    push_eax              # 0
    mov_eax, %0
    pop_ebx               # =
    mov_[ebx],eax
    pop_eax               # ;
# stack_c.c 557
    push_eax              # i (local)
    lea_eax,[ebp+DWORD] %76
    push_eax              # 0
    mov_eax, %0
    pop_ebx               # =
    mov_[ebx],eax
    pop_eax               # ;
:_main_loop18
    push_eax              # i (local)
    lea_eax,[ebp+DWORD] %76
    mov_eax,[eax]         # ?
    push_eax              # nr_idents (global)
    mov_eax, &g_nr_idents
    mov_eax,[eax]         # ?
    pop_ebx               # <s
    cmp_eax_ebx
    setl_al
    movzx_eax,al
    test_eax,eax          # !
    sete_al
    movzx_eax,al
    test_eax,eax          # if
    pop_eax
    je %_main_else19
    jmp %_main_loop_end18
# stack_c.c 558
:_main_else19 # no else
    push_eax              # token (global)
    mov_eax, &g_token
    push_eax              # idents (global)
    mov_eax, &g_idents
    push_eax              # i (local)
    lea_eax,[ebp+DWORD] %76
    mov_eax,[eax]         # ?
    push_eax              # 68
    mov_eax, %68
    pop_ebx               # *
    mul_ebx
    pop_ebx               # +
    add_eax,ebx
    push_eax              # 4 (const s7_m_name)
    mov_eax, %4
    pop_ebx               # +
    add_eax,ebx
    push_eax              # strcmp (function)
    mov_eax, &f_strcmp
    add_ebp, %80         # ()
    call_eax
    sub_ebp, %80
    push_eax              # 0
    mov_eax, %0
    pop_ebx               # ==
    cmp_eax_ebx
    sete_al
    movzx_eax,al
    test_eax,eax          # if
    pop_eax
    je %_main_else20
# stack_c.c 559
# stack_c.c 560
    push_eax              # found (local)
    lea_eax,[ebp+DWORD] %72
    push_eax              # 1
    mov_eax, %1
    pop_ebx               # =
    mov_[ebx],eax
    pop_eax               # ;
# stack_c.c 561
    jmp %_main_loop_end18
:_main_else20 # no else
    push_eax              # i (local)
    lea_eax,[ebp+DWORD] %76
    push_eax              # $ (dup)
    mov_eax,[eax]         # ?
    push_eax              # 1
    mov_eax, %1
    pop_ebx               # +
    add_eax,ebx
    pop_ebx               # =
    mov_[ebx],eax
    push_eax              # 1
    mov_eax, %1
    pop_ebx               # -
    sub_ebx,eax
    mov_eax,ebx
    pop_eax               # ;
    jmp %_main_loop18
:_main_loop_end18
# stack_c.c 563
    push_eax              # found (local)
    lea_eax,[ebp+DWORD] %72
    mov_eax,[eax]         # ?
    test_eax,eax          # !
    sete_al
    movzx_eax,al
    test_eax,eax          # if
    pop_eax
    je %_main_else21
# stack_c.c 564
# stack_c.c 565
    push_eax              # nr_idents (global)
    mov_eax, &g_nr_idents
    mov_eax,[eax]         # ?
    push_eax              # 4000
    mov_eax, %4000
    pop_ebx               # >=sfv
    cmp_eax_ebx
    setge_al
    movzx_eax,al
    test_eax,eax          # if
    pop_eax
    je %_main_else22
# stack_c.c 566
# stack_c.c 567
    push_eax              # ferr (global)
    mov_eax, &g_ferr
    mov_eax,[eax]         # ?
    push_eax              # 'ERROR %d.%d: More than %d variables\n'
    mov_eax, &string_30
    push_eax              # __var_args (local)
    lea_eax,[ebp+DWORD] %76
    push_eax              # cur_line (global)
    mov_eax, &g_cur_line
    mov_eax,[eax]         # ?
    pop_ebx               # =
    mov_[ebx],eax
    pop_eax               # ;
    push_eax              # __var_args (local)
    lea_eax,[ebp+DWORD] %76
    push_eax              # 4
    mov_eax, %4
    pop_ebx               # +
    add_eax,ebx
    push_eax              # cur_column (global)
    mov_eax, &g_cur_column
    mov_eax,[eax]         # ?
    pop_ebx               # =
    mov_[ebx],eax
    pop_eax               # ;
    push_eax              # __var_args (local)
    lea_eax,[ebp+DWORD] %76
    push_eax              # 8
    mov_eax, %8
    pop_ebx               # +
    add_eax,ebx
    push_eax              # 4000
    mov_eax, %4000
    pop_ebx               # =
    mov_[ebx],eax
    pop_eax               # ;
    push_eax              # __var_args (local)
    lea_eax,[ebp+DWORD] %76
    push_eax              # fprintf (function)
    mov_eax, &f_fprintf
    add_ebp, %88         # ()
    call_eax
    sub_ebp, %88
    pop_eax               # ;
# stack_c.c 568
    push_eax              # 1
    mov_eax, %1
    mov_ebx,[ebp]         # return
    push_ebx
    ret
# stack_c.c 570
:_main_else22 # no else
    push_eax              # token (global)
    mov_eax, &g_token
    push_eax              # add_function (function)
    mov_eax, &f_add_function
    add_ebp, %76         # ()
    call_eax
    sub_ebp, %76
    pop_eax               # ;
:_main_else21 # no else
# stack_c.c 573
    push_eax              # get_token (function)
    mov_eax, &f_get_token
    add_ebp, %72         # ()
    call_eax
    sub_ebp, %72
    pop_eax               # ;
# stack_c.c 574
    push_eax              # sym (global)
    mov_eax, &g_sym
    mov_al,[eax]          # ?1
    movzx_eax,al
    movsx_eax,al          # char
    push_eax              # 59
    mov_eax, %59
    pop_ebx               # ==
    cmp_eax_ebx
    sete_al
    movzx_eax,al
    test_eax,eax          # if
    pop_eax
    je %_main_else23
# stack_c.c 575
    jmp %_main_else_end23
:_main_else23
# stack_c.c 579
# stack_c.c 580
    push_eax              # pos (global)
    mov_eax, &g_pos
    push_eax              # 1
    mov_eax, %1
    pop_ebx               # =
    mov_[ebx],eax
    pop_eax               # ;
# stack_c.c 581
    push_eax              # sym (global)
    mov_eax, &g_sym
    mov_al,[eax]          # ?1
    movzx_eax,al
    movsx_eax,al          # char
    push_eax              # 123
    mov_eax, %123
    pop_ebx               # !=
    cmp_eax_ebx
    setne_al
    movzx_eax,al
    test_eax,eax          # if
    pop_eax
    je %_main_else24
# stack_c.c 582
# stack_c.c 583
    push_eax              # ferr (global)
    mov_eax, &g_ferr
    mov_eax,[eax]         # ?
    push_eax              # 'ERROR %d.%d: Expect ; or { after function name\n'
    mov_eax, &string_31
    push_eax              # __var_args (local)
    lea_eax,[ebp+DWORD] %72
    push_eax              # cur_line (global)
    mov_eax, &g_cur_line
    mov_eax,[eax]         # ?
    pop_ebx               # =
    mov_[ebx],eax
    pop_eax               # ;
    push_eax              # __var_args (local)
    lea_eax,[ebp+DWORD] %72
    push_eax              # 4
    mov_eax, %4
    pop_ebx               # +
    add_eax,ebx
    push_eax              # cur_column (global)
    mov_eax, &g_cur_column
    mov_eax,[eax]         # ?
    pop_ebx               # =
    mov_[ebx],eax
    pop_eax               # ;
    push_eax              # __var_args (local)
    lea_eax,[ebp+DWORD] %72
    push_eax              # fprintf (function)
    mov_eax, &f_fprintf
    add_ebp, %80         # ()
    call_eax
    sub_ebp, %80
    pop_eax               # ;
# stack_c.c 584
    push_eax              # 1
    mov_eax, %1
    mov_ebx,[ebp]         # return
    push_ebx
    ret
# stack_c.c 588
:_main_else24 # no else
    push_eax              # fout (global)
    mov_eax, &g_fout
    mov_eax,[eax]         # ?
    push_eax              # '\n:f_%s\n\tpop_eax\n\tmov_[ebp],eax\n\tpop_eax\n'
    mov_eax, &string_32
    push_eax              # __var_args (local)
    lea_eax,[ebp+DWORD] %72
    push_eax              # function_name (local)
    lea_eax,[ebp+DWORD] %20
    pop_ebx               # =
    mov_[ebx],eax
    pop_eax               # ;
    push_eax              # __var_args (local)
    lea_eax,[ebp+DWORD] %72
    push_eax              # fprintf (function)
    mov_eax, &f_fprintf
    add_ebp, %76         # ()
    call_eax
    sub_ebp, %76
    pop_eax               # ;
# stack_c.c 589
    push_eax              # nesting_type (global)
    mov_eax, &g_nesting_type
    push_eax              # nesting_depth (global)
    mov_eax, &g_nesting_depth
    mov_eax,[eax]         # ?
    pop_ebx               # +
    add_eax,ebx
    push_eax              # 32
    mov_eax, %32
    pop_ebx               # =1
    mov_[ebx],al
    pop_eax               # ;
# stack_c.c 590
    push_eax              # nesting_nr_vars (global)
    mov_eax, &g_nesting_nr_vars
    push_eax              # nesting_depth (global)
    mov_eax, &g_nesting_depth
    mov_eax,[eax]         # ?
    push_eax              # 4
    mov_eax, %4
    pop_ebx               # *
    mul_ebx
    pop_ebx               # +
    add_eax,ebx
    push_eax              # nr_idents (global)
    mov_eax, &g_nr_idents
    mov_eax,[eax]         # ?
    pop_ebx               # =
    mov_[ebx],eax
    pop_eax               # ;
# stack_c.c 591
    push_eax              # nesting_pos (global)
    mov_eax, &g_nesting_pos
    push_eax              # nesting_depth (global)
    mov_eax, &g_nesting_depth
    mov_eax,[eax]         # ?
    push_eax              # 4
    mov_eax, %4
    pop_ebx               # *
    mul_ebx
    pop_ebx               # +
    add_eax,ebx
    push_eax              # pos (global)
    mov_eax, &g_pos
    mov_eax,[eax]         # ?
    pop_ebx               # =
    mov_[ebx],eax
    pop_eax               # ;
# stack_c.c 592
    push_eax              # nesting_depth (global)
    mov_eax, &g_nesting_depth
    push_eax              # $ (dup)
    mov_eax,[eax]         # ?
    push_eax              # 1
    mov_eax, %1
    pop_ebx               # +
    add_eax,ebx
    pop_ebx               # =
    mov_[ebx],eax
    push_eax              # 1
    mov_eax, %1
    pop_ebx               # -
    sub_ebx,eax
    mov_eax,ebx
    pop_eax               # ;
# stack_c.c 593
    push_eax              # id (local)
    lea_eax,[ebp+DWORD] %16
    push_eax              # 1
    mov_eax, %1
    pop_ebx               # =
    mov_[ebx],eax
    pop_eax               # ;
:_main_else_end23
    jmp %_main_else_end16
:_main_else16
# stack_c.c 596
    push_eax              # sym (global)
    mov_eax, &g_sym
    mov_al,[eax]          # ?1
    movzx_eax,al
    movsx_eax,al          # char
    push_eax              # 67
    mov_eax, %67
    pop_ebx               # ==
    cmp_eax_ebx
    sete_al
    movzx_eax,al
    test_eax,eax          # if
    pop_eax
    je %_main_else25
# stack_c.c 597
# stack_c.c 599
    push_eax              # get_token (function)
    mov_eax, &f_get_token
    add_ebp, %72         # ()
    call_eax
    sub_ebp, %72
    pop_eax               # ;
# stack_c.c 600
    push_eax              # sym (global)
    mov_eax, &g_sym
    mov_al,[eax]          # ?1
    movzx_eax,al
    movsx_eax,al          # char
    push_eax              # 65
    mov_eax, %65
    pop_ebx               # !=
    cmp_eax_ebx
    setne_al
    movzx_eax,al
    test_eax,eax          # if
    pop_eax
    je %_main_else26
# stack_c.c 601
# stack_c.c 602
    push_eax              # ferr (global)
    mov_eax, &g_ferr
    mov_eax,[eax]         # ?
    push_eax              # 'ERROR %d.%d: Expecting name after 'const'\n'
    mov_eax, &string_33
    push_eax              # __var_args (local)
    lea_eax,[ebp+DWORD] %72
    push_eax              # cur_line (global)
    mov_eax, &g_cur_line
    mov_eax,[eax]         # ?
    pop_ebx               # =
    mov_[ebx],eax
    pop_eax               # ;
    push_eax              # __var_args (local)
    lea_eax,[ebp+DWORD] %72
    push_eax              # 4
    mov_eax, %4
    pop_ebx               # +
    add_eax,ebx
    push_eax              # cur_column (global)
    mov_eax, &g_cur_column
    mov_eax,[eax]         # ?
    pop_ebx               # =
    mov_[ebx],eax
    pop_eax               # ;
    push_eax              # __var_args (local)
    lea_eax,[ebp+DWORD] %72
    push_eax              # fprintf (function)
    mov_eax, &f_fprintf
    add_ebp, %80         # ()
    call_eax
    sub_ebp, %80
    pop_eax               # ;
# stack_c.c 603
    push_eax              # 1
    mov_eax, %1
    mov_ebx,[ebp]         # return
    push_ebx
    ret
# stack_c.c 605
:_main_else26 # no else
    push_eax              # nr_idents (global)
    mov_eax, &g_nr_idents
    mov_eax,[eax]         # ?
    push_eax              # 4000
    mov_eax, %4000
    pop_ebx               # >=sfv
    cmp_eax_ebx
    setge_al
    movzx_eax,al
    test_eax,eax          # if
    pop_eax
    je %_main_else27
# stack_c.c 606
# stack_c.c 607
    push_eax              # ferr (global)
    mov_eax, &g_ferr
    mov_eax,[eax]         # ?
    push_eax              # 'ERROR %d.%d: More than %d variables\n'
    mov_eax, &string_30
    push_eax              # __var_args (local)
    lea_eax,[ebp+DWORD] %72
    push_eax              # cur_line (global)
    mov_eax, &g_cur_line
    mov_eax,[eax]         # ?
    pop_ebx               # =
    mov_[ebx],eax
    pop_eax               # ;
    push_eax              # __var_args (local)
    lea_eax,[ebp+DWORD] %72
    push_eax              # 4
    mov_eax, %4
    pop_ebx               # +
    add_eax,ebx
    push_eax              # cur_column (global)
    mov_eax, &g_cur_column
    mov_eax,[eax]         # ?
    pop_ebx               # =
    mov_[ebx],eax
    pop_eax               # ;
    push_eax              # __var_args (local)
    lea_eax,[ebp+DWORD] %72
    push_eax              # 8
    mov_eax, %8
    pop_ebx               # +
    add_eax,ebx
    push_eax              # 4000
    mov_eax, %4000
    pop_ebx               # =
    mov_[ebx],eax
    pop_eax               # ;
    push_eax              # __var_args (local)
    lea_eax,[ebp+DWORD] %72
    push_eax              # fprintf (function)
    mov_eax, &f_fprintf
    add_ebp, %84         # ()
    call_eax
    sub_ebp, %84
    pop_eax               # ;
# stack_c.c 608
    push_eax              # 1
    mov_eax, %1
    mov_ebx,[ebp]         # return
    push_ebx
    ret
# stack_c.c 610
:_main_else27 # no else
    push_eax              # idents (global)
    mov_eax, &g_idents
    push_eax              # nr_idents (global)
    mov_eax, &g_nr_idents
    mov_eax,[eax]         # ?
    push_eax              # 68
    mov_eax, %68
    pop_ebx               # *
    mul_ebx
    pop_ebx               # +
    add_eax,ebx
    push_eax              # 0 (const s7_m_type)
    mov_eax, %0
    pop_ebx               # +
    add_eax,ebx
    push_eax              # 67
    mov_eax, %67
    pop_ebx               # =1
    mov_[ebx],al
    pop_eax               # ;
# stack_c.c 611
    push_eax              # idents (global)
    mov_eax, &g_idents
    push_eax              # nr_idents (global)
    mov_eax, &g_nr_idents
    mov_eax,[eax]         # ?
    push_eax              # 68
    mov_eax, %68
    pop_ebx               # *
    mul_ebx
    pop_ebx               # +
    add_eax,ebx
    push_eax              # 4 (const s7_m_name)
    mov_eax, %4
    pop_ebx               # +
    add_eax,ebx
    push_eax              # token (global)
    mov_eax, &g_token
    push_eax              # strcpy (function)
    mov_eax, &f_strcpy
    add_ebp, %72         # ()
    call_eax
    sub_ebp, %72
    pop_eax               # ;
# stack_c.c 612
    push_eax              # get_token (function)
    mov_eax, &f_get_token
    add_ebp, %72         # ()
    call_eax
    sub_ebp, %72
    pop_eax               # ;
# stack_c.c 613
    push_eax              # sym (global)
    mov_eax, &g_sym
    mov_al,[eax]          # ?1
    movzx_eax,al
    movsx_eax,al          # char
    push_eax              # 48
    mov_eax, %48
    pop_ebx               # !=
    cmp_eax_ebx
    setne_al
    movzx_eax,al
    test_eax,eax          # if
    pop_eax
    je %_main_else28
# stack_c.c 614
# stack_c.c 615
    push_eax              # ferr (global)
    mov_eax, &g_ferr
    mov_eax,[eax]         # ?
    push_eax              # 'ERROR %d.%d: Expecting number after 'const' <name>\n'
    mov_eax, &string_34
    push_eax              # __var_args (local)
    lea_eax,[ebp+DWORD] %72
    push_eax              # cur_line (global)
    mov_eax, &g_cur_line
    mov_eax,[eax]         # ?
    pop_ebx               # =
    mov_[ebx],eax
    pop_eax               # ;
    push_eax              # __var_args (local)
    lea_eax,[ebp+DWORD] %72
    push_eax              # 4
    mov_eax, %4
    pop_ebx               # +
    add_eax,ebx
    push_eax              # cur_column (global)
    mov_eax, &g_cur_column
    mov_eax,[eax]         # ?
    pop_ebx               # =
    mov_[ebx],eax
    pop_eax               # ;
    push_eax              # __var_args (local)
    lea_eax,[ebp+DWORD] %72
    push_eax              # fprintf (function)
    mov_eax, &f_fprintf
    add_ebp, %80         # ()
    call_eax
    sub_ebp, %80
    pop_eax               # ;
# stack_c.c 616
    push_eax              # 1
    mov_eax, %1
    mov_ebx,[ebp]         # return
    push_ebx
    ret
# stack_c.c 618
:_main_else28 # no else
    push_eax              # idents (global)
    mov_eax, &g_idents
    push_eax              # nr_idents (global)
    mov_eax, &g_nr_idents
    mov_eax,[eax]         # ?
    push_eax              # 68
    mov_eax, %68
    pop_ebx               # *
    mul_ebx
    pop_ebx               # +
    add_eax,ebx
    push_eax              # 64 (const s7_m_value)
    mov_eax, %64
    pop_ebx               # +
    add_eax,ebx
    push_eax              # int_value (global)
    mov_eax, &g_int_value
    mov_eax,[eax]         # ?
    pop_ebx               # =
    mov_[ebx],eax
    pop_eax               # ;
# stack_c.c 619
    push_eax              # nr_idents (global)
    mov_eax, &g_nr_idents
    push_eax              # $ (dup)
    mov_eax,[eax]         # ?
    push_eax              # 1
    mov_eax, %1
    pop_ebx               # +
    add_eax,ebx
    pop_ebx               # =
    mov_[ebx],eax
    push_eax              # 1
    mov_eax, %1
    pop_ebx               # -
    sub_ebx,eax
    mov_eax,ebx
    pop_eax               # ;
    jmp %_main_else_end25
:_main_else25
# stack_c.c 621
    push_eax              # sym (global)
    mov_eax, &g_sym
    mov_al,[eax]          # ?1
    movzx_eax,al
    movsx_eax,al          # char
    push_eax              # 86
    mov_eax, %86
    pop_ebx               # ==
    cmp_eax_ebx
    sete_al
    movzx_eax,al
    test_eax,eax          # ||
    jne %_main_or_end29
    pop_eax
    push_eax              # sym (global)
    mov_eax, &g_sym
    mov_al,[eax]          # ?1
    movzx_eax,al
    movsx_eax,al          # char
    push_eax              # 83
    mov_eax, %83
    pop_ebx               # ==
    cmp_eax_ebx
    sete_al
    movzx_eax,al
:_main_or_end29
    test_eax,eax          # if
    pop_eax
    je %_main_else30
# stack_c.c 622
    push_eax              # type (local)
    lea_eax,[ebp+DWORD] %72
    push_eax              # sym (global)
    mov_eax, &g_sym
    mov_al,[eax]          # ?1
    movzx_eax,al
    movsx_eax,al          # char
    push_eax              # 83
    mov_eax, %83
    pop_ebx               # ==
    cmp_eax_ebx
    sete_al
    movzx_eax,al
    test_eax,eax          # if
    pop_eax
    je %_main_else31
    push_eax              # 83
    mov_eax, %83
    jmp %_main_else_end31
:_main_else31
    push_eax              # nesting_depth (global)
    mov_eax, &g_nesting_depth
    mov_eax,[eax]         # ?
    push_eax              # 0
    mov_eax, %0
    pop_ebx               # ==
    cmp_eax_ebx
    sete_al
    movzx_eax,al
    test_eax,eax          # if
    pop_eax
    je %_main_else32
    push_eax              # 71
    mov_eax, %71
    jmp %_main_else_end32
:_main_else32
    push_eax              # 76
    mov_eax, %76
:_main_else_end32
:_main_else_end31
    pop_ebx               # =1
    mov_[ebx],al
    pop_eax               # ;
# stack_c.c 625
    push_eax              # get_token (function)
    mov_eax, &f_get_token
    add_ebp, %76         # ()
    call_eax
    sub_ebp, %76
    pop_eax               # ;
    push_eax              # size (local)
    lea_eax,[ebp+DWORD] %76
    push_eax              # 1
    mov_eax, %1
    pop_ebx               # =
    mov_[ebx],eax
    pop_eax               # ;
# stack_c.c 627
    push_eax              # sym (global)
    mov_eax, &g_sym
    mov_al,[eax]          # ?1
    movzx_eax,al
    movsx_eax,al          # char
    push_eax              # 48
    mov_eax, %48
    pop_ebx               # ==
    cmp_eax_ebx
    sete_al
    movzx_eax,al
    test_eax,eax          # if
    pop_eax
    je %_main_else33
# stack_c.c 628
# stack_c.c 629
    push_eax              # size (local)
    lea_eax,[ebp+DWORD] %76
    push_eax              # int_value (global)
    mov_eax, &g_int_value
    mov_eax,[eax]         # ?
    pop_ebx               # =
    mov_[ebx],eax
    pop_eax               # ;
# stack_c.c 630
    push_eax              # get_token (function)
    mov_eax, &f_get_token
    add_ebp, %80         # ()
    call_eax
    sub_ebp, %80
    pop_eax               # ;
# stack_c.c 632
:_main_else33 # no else
    push_eax              # sym (global)
    mov_eax, &g_sym
    mov_al,[eax]          # ?1
    movzx_eax,al
    movsx_eax,al          # char
    push_eax              # 65
    mov_eax, %65
    pop_ebx               # !=
    cmp_eax_ebx
    setne_al
    movzx_eax,al
    test_eax,eax          # if
    pop_eax
    je %_main_else34
# stack_c.c 633
# stack_c.c 634
    push_eax              # ferr (global)
    mov_eax, &g_ferr
    mov_eax,[eax]         # ?
    push_eax              # 'ERROR %d.%d: Expecting name after 'int'\n'
    mov_eax, &string_35
    push_eax              # __var_args (local)
    lea_eax,[ebp+DWORD] %80
    push_eax              # cur_line (global)
    mov_eax, &g_cur_line
    mov_eax,[eax]         # ?
    pop_ebx               # =
    mov_[ebx],eax
    pop_eax               # ;
    push_eax              # __var_args (local)
    lea_eax,[ebp+DWORD] %80
    push_eax              # 4
    mov_eax, %4
    pop_ebx               # +
    add_eax,ebx
    push_eax              # cur_column (global)
    mov_eax, &g_cur_column
    mov_eax,[eax]         # ?
    pop_ebx               # =
    mov_[ebx],eax
    pop_eax               # ;
    push_eax              # __var_args (local)
    lea_eax,[ebp+DWORD] %80
    push_eax              # fprintf (function)
    mov_eax, &f_fprintf
    add_ebp, %88         # ()
    call_eax
    sub_ebp, %88
    pop_eax               # ;
# stack_c.c 635
    push_eax              # 1
    mov_eax, %1
    mov_ebx,[ebp]         # return
    push_ebx
    ret
# stack_c.c 637
:_main_else34 # no else
    push_eax              # nr_idents (global)
    mov_eax, &g_nr_idents
    mov_eax,[eax]         # ?
    push_eax              # 4000
    mov_eax, %4000
    pop_ebx               # >=sfv
    cmp_eax_ebx
    setge_al
    movzx_eax,al
    test_eax,eax          # if
    pop_eax
    je %_main_else35
# stack_c.c 638
# stack_c.c 639
    push_eax              # ferr (global)
    mov_eax, &g_ferr
    mov_eax,[eax]         # ?
    push_eax              # 'ERROR %d.%d: More than %d variables\n'
    mov_eax, &string_30
    push_eax              # __var_args (local)
    lea_eax,[ebp+DWORD] %80
    push_eax              # cur_line (global)
    mov_eax, &g_cur_line
    mov_eax,[eax]         # ?
    pop_ebx               # =
    mov_[ebx],eax
    pop_eax               # ;
    push_eax              # __var_args (local)
    lea_eax,[ebp+DWORD] %80
    push_eax              # 4
    mov_eax, %4
    pop_ebx               # +
    add_eax,ebx
    push_eax              # cur_column (global)
    mov_eax, &g_cur_column
    mov_eax,[eax]         # ?
    pop_ebx               # =
    mov_[ebx],eax
    pop_eax               # ;
    push_eax              # __var_args (local)
    lea_eax,[ebp+DWORD] %80
    push_eax              # 8
    mov_eax, %8
    pop_ebx               # +
    add_eax,ebx
    push_eax              # 4000
    mov_eax, %4000
    pop_ebx               # =
    mov_[ebx],eax
    pop_eax               # ;
    push_eax              # __var_args (local)
    lea_eax,[ebp+DWORD] %80
    push_eax              # fprintf (function)
    mov_eax, &f_fprintf
    add_ebp, %92         # ()
    call_eax
    sub_ebp, %92
    pop_eax               # ;
# stack_c.c 640
    push_eax              # 1
    mov_eax, %1
    mov_ebx,[ebp]         # return
    push_ebx
    ret
# stack_c.c 642
:_main_else35 # no else
    push_eax              # nr_statics (global)
    mov_eax, &g_nr_statics
    mov_eax,[eax]         # ?
    push_eax              # 10
    mov_eax, %10
    pop_ebx               # >=sfv
    cmp_eax_ebx
    setge_al
    movzx_eax,al
    test_eax,eax          # if
    pop_eax
    je %_main_else36
# stack_c.c 643
# stack_c.c 644
    push_eax              # ferr (global)
    mov_eax, &g_ferr
    mov_eax,[eax]         # ?
    push_eax              # 'ERROR %d.%d: More than %d variables\n'
    mov_eax, &string_30
    push_eax              # __var_args (local)
    lea_eax,[ebp+DWORD] %80
    push_eax              # cur_line (global)
    mov_eax, &g_cur_line
    mov_eax,[eax]         # ?
    pop_ebx               # =
    mov_[ebx],eax
    pop_eax               # ;
    push_eax              # __var_args (local)
    lea_eax,[ebp+DWORD] %80
    push_eax              # 4
    mov_eax, %4
    pop_ebx               # +
    add_eax,ebx
    push_eax              # cur_column (global)
    mov_eax, &g_cur_column
    mov_eax,[eax]         # ?
    pop_ebx               # =
    mov_[ebx],eax
    pop_eax               # ;
    push_eax              # __var_args (local)
    lea_eax,[ebp+DWORD] %80
    push_eax              # 8
    mov_eax, %8
    pop_ebx               # +
    add_eax,ebx
    push_eax              # 10
    mov_eax, %10
    pop_ebx               # =
    mov_[ebx],eax
    pop_eax               # ;
    push_eax              # __var_args (local)
    lea_eax,[ebp+DWORD] %80
    push_eax              # fprintf (function)
    mov_eax, &f_fprintf
    add_ebp, %92         # ()
    call_eax
    sub_ebp, %92
    pop_eax               # ;
# stack_c.c 645
    push_eax              # 1
    mov_eax, %1
    mov_ebx,[ebp]         # return
    push_ebx
    ret
# stack_c.c 647
:_main_else36 # no else
    push_eax              # idents (global)
    mov_eax, &g_idents
    push_eax              # nr_idents (global)
    mov_eax, &g_nr_idents
    mov_eax,[eax]         # ?
    push_eax              # 68
    mov_eax, %68
    pop_ebx               # *
    mul_ebx
    pop_ebx               # +
    add_eax,ebx
    push_eax              # 0 (const s7_m_type)
    mov_eax, %0
    pop_ebx               # +
    add_eax,ebx
    push_eax              # type (local)
    lea_eax,[ebp+DWORD] %72
    mov_al,[eax]          # ?1
    movzx_eax,al
    movsx_eax,al          # char
    pop_ebx               # =1
    mov_[ebx],al
    pop_eax               # ;
# stack_c.c 648
    push_eax              # idents (global)
    mov_eax, &g_idents
    push_eax              # nr_idents (global)
    mov_eax, &g_nr_idents
    mov_eax,[eax]         # ?
    push_eax              # 68
    mov_eax, %68
    pop_ebx               # *
    mul_ebx
    pop_ebx               # +
    add_eax,ebx
    push_eax              # 4 (const s7_m_name)
    mov_eax, %4
    pop_ebx               # +
    add_eax,ebx
    push_eax              # token (global)
    mov_eax, &g_token
    push_eax              # strcpy (function)
    mov_eax, &f_strcpy
    add_ebp, %80         # ()
    call_eax
    sub_ebp, %80
    pop_eax               # ;
# stack_c.c 649
    push_eax              # idents (global)
    mov_eax, &g_idents
    push_eax              # nr_idents (global)
    mov_eax, &g_nr_idents
    mov_eax,[eax]         # ?
    push_eax              # 68
    mov_eax, %68
    pop_ebx               # *
    mul_ebx
    pop_ebx               # +
    add_eax,ebx
    push_eax              # 60 (const s7_m_size)
    mov_eax, %60
    pop_ebx               # +
    add_eax,ebx
    push_eax              # size (local)
    lea_eax,[ebp+DWORD] %76
    mov_eax,[eax]         # ?
    pop_ebx               # =
    mov_[ebx],eax
    pop_eax               # ;
# stack_c.c 650
    push_eax              # type (local)
    lea_eax,[ebp+DWORD] %72
    mov_al,[eax]          # ?1
    movzx_eax,al
    movsx_eax,al          # char
    push_eax              # 83
    mov_eax, %83
    pop_ebx               # ==
    cmp_eax_ebx
    sete_al
    movzx_eax,al
    test_eax,eax          # if
    pop_eax
    je %_main_else37
# stack_c.c 651
# stack_c.c 652
    push_eax              # statics (global)
    mov_eax, &g_statics
    push_eax              # nr_statics (global)
    mov_eax, &g_nr_statics
    mov_eax,[eax]         # ?
    push_eax              # 56
    mov_eax, %56
    pop_ebx               # *
    mul_ebx
    pop_ebx               # +
    add_eax,ebx
    push_eax              # 0 (const s8_m_name)
    mov_eax, %0
    pop_ebx               # +
    add_eax,ebx
    push_eax              # token (global)
    mov_eax, &g_token
    push_eax              # strcpy (function)
    mov_eax, &f_strcpy
    add_ebp, %80         # ()
    call_eax
    sub_ebp, %80
    pop_eax               # ;
# stack_c.c 653
    push_eax              # statics (global)
    mov_eax, &g_statics
    push_eax              # nr_statics (global)
    mov_eax, &g_nr_statics
    mov_eax,[eax]         # ?
    push_eax              # 56
    mov_eax, %56
    pop_ebx               # *
    mul_ebx
    pop_ebx               # +
    add_eax,ebx
    push_eax              # 52 (const s8_m_size)
    mov_eax, %52
    pop_ebx               # +
    add_eax,ebx
    push_eax              # size (local)
    lea_eax,[ebp+DWORD] %76
    mov_eax,[eax]         # ?
    pop_ebx               # =
    mov_[ebx],eax
    pop_eax               # ;
# stack_c.c 654
    push_eax              # idents (global)
    mov_eax, &g_idents
    push_eax              # nr_idents (global)
    mov_eax, &g_nr_idents
    mov_eax,[eax]         # ?
    push_eax              # 68
    mov_eax, %68
    pop_ebx               # *
    mul_ebx
    pop_ebx               # +
    add_eax,ebx
    push_eax              # 64 (const s7_m_value)
    mov_eax, %64
    pop_ebx               # +
    add_eax,ebx
    push_eax              # nr_statics (global)
    mov_eax, &g_nr_statics
    mov_eax,[eax]         # ?
    pop_ebx               # =
    mov_[ebx],eax
    pop_eax               # ;
# stack_c.c 655
    push_eax              # nr_statics (global)
    mov_eax, &g_nr_statics
    push_eax              # $ (dup)
    mov_eax,[eax]         # ?
    push_eax              # 1
    mov_eax, %1
    pop_ebx               # +
    add_eax,ebx
    pop_ebx               # =
    mov_[ebx],eax
    push_eax              # 1
    mov_eax, %1
    pop_ebx               # -
    sub_ebx,eax
    mov_eax,ebx
    pop_eax               # ;
    jmp %_main_else_end37
:_main_else37
# stack_c.c 657
    push_eax              # nesting_depth (global)
    mov_eax, &g_nesting_depth
    mov_eax,[eax]         # ?
    push_eax              # 0
    mov_eax, %0
    pop_ebx               # >s
    cmp_eax_ebx
    setg_al
    movzx_eax,al
    test_eax,eax          # if
    pop_eax
    je %_main_else38
# stack_c.c 658
# stack_c.c 659
    push_eax              # idents (global)
    mov_eax, &g_idents
    push_eax              # nr_idents (global)
    mov_eax, &g_nr_idents
    mov_eax,[eax]         # ?
    push_eax              # 68
    mov_eax, %68
    pop_ebx               # *
    mul_ebx
    pop_ebx               # +
    add_eax,ebx
    push_eax              # 56 (const s7_m_pos)
    mov_eax, %56
    pop_ebx               # +
    add_eax,ebx
    push_eax              # pos (global)
    mov_eax, &g_pos
    mov_eax,[eax]         # ?
    pop_ebx               # =
    mov_[ebx],eax
    pop_eax               # ;
# stack_c.c 660
    push_eax              # pos (global)
    mov_eax, &g_pos
    push_eax              # $ (dup)
    mov_eax,[eax]         # ?
    push_eax              # size (local)
    lea_eax,[ebp+DWORD] %76
    mov_eax,[eax]         # ?
    pop_ebx               # +
    add_eax,ebx
    pop_ebx               # =
    mov_[ebx],eax
    pop_eax               # ;
:_main_else38 # no else
:_main_else_end37
# stack_c.c 662
    push_eax              # nr_idents (global)
    mov_eax, &g_nr_idents
    push_eax              # $ (dup)
    mov_eax,[eax]         # ?
    push_eax              # 1
    mov_eax, %1
    pop_ebx               # +
    add_eax,ebx
    pop_ebx               # =
    mov_[ebx],eax
    push_eax              # 1
    mov_eax, %1
    pop_ebx               # -
    sub_ebx,eax
    mov_eax,ebx
    pop_eax               # ;
    jmp %_main_else_end30
:_main_else30
# stack_c.c 664
    push_eax              # sym (global)
    mov_eax, &g_sym
    mov_al,[eax]          # ?1
    movzx_eax,al
    movsx_eax,al          # char
    push_eax              # 76
    mov_eax, %76
    pop_ebx               # ==
    cmp_eax_ebx
    sete_al
    movzx_eax,al
    test_eax,eax          # if
    pop_eax
    je %_main_else39
# stack_c.c 665
# stack_c.c 666
    push_eax              # get_token (function)
    mov_eax, &f_get_token
    add_ebp, %72         # ()
    call_eax
    sub_ebp, %72
    pop_eax               # ;
# stack_c.c 667
    push_eax              # sym (global)
    mov_eax, &g_sym
    mov_al,[eax]          # ?1
    movzx_eax,al
    movsx_eax,al          # char
    push_eax              # 123
    mov_eax, %123
    pop_ebx               # !=
    cmp_eax_ebx
    setne_al
    movzx_eax,al
    test_eax,eax          # if
    pop_eax
    je %_main_else40
# stack_c.c 668
# stack_c.c 669
    push_eax              # ferr (global)
    mov_eax, &g_ferr
    mov_eax,[eax]         # ?
    push_eax              # 'ERROR %d.%d: expecting '{' after 'do'\n'
    mov_eax, &string_36
    push_eax              # __var_args (local)
    lea_eax,[ebp+DWORD] %72
    push_eax              # cur_line (global)
    mov_eax, &g_cur_line
    mov_eax,[eax]         # ?
    pop_ebx               # =
    mov_[ebx],eax
    pop_eax               # ;
    push_eax              # __var_args (local)
    lea_eax,[ebp+DWORD] %72
    push_eax              # 4
    mov_eax, %4
    pop_ebx               # +
    add_eax,ebx
    push_eax              # cur_column (global)
    mov_eax, &g_cur_column
    mov_eax,[eax]         # ?
    pop_ebx               # =
    mov_[ebx],eax
    pop_eax               # ;
    push_eax              # __var_args (local)
    lea_eax,[ebp+DWORD] %72
    push_eax              # fprintf (function)
    mov_eax, &f_fprintf
    add_ebp, %80         # ()
    call_eax
    sub_ebp, %80
    pop_eax               # ;
# stack_c.c 670
    push_eax              # 1
    mov_eax, %1
    mov_ebx,[ebp]         # return
    push_ebx
    ret
# stack_c.c 672
:_main_else40 # no else
    push_eax              # fout (global)
    mov_eax, &g_fout
    mov_eax,[eax]         # ?
    push_eax              # ':_%s_loop%d\n'
    mov_eax, &string_37
    push_eax              # __var_args (local)
    lea_eax,[ebp+DWORD] %72
    push_eax              # function_name (local)
    lea_eax,[ebp+DWORD] %20
    pop_ebx               # =
    mov_[ebx],eax
    pop_eax               # ;
    push_eax              # __var_args (local)
    lea_eax,[ebp+DWORD] %72
    push_eax              # 4
    mov_eax, %4
    pop_ebx               # +
    add_eax,ebx
    push_eax              # id (local)
    lea_eax,[ebp+DWORD] %16
    mov_eax,[eax]         # ?
    pop_ebx               # =
    mov_[ebx],eax
    pop_eax               # ;
    push_eax              # __var_args (local)
    lea_eax,[ebp+DWORD] %72
    push_eax              # fprintf (function)
    mov_eax, &f_fprintf
    add_ebp, %80         # ()
    call_eax
    sub_ebp, %80
    pop_eax               # ;
# stack_c.c 673
    push_eax              # nesting_depth (global)
    mov_eax, &g_nesting_depth
    mov_eax,[eax]         # ?
    push_eax              # 100
    mov_eax, %100
    pop_ebx               # >=sfv
    cmp_eax_ebx
    setge_al
    movzx_eax,al
    test_eax,eax          # if
    pop_eax
    je %_main_else41
# stack_c.c 674
# stack_c.c 675
    push_eax              # ferr (global)
    mov_eax, &g_ferr
    mov_eax,[eax]         # ?
    push_eax              # 'ERROR %d.%d: Nesting deeper than %d\n'
    mov_eax, &string_38
    push_eax              # __var_args (local)
    lea_eax,[ebp+DWORD] %72
    push_eax              # cur_line (global)
    mov_eax, &g_cur_line
    mov_eax,[eax]         # ?
    pop_ebx               # =
    mov_[ebx],eax
    pop_eax               # ;
    push_eax              # __var_args (local)
    lea_eax,[ebp+DWORD] %72
    push_eax              # 4
    mov_eax, %4
    pop_ebx               # +
    add_eax,ebx
    push_eax              # cur_column (global)
    mov_eax, &g_cur_column
    mov_eax,[eax]         # ?
    pop_ebx               # =
    mov_[ebx],eax
    pop_eax               # ;
    push_eax              # __var_args (local)
    lea_eax,[ebp+DWORD] %72
    push_eax              # 8
    mov_eax, %8
    pop_ebx               # +
    add_eax,ebx
    push_eax              # 100
    mov_eax, %100
    pop_ebx               # =
    mov_[ebx],eax
    pop_eax               # ;
    push_eax              # __var_args (local)
    lea_eax,[ebp+DWORD] %72
    push_eax              # fprintf (function)
    mov_eax, &f_fprintf
    add_ebp, %84         # ()
    call_eax
    sub_ebp, %84
    pop_eax               # ;
# stack_c.c 676
    push_eax              # 1
    mov_eax, %1
    mov_ebx,[ebp]         # return
    push_ebx
    ret
# stack_c.c 678
:_main_else41 # no else
    push_eax              # nesting_type (global)
    mov_eax, &g_nesting_type
    push_eax              # nesting_depth (global)
    mov_eax, &g_nesting_depth
    mov_eax,[eax]         # ?
    pop_ebx               # +
    add_eax,ebx
    push_eax              # 76
    mov_eax, %76
    pop_ebx               # =1
    mov_[ebx],al
    pop_eax               # ;
# stack_c.c 679
    push_eax              # nesting_id (global)
    mov_eax, &g_nesting_id
    push_eax              # nesting_depth (global)
    mov_eax, &g_nesting_depth
    mov_eax,[eax]         # ?
    push_eax              # 4
    mov_eax, %4
    pop_ebx               # *
    mul_ebx
    pop_ebx               # +
    add_eax,ebx
    push_eax              # id (local)
    lea_eax,[ebp+DWORD] %16
    push_eax              # $ (dup)
    mov_eax,[eax]         # ?
    push_eax              # 1
    mov_eax, %1
    pop_ebx               # +
    add_eax,ebx
    pop_ebx               # =
    mov_[ebx],eax
    push_eax              # 1
    mov_eax, %1
    pop_ebx               # -
    sub_ebx,eax
    mov_eax,ebx
    pop_ebx               # =
    mov_[ebx],eax
    pop_eax               # ;
# stack_c.c 680
    push_eax              # nesting_nr_vars (global)
    mov_eax, &g_nesting_nr_vars
    push_eax              # nesting_depth (global)
    mov_eax, &g_nesting_depth
    mov_eax,[eax]         # ?
    push_eax              # 4
    mov_eax, %4
    pop_ebx               # *
    mul_ebx
    pop_ebx               # +
    add_eax,ebx
    push_eax              # nr_idents (global)
    mov_eax, &g_nr_idents
    mov_eax,[eax]         # ?
    pop_ebx               # =
    mov_[ebx],eax
    pop_eax               # ;
# stack_c.c 681
    push_eax              # nesting_pos (global)
    mov_eax, &g_nesting_pos
    push_eax              # nesting_depth (global)
    mov_eax, &g_nesting_depth
    mov_eax,[eax]         # ?
    push_eax              # 4
    mov_eax, %4
    pop_ebx               # *
    mul_ebx
    pop_ebx               # +
    add_eax,ebx
    push_eax              # pos (global)
    mov_eax, &g_pos
    mov_eax,[eax]         # ?
    pop_ebx               # =
    mov_[ebx],eax
    pop_eax               # ;
# stack_c.c 682
    push_eax              # nesting_depth (global)
    mov_eax, &g_nesting_depth
    push_eax              # $ (dup)
    mov_eax,[eax]         # ?
    push_eax              # 1
    mov_eax, %1
    pop_ebx               # +
    add_eax,ebx
    pop_ebx               # =
    mov_[ebx],eax
    push_eax              # 1
    mov_eax, %1
    pop_ebx               # -
    sub_ebx,eax
    mov_eax,ebx
    pop_eax               # ;
    jmp %_main_else_end39
:_main_else39
# stack_c.c 684
    push_eax              # sym (global)
    mov_eax, &g_sym
    mov_al,[eax]          # ?1
    movzx_eax,al
    movsx_eax,al          # char
    push_eax              # 66
    mov_eax, %66
    pop_ebx               # ==
    cmp_eax_ebx
    sete_al
    movzx_eax,al
    test_eax,eax          # ||
    jne %_main_or_end42
    pop_eax
    push_eax              # sym (global)
    mov_eax, &g_sym
    mov_al,[eax]          # ?1
    movzx_eax,al
    movsx_eax,al          # char
    push_eax              # 68
    mov_eax, %68
    pop_ebx               # ==
    cmp_eax_ebx
    sete_al
    movzx_eax,al
:_main_or_end42
    test_eax,eax          # if
    pop_eax
    je %_main_else43
# stack_c.c 685
    push_eax              # i (local)
    lea_eax,[ebp+DWORD] %72
    push_eax              # nesting_depth (global)
    mov_eax, &g_nesting_depth
    mov_eax,[eax]         # ?
    push_eax              # 1
    mov_eax, %1
    pop_ebx               # -
    sub_ebx,eax
    mov_eax,ebx
    pop_ebx               # =
    mov_[ebx],eax
    pop_eax               # ;
# stack_c.c 687
:_main_loop44
    push_eax              # i (local)
    lea_eax,[ebp+DWORD] %72
    mov_eax,[eax]         # ?
    push_eax              # 0
    mov_eax, %0
    pop_ebx               # >=sfv
    cmp_eax_ebx
    setge_al
    movzx_eax,al
    test_eax,eax          # !
    sete_al
    movzx_eax,al
    test_eax,eax          # if
    pop_eax
    je %_main_else45
    jmp %_main_loop_end44
# stack_c.c 688
:_main_else45 # no else
    push_eax              # nesting_type (global)
    mov_eax, &g_nesting_type
    push_eax              # i (local)
    lea_eax,[ebp+DWORD] %72
    mov_eax,[eax]         # ?
    pop_ebx               # +
    add_eax,ebx
    mov_al,[eax]          # ?1
    movzx_eax,al
    movsx_eax,al          # char
    push_eax              # 76
    mov_eax, %76
    pop_ebx               # ==
    cmp_eax_ebx
    sete_al
    movzx_eax,al
    test_eax,eax          # if
    pop_eax
    je %_main_else46
# stack_c.c 689
    jmp %_main_loop_end44
:_main_else46 # no else
    push_eax              # i (local)
    lea_eax,[ebp+DWORD] %72
    push_eax              # $ (dup)
    mov_eax,[eax]         # ?
    push_eax              # 1
    mov_eax, %1
    pop_ebx               # -
    sub_ebx,eax
    mov_eax,ebx
    pop_ebx               # =
    mov_[ebx],eax
    push_eax              # 1
    mov_eax, %1
    pop_ebx               # +
    add_eax,ebx
    pop_eax               # ;
    jmp %_main_loop44
:_main_loop_end44
# stack_c.c 690
    push_eax              # i (local)
    lea_eax,[ebp+DWORD] %72
    mov_eax,[eax]         # ?
    push_eax              # 0
    mov_eax, %0
    pop_ebx               # <s
    cmp_eax_ebx
    setl_al
    movzx_eax,al
    test_eax,eax          # if
    pop_eax
    je %_main_else47
# stack_c.c 691
# stack_c.c 692
    push_eax              # ferr (global)
    mov_eax, &g_ferr
    mov_eax,[eax]         # ?
    push_eax              # 'ERROR %d.%d: 'break' outside 'loop'\n'
    mov_eax, &string_39
    push_eax              # __var_args (local)
    lea_eax,[ebp+DWORD] %76
    push_eax              # cur_line (global)
    mov_eax, &g_cur_line
    mov_eax,[eax]         # ?
    pop_ebx               # =
    mov_[ebx],eax
    pop_eax               # ;
    push_eax              # __var_args (local)
    lea_eax,[ebp+DWORD] %76
    push_eax              # 4
    mov_eax, %4
    pop_ebx               # +
    add_eax,ebx
    push_eax              # cur_column (global)
    mov_eax, &g_cur_column
    mov_eax,[eax]         # ?
    pop_ebx               # =
    mov_[ebx],eax
    pop_eax               # ;
    push_eax              # __var_args (local)
    lea_eax,[ebp+DWORD] %76
    push_eax              # fprintf (function)
    mov_eax, &f_fprintf
    add_ebp, %84         # ()
    call_eax
    sub_ebp, %84
    pop_eax               # ;
# stack_c.c 693
    push_eax              # 1
    mov_eax, %1
    mov_ebx,[ebp]         # return
    push_ebx
    ret
# stack_c.c 695
:_main_else47 # no else
    push_eax              # sym (global)
    mov_eax, &g_sym
    mov_al,[eax]          # ?1
    movzx_eax,al
    movsx_eax,al          # char
    push_eax              # 66
    mov_eax, %66
    pop_ebx               # ==
    cmp_eax_ebx
    sete_al
    movzx_eax,al
    test_eax,eax          # if
    pop_eax
    je %_main_else48
# stack_c.c 696
    push_eax              # fout (global)
    mov_eax, &g_fout
    mov_eax,[eax]         # ?
    push_eax              # '\tjmp %%_%s_loop_end%d\n'
    mov_eax, &string_40
    push_eax              # __var_args (local)
    lea_eax,[ebp+DWORD] %76
    push_eax              # function_name (local)
    lea_eax,[ebp+DWORD] %20
    pop_ebx               # =
    mov_[ebx],eax
    pop_eax               # ;
    push_eax              # __var_args (local)
    lea_eax,[ebp+DWORD] %76
    push_eax              # 4
    mov_eax, %4
    pop_ebx               # +
    add_eax,ebx
    push_eax              # nesting_id (global)
    mov_eax, &g_nesting_id
    push_eax              # i (local)
    lea_eax,[ebp+DWORD] %72
    mov_eax,[eax]         # ?
    push_eax              # 4
    mov_eax, %4
    pop_ebx               # *
    mul_ebx
    pop_ebx               # +
    add_eax,ebx
    mov_eax,[eax]         # ?
    pop_ebx               # =
    mov_[ebx],eax
    pop_eax               # ;
    push_eax              # __var_args (local)
    lea_eax,[ebp+DWORD] %76
    push_eax              # fprintf (function)
    mov_eax, &f_fprintf
    add_ebp, %84         # ()
    call_eax
    sub_ebp, %84
    pop_eax               # ;
    jmp %_main_else_end48
:_main_else48
# stack_c.c 698
    push_eax              # fout (global)
    mov_eax, &g_fout
    mov_eax,[eax]         # ?
    push_eax              # '\tjmp %%_%s_loop%d\n'
    mov_eax, &string_41
    push_eax              # __var_args (local)
    lea_eax,[ebp+DWORD] %76
    push_eax              # function_name (local)
    lea_eax,[ebp+DWORD] %20
    pop_ebx               # =
    mov_[ebx],eax
    pop_eax               # ;
    push_eax              # __var_args (local)
    lea_eax,[ebp+DWORD] %76
    push_eax              # 4
    mov_eax, %4
    pop_ebx               # +
    add_eax,ebx
    push_eax              # nesting_id (global)
    mov_eax, &g_nesting_id
    push_eax              # i (local)
    lea_eax,[ebp+DWORD] %72
    mov_eax,[eax]         # ?
    push_eax              # 4
    mov_eax, %4
    pop_ebx               # *
    mul_ebx
    pop_ebx               # +
    add_eax,ebx
    mov_eax,[eax]         # ?
    pop_ebx               # =
    mov_[ebx],eax
    pop_eax               # ;
    push_eax              # __var_args (local)
    lea_eax,[ebp+DWORD] %76
    push_eax              # fprintf (function)
    mov_eax, &f_fprintf
    add_ebp, %84         # ()
    call_eax
    sub_ebp, %84
    pop_eax               # ;
:_main_else_end48
    jmp %_main_else_end43
:_main_else43
# stack_c.c 700
    push_eax              # sym (global)
    mov_eax, &g_sym
    mov_al,[eax]          # ?1
    movzx_eax,al
    movsx_eax,al          # char
    push_eax              # 73
    mov_eax, %73
    pop_ebx               # ==
    cmp_eax_ebx
    sete_al
    movzx_eax,al
    test_eax,eax          # if
    pop_eax
    je %_main_else49
# stack_c.c 701
# stack_c.c 702
    push_eax              # get_token (function)
    mov_eax, &f_get_token
    add_ebp, %72         # ()
    call_eax
    sub_ebp, %72
    pop_eax               # ;
# stack_c.c 703
    push_eax              # sym (global)
    mov_eax, &g_sym
    mov_al,[eax]          # ?1
    movzx_eax,al
    movsx_eax,al          # char
    push_eax              # 123
    mov_eax, %123
    pop_ebx               # !=
    cmp_eax_ebx
    setne_al
    movzx_eax,al
    test_eax,eax          # if
    pop_eax
    je %_main_else50
# stack_c.c 704
# stack_c.c 705
    push_eax              # ferr (global)
    mov_eax, &g_ferr
    mov_eax,[eax]         # ?
    push_eax              # 'ERROR %d.%d: expecting '{' after 'if'\n'
    mov_eax, &string_42
    push_eax              # __var_args (local)
    lea_eax,[ebp+DWORD] %72
    push_eax              # cur_line (global)
    mov_eax, &g_cur_line
    mov_eax,[eax]         # ?
    pop_ebx               # =
    mov_[ebx],eax
    pop_eax               # ;
    push_eax              # __var_args (local)
    lea_eax,[ebp+DWORD] %72
    push_eax              # 4
    mov_eax, %4
    pop_ebx               # +
    add_eax,ebx
    push_eax              # cur_column (global)
    mov_eax, &g_cur_column
    mov_eax,[eax]         # ?
    pop_ebx               # =
    mov_[ebx],eax
    pop_eax               # ;
    push_eax              # __var_args (local)
    lea_eax,[ebp+DWORD] %72
    push_eax              # fprintf (function)
    mov_eax, &f_fprintf
    add_ebp, %80         # ()
    call_eax
    sub_ebp, %80
    pop_eax               # ;
# stack_c.c 706
    push_eax              # 1
    mov_eax, %1
    mov_ebx,[ebp]         # return
    push_ebx
    ret
# stack_c.c 708
:_main_else50 # no else
    push_eax              # fout (global)
    mov_eax, &g_fout
    mov_eax,[eax]         # ?
    push_eax              # '\ttest_eax,eax          # if\n\tpop_eax\n\tje %%_%s_else%d\n'
    mov_eax, &string_43
    push_eax              # __var_args (local)
    lea_eax,[ebp+DWORD] %72
    push_eax              # function_name (local)
    lea_eax,[ebp+DWORD] %20
    pop_ebx               # =
    mov_[ebx],eax
    pop_eax               # ;
    push_eax              # __var_args (local)
    lea_eax,[ebp+DWORD] %72
    push_eax              # 4
    mov_eax, %4
    pop_ebx               # +
    add_eax,ebx
    push_eax              # id (local)
    lea_eax,[ebp+DWORD] %16
    mov_eax,[eax]         # ?
    pop_ebx               # =
    mov_[ebx],eax
    pop_eax               # ;
    push_eax              # __var_args (local)
    lea_eax,[ebp+DWORD] %72
    push_eax              # fprintf (function)
    mov_eax, &f_fprintf
    add_ebp, %80         # ()
    call_eax
    sub_ebp, %80
    pop_eax               # ;
# stack_c.c 709
    push_eax              # nesting_depth (global)
    mov_eax, &g_nesting_depth
    mov_eax,[eax]         # ?
    push_eax              # 100
    mov_eax, %100
    pop_ebx               # >=sfv
    cmp_eax_ebx
    setge_al
    movzx_eax,al
    test_eax,eax          # if
    pop_eax
    je %_main_else51
# stack_c.c 710
# stack_c.c 711
    push_eax              # ferr (global)
    mov_eax, &g_ferr
    mov_eax,[eax]         # ?
    push_eax              # 'ERROR %d.%d: Nesting deeper than %d\n'
    mov_eax, &string_38
    push_eax              # __var_args (local)
    lea_eax,[ebp+DWORD] %72
    push_eax              # cur_line (global)
    mov_eax, &g_cur_line
    mov_eax,[eax]         # ?
    pop_ebx               # =
    mov_[ebx],eax
    pop_eax               # ;
    push_eax              # __var_args (local)
    lea_eax,[ebp+DWORD] %72
    push_eax              # 4
    mov_eax, %4
    pop_ebx               # +
    add_eax,ebx
    push_eax              # cur_column (global)
    mov_eax, &g_cur_column
    mov_eax,[eax]         # ?
    pop_ebx               # =
    mov_[ebx],eax
    pop_eax               # ;
    push_eax              # __var_args (local)
    lea_eax,[ebp+DWORD] %72
    push_eax              # 8
    mov_eax, %8
    pop_ebx               # +
    add_eax,ebx
    push_eax              # 100
    mov_eax, %100
    pop_ebx               # =
    mov_[ebx],eax
    pop_eax               # ;
    push_eax              # __var_args (local)
    lea_eax,[ebp+DWORD] %72
    push_eax              # fprintf (function)
    mov_eax, &f_fprintf
    add_ebp, %84         # ()
    call_eax
    sub_ebp, %84
    pop_eax               # ;
# stack_c.c 712
    push_eax              # 1
    mov_eax, %1
    mov_ebx,[ebp]         # return
    push_ebx
    ret
# stack_c.c 714
:_main_else51 # no else
    push_eax              # nesting_type (global)
    mov_eax, &g_nesting_type
    push_eax              # nesting_depth (global)
    mov_eax, &g_nesting_depth
    mov_eax,[eax]         # ?
    pop_ebx               # +
    add_eax,ebx
    push_eax              # 73
    mov_eax, %73
    pop_ebx               # =1
    mov_[ebx],al
    pop_eax               # ;
# stack_c.c 715
    push_eax              # nesting_id (global)
    mov_eax, &g_nesting_id
    push_eax              # nesting_depth (global)
    mov_eax, &g_nesting_depth
    mov_eax,[eax]         # ?
    push_eax              # 4
    mov_eax, %4
    pop_ebx               # *
    mul_ebx
    pop_ebx               # +
    add_eax,ebx
    push_eax              # id (local)
    lea_eax,[ebp+DWORD] %16
    push_eax              # $ (dup)
    mov_eax,[eax]         # ?
    push_eax              # 1
    mov_eax, %1
    pop_ebx               # +
    add_eax,ebx
    pop_ebx               # =
    mov_[ebx],eax
    push_eax              # 1
    mov_eax, %1
    pop_ebx               # -
    sub_ebx,eax
    mov_eax,ebx
    pop_ebx               # =
    mov_[ebx],eax
    pop_eax               # ;
# stack_c.c 716
    push_eax              # nesting_nr_vars (global)
    mov_eax, &g_nesting_nr_vars
    push_eax              # nesting_depth (global)
    mov_eax, &g_nesting_depth
    mov_eax,[eax]         # ?
    push_eax              # 4
    mov_eax, %4
    pop_ebx               # *
    mul_ebx
    pop_ebx               # +
    add_eax,ebx
    push_eax              # nr_idents (global)
    mov_eax, &g_nr_idents
    mov_eax,[eax]         # ?
    pop_ebx               # =
    mov_[ebx],eax
    pop_eax               # ;
# stack_c.c 717
    push_eax              # nesting_pos (global)
    mov_eax, &g_nesting_pos
    push_eax              # nesting_depth (global)
    mov_eax, &g_nesting_depth
    mov_eax,[eax]         # ?
    push_eax              # 4
    mov_eax, %4
    pop_ebx               # *
    mul_ebx
    pop_ebx               # +
    add_eax,ebx
    push_eax              # pos (global)
    mov_eax, &g_pos
    mov_eax,[eax]         # ?
    pop_ebx               # =
    mov_[ebx],eax
    pop_eax               # ;
# stack_c.c 718
    push_eax              # nesting_depth (global)
    mov_eax, &g_nesting_depth
    push_eax              # $ (dup)
    mov_eax,[eax]         # ?
    push_eax              # 1
    mov_eax, %1
    pop_ebx               # +
    add_eax,ebx
    pop_ebx               # =
    mov_[ebx],eax
    push_eax              # 1
    mov_eax, %1
    pop_ebx               # -
    sub_ebx,eax
    mov_eax,ebx
    pop_eax               # ;
    jmp %_main_else_end49
:_main_else49
# stack_c.c 720
    push_eax              # sym (global)
    mov_eax, &g_sym
    mov_al,[eax]          # ?1
    movzx_eax,al
    movsx_eax,al          # char
    push_eax              # 69
    mov_eax, %69
    pop_ebx               # ==
    cmp_eax_ebx
    sete_al
    movzx_eax,al
    test_eax,eax          # if
    pop_eax
    je %_main_else52
# stack_c.c 721
# stack_c.c 722
    push_eax              # ferr (global)
    mov_eax, &g_ferr
    mov_eax,[eax]         # ?
    push_eax              # 'ERROR %d.%d: unexpected 'else'\n'
    mov_eax, &string_44
    push_eax              # __var_args (local)
    lea_eax,[ebp+DWORD] %72
    push_eax              # cur_line (global)
    mov_eax, &g_cur_line
    mov_eax,[eax]         # ?
    pop_ebx               # =
    mov_[ebx],eax
    pop_eax               # ;
    push_eax              # __var_args (local)
    lea_eax,[ebp+DWORD] %72
    push_eax              # 4
    mov_eax, %4
    pop_ebx               # +
    add_eax,ebx
    push_eax              # cur_column (global)
    mov_eax, &g_cur_column
    mov_eax,[eax]         # ?
    pop_ebx               # =
    mov_[ebx],eax
    pop_eax               # ;
    push_eax              # __var_args (local)
    lea_eax,[ebp+DWORD] %72
    push_eax              # fprintf (function)
    mov_eax, &f_fprintf
    add_ebp, %80         # ()
    call_eax
    sub_ebp, %80
    pop_eax               # ;
# stack_c.c 723
    push_eax              # 1
    mov_eax, %1
    mov_ebx,[ebp]         # return
    push_ebx
    ret
    jmp %_main_else_end52
:_main_else52
# stack_c.c 725
    push_eax              # sym (global)
    mov_eax, &g_sym
    mov_al,[eax]          # ?1
    movzx_eax,al
    movsx_eax,al          # char
    push_eax              # 123
    mov_eax, %123
    pop_ebx               # ==
    cmp_eax_ebx
    sete_al
    movzx_eax,al
    test_eax,eax          # if
    pop_eax
    je %_main_else53
# stack_c.c 726
# stack_c.c 727
    push_eax              # nesting_type (global)
    mov_eax, &g_nesting_type
    push_eax              # nesting_depth (global)
    mov_eax, &g_nesting_depth
    mov_eax,[eax]         # ?
    pop_ebx               # +
    add_eax,ebx
    push_eax              # 32
    mov_eax, %32
    pop_ebx               # =1
    mov_[ebx],al
    pop_eax               # ;
# stack_c.c 728
    push_eax              # nesting_nr_vars (global)
    mov_eax, &g_nesting_nr_vars
    push_eax              # nesting_depth (global)
    mov_eax, &g_nesting_depth
    mov_eax,[eax]         # ?
    push_eax              # 4
    mov_eax, %4
    pop_ebx               # *
    mul_ebx
    pop_ebx               # +
    add_eax,ebx
    push_eax              # nr_idents (global)
    mov_eax, &g_nr_idents
    mov_eax,[eax]         # ?
    pop_ebx               # =
    mov_[ebx],eax
    pop_eax               # ;
# stack_c.c 729
    push_eax              # nesting_pos (global)
    mov_eax, &g_nesting_pos
    push_eax              # nesting_depth (global)
    mov_eax, &g_nesting_depth
    mov_eax,[eax]         # ?
    push_eax              # 4
    mov_eax, %4
    pop_ebx               # *
    mul_ebx
    pop_ebx               # +
    add_eax,ebx
    push_eax              # pos (global)
    mov_eax, &g_pos
    mov_eax,[eax]         # ?
    pop_ebx               # =
    mov_[ebx],eax
    pop_eax               # ;
# stack_c.c 730
    push_eax              # nesting_depth (global)
    mov_eax, &g_nesting_depth
    push_eax              # $ (dup)
    mov_eax,[eax]         # ?
    push_eax              # 1
    mov_eax, %1
    pop_ebx               # +
    add_eax,ebx
    pop_ebx               # =
    mov_[ebx],eax
    push_eax              # 1
    mov_eax, %1
    pop_ebx               # -
    sub_ebx,eax
    mov_eax,ebx
    pop_eax               # ;
    jmp %_main_else_end53
:_main_else53
# stack_c.c 732
    push_eax              # sym (global)
    mov_eax, &g_sym
    mov_al,[eax]          # ?1
    movzx_eax,al
    movsx_eax,al          # char
    push_eax              # 125
    mov_eax, %125
    pop_ebx               # ==
    cmp_eax_ebx
    sete_al
    movzx_eax,al
    test_eax,eax          # if
    pop_eax
    je %_main_else54
# stack_c.c 733
# stack_c.c 734
    push_eax              # nesting_depth (global)
    mov_eax, &g_nesting_depth
    mov_eax,[eax]         # ?
    push_eax              # 0
    mov_eax, %0
    pop_ebx               # ==
    cmp_eax_ebx
    sete_al
    movzx_eax,al
    test_eax,eax          # if
    pop_eax
    je %_main_else55
# stack_c.c 735
# stack_c.c 736
    push_eax              # ferr (global)
    mov_eax, &g_ferr
    mov_eax,[eax]         # ?
    push_eax              # 'ERROR %d.%d: To many }\n'
    mov_eax, &string_45
    push_eax              # __var_args (local)
    lea_eax,[ebp+DWORD] %72
    push_eax              # cur_line (global)
    mov_eax, &g_cur_line
    mov_eax,[eax]         # ?
    pop_ebx               # =
    mov_[ebx],eax
    pop_eax               # ;
    push_eax              # __var_args (local)
    lea_eax,[ebp+DWORD] %72
    push_eax              # 4
    mov_eax, %4
    pop_ebx               # +
    add_eax,ebx
    push_eax              # cur_column (global)
    mov_eax, &g_cur_column
    mov_eax,[eax]         # ?
    pop_ebx               # =
    mov_[ebx],eax
    pop_eax               # ;
    push_eax              # __var_args (local)
    lea_eax,[ebp+DWORD] %72
    push_eax              # fprintf (function)
    mov_eax, &f_fprintf
    add_ebp, %80         # ()
    call_eax
    sub_ebp, %80
    pop_eax               # ;
# stack_c.c 737
    push_eax              # 1
    mov_eax, %1
    mov_ebx,[ebp]         # return
    push_ebx
    ret
# stack_c.c 739
:_main_else55 # no else
    push_eax              # nesting_depth (global)
    mov_eax, &g_nesting_depth
    push_eax              # $ (dup)
    mov_eax,[eax]         # ?
    push_eax              # 1
    mov_eax, %1
    pop_ebx               # -
    sub_ebx,eax
    mov_eax,ebx
    pop_ebx               # =
    mov_[ebx],eax
    push_eax              # 1
    mov_eax, %1
    pop_ebx               # +
    add_eax,ebx
    pop_eax               # ;
# stack_c.c 740
    push_eax              # nr_idents (global)
    mov_eax, &g_nr_idents
    push_eax              # nesting_nr_vars (global)
    mov_eax, &g_nesting_nr_vars
    push_eax              # nesting_depth (global)
    mov_eax, &g_nesting_depth
    mov_eax,[eax]         # ?
    push_eax              # 4
    mov_eax, %4
    pop_ebx               # *
    mul_ebx
    pop_ebx               # +
    add_eax,ebx
    mov_eax,[eax]         # ?
    pop_ebx               # =
    mov_[ebx],eax
    pop_eax               # ;
# stack_c.c 741
    push_eax              # pos (global)
    mov_eax, &g_pos
    push_eax              # nesting_pos (global)
    mov_eax, &g_nesting_pos
    push_eax              # nesting_depth (global)
    mov_eax, &g_nesting_depth
    mov_eax,[eax]         # ?
    push_eax              # 4
    mov_eax, %4
    pop_ebx               # *
    mul_ebx
    pop_ebx               # +
    add_eax,ebx
    mov_eax,[eax]         # ?
    pop_ebx               # =
    mov_[ebx],eax
    pop_eax               # ;
# stack_c.c 742
    push_eax              # nesting_type (global)
    mov_eax, &g_nesting_type
    push_eax              # nesting_depth (global)
    mov_eax, &g_nesting_depth
    mov_eax,[eax]         # ?
    pop_ebx               # +
    add_eax,ebx
    mov_al,[eax]          # ?1
    movzx_eax,al
    movsx_eax,al          # char
    push_eax              # 76
    mov_eax, %76
    pop_ebx               # ==
    cmp_eax_ebx
    sete_al
    movzx_eax,al
    test_eax,eax          # if
    pop_eax
    je %_main_else56
# stack_c.c 743
    push_eax              # fout (global)
    mov_eax, &g_fout
    mov_eax,[eax]         # ?
    push_eax              # '\tjmp %%_%s_loop%d\n:_%s_loop_end%d\n'
    mov_eax, &string_46
    push_eax              # __var_args (local)
    lea_eax,[ebp+DWORD] %72
    push_eax              # function_name (local)
    lea_eax,[ebp+DWORD] %20
    pop_ebx               # =
    mov_[ebx],eax
    pop_eax               # ;
    push_eax              # __var_args (local)
    lea_eax,[ebp+DWORD] %72
    push_eax              # 4
    mov_eax, %4
    pop_ebx               # +
    add_eax,ebx
    push_eax              # nesting_id (global)
    mov_eax, &g_nesting_id
    push_eax              # nesting_depth (global)
    mov_eax, &g_nesting_depth
    mov_eax,[eax]         # ?
    push_eax              # 4
    mov_eax, %4
    pop_ebx               # *
    mul_ebx
    pop_ebx               # +
    add_eax,ebx
    mov_eax,[eax]         # ?
    pop_ebx               # =
    mov_[ebx],eax
    pop_eax               # ;
    push_eax              # __var_args (local)
    lea_eax,[ebp+DWORD] %72
    push_eax              # 8
    mov_eax, %8
    pop_ebx               # +
    add_eax,ebx
    push_eax              # function_name (local)
    lea_eax,[ebp+DWORD] %20
    pop_ebx               # =
    mov_[ebx],eax
    pop_eax               # ;
    push_eax              # __var_args (local)
    lea_eax,[ebp+DWORD] %72
    push_eax              # 12
    mov_eax, %12
    pop_ebx               # +
    add_eax,ebx
    push_eax              # nesting_id (global)
    mov_eax, &g_nesting_id
    push_eax              # nesting_depth (global)
    mov_eax, &g_nesting_depth
    mov_eax,[eax]         # ?
    push_eax              # 4
    mov_eax, %4
    pop_ebx               # *
    mul_ebx
    pop_ebx               # +
    add_eax,ebx
    mov_eax,[eax]         # ?
    pop_ebx               # =
    mov_[ebx],eax
    pop_eax               # ;
    push_eax              # __var_args (local)
    lea_eax,[ebp+DWORD] %72
    push_eax              # fprintf (function)
    mov_eax, &f_fprintf
    add_ebp, %88         # ()
    call_eax
    sub_ebp, %88
    pop_eax               # ;
    jmp %_main_else_end56
:_main_else56
# stack_c.c 744
    push_eax              # nesting_type (global)
    mov_eax, &g_nesting_type
    push_eax              # nesting_depth (global)
    mov_eax, &g_nesting_depth
    mov_eax,[eax]         # ?
    pop_ebx               # +
    add_eax,ebx
    mov_al,[eax]          # ?1
    movzx_eax,al
    movsx_eax,al          # char
    push_eax              # 73
    mov_eax, %73
    pop_ebx               # ==
    cmp_eax_ebx
    sete_al
    movzx_eax,al
    test_eax,eax          # if
    pop_eax
    je %_main_else57
# stack_c.c 745
# stack_c.c 746
    push_eax              # get_token (function)
    mov_eax, &f_get_token
    add_ebp, %72         # ()
    call_eax
    sub_ebp, %72
    pop_eax               # ;
# stack_c.c 747
    push_eax              # sym (global)
    mov_eax, &g_sym
    mov_al,[eax]          # ?1
    movzx_eax,al
    movsx_eax,al          # char
    push_eax              # 69
    mov_eax, %69
    pop_ebx               # ==
    cmp_eax_ebx
    sete_al
    movzx_eax,al
    test_eax,eax          # if
    pop_eax
    je %_main_else58
# stack_c.c 748
# stack_c.c 749
    push_eax              # get_token (function)
    mov_eax, &f_get_token
    add_ebp, %72         # ()
    call_eax
    sub_ebp, %72
    pop_eax               # ;
# stack_c.c 750
    push_eax              # sym (global)
    mov_eax, &g_sym
    mov_al,[eax]          # ?1
    movzx_eax,al
    movsx_eax,al          # char
    push_eax              # 123
    mov_eax, %123
    pop_ebx               # !=
    cmp_eax_ebx
    setne_al
    movzx_eax,al
    test_eax,eax          # if
    pop_eax
    je %_main_else59
# stack_c.c 751
# stack_c.c 752
    push_eax              # ferr (global)
    mov_eax, &g_ferr
    mov_eax,[eax]         # ?
    push_eax              # 'ERROR %d.%d: expecting '{' after 'else'\n'
    mov_eax, &string_47
    push_eax              # __var_args (local)
    lea_eax,[ebp+DWORD] %72
    push_eax              # cur_line (global)
    mov_eax, &g_cur_line
    mov_eax,[eax]         # ?
    pop_ebx               # =
    mov_[ebx],eax
    pop_eax               # ;
    push_eax              # __var_args (local)
    lea_eax,[ebp+DWORD] %72
    push_eax              # 4
    mov_eax, %4
    pop_ebx               # +
    add_eax,ebx
    push_eax              # cur_column (global)
    mov_eax, &g_cur_column
    mov_eax,[eax]         # ?
    pop_ebx               # =
    mov_[ebx],eax
    pop_eax               # ;
    push_eax              # __var_args (local)
    lea_eax,[ebp+DWORD] %72
    push_eax              # fprintf (function)
    mov_eax, &f_fprintf
    add_ebp, %80         # ()
    call_eax
    sub_ebp, %80
    pop_eax               # ;
# stack_c.c 753
    push_eax              # 1
    mov_eax, %1
    mov_ebx,[ebp]         # return
    push_ebx
    ret
# stack_c.c 755
:_main_else59 # no else
    push_eax              # fout (global)
    mov_eax, &g_fout
    mov_eax,[eax]         # ?
    push_eax              # '\tjmp %%_%s_else_end%d\n'
    mov_eax, &string_48
    push_eax              # __var_args (local)
    lea_eax,[ebp+DWORD] %72
    push_eax              # function_name (local)
    lea_eax,[ebp+DWORD] %20
    pop_ebx               # =
    mov_[ebx],eax
    pop_eax               # ;
    push_eax              # __var_args (local)
    lea_eax,[ebp+DWORD] %72
    push_eax              # 4
    mov_eax, %4
    pop_ebx               # +
    add_eax,ebx
    push_eax              # nesting_id (global)
    mov_eax, &g_nesting_id
    push_eax              # nesting_depth (global)
    mov_eax, &g_nesting_depth
    mov_eax,[eax]         # ?
    push_eax              # 4
    mov_eax, %4
    pop_ebx               # *
    mul_ebx
    pop_ebx               # +
    add_eax,ebx
    mov_eax,[eax]         # ?
    pop_ebx               # =
    mov_[ebx],eax
    pop_eax               # ;
    push_eax              # __var_args (local)
    lea_eax,[ebp+DWORD] %72
    push_eax              # fprintf (function)
    mov_eax, &f_fprintf
    add_ebp, %80         # ()
    call_eax
    sub_ebp, %80
    pop_eax               # ;
# stack_c.c 756
    push_eax              # fout (global)
    mov_eax, &g_fout
    mov_eax,[eax]         # ?
    push_eax              # ':_%s_else%d\n'
    mov_eax, &string_49
    push_eax              # __var_args (local)
    lea_eax,[ebp+DWORD] %72
    push_eax              # function_name (local)
    lea_eax,[ebp+DWORD] %20
    pop_ebx               # =
    mov_[ebx],eax
    pop_eax               # ;
    push_eax              # __var_args (local)
    lea_eax,[ebp+DWORD] %72
    push_eax              # 4
    mov_eax, %4
    pop_ebx               # +
    add_eax,ebx
    push_eax              # nesting_id (global)
    mov_eax, &g_nesting_id
    push_eax              # nesting_depth (global)
    mov_eax, &g_nesting_depth
    mov_eax,[eax]         # ?
    push_eax              # 4
    mov_eax, %4
    pop_ebx               # *
    mul_ebx
    pop_ebx               # +
    add_eax,ebx
    mov_eax,[eax]         # ?
    pop_ebx               # =
    mov_[ebx],eax
    pop_eax               # ;
    push_eax              # __var_args (local)
    lea_eax,[ebp+DWORD] %72
    push_eax              # fprintf (function)
    mov_eax, &f_fprintf
    add_ebp, %80         # ()
    call_eax
    sub_ebp, %80
    pop_eax               # ;
# stack_c.c 757
    push_eax              # nesting_depth (global)
    mov_eax, &g_nesting_depth
    mov_eax,[eax]         # ?
    push_eax              # 100
    mov_eax, %100
    pop_ebx               # >=sfv
    cmp_eax_ebx
    setge_al
    movzx_eax,al
    test_eax,eax          # if
    pop_eax
    je %_main_else60
# stack_c.c 758
# stack_c.c 759
    push_eax              # ferr (global)
    mov_eax, &g_ferr
    mov_eax,[eax]         # ?
    push_eax              # 'ERROR %d.%d: Nesting deeper than %d\n'
    mov_eax, &string_38
    push_eax              # __var_args (local)
    lea_eax,[ebp+DWORD] %72
    push_eax              # cur_line (global)
    mov_eax, &g_cur_line
    mov_eax,[eax]         # ?
    pop_ebx               # =
    mov_[ebx],eax
    pop_eax               # ;
    push_eax              # __var_args (local)
    lea_eax,[ebp+DWORD] %72
    push_eax              # 4
    mov_eax, %4
    pop_ebx               # +
    add_eax,ebx
    push_eax              # cur_column (global)
    mov_eax, &g_cur_column
    mov_eax,[eax]         # ?
    pop_ebx               # =
    mov_[ebx],eax
    pop_eax               # ;
    push_eax              # __var_args (local)
    lea_eax,[ebp+DWORD] %72
    push_eax              # 8
    mov_eax, %8
    pop_ebx               # +
    add_eax,ebx
    push_eax              # 100
    mov_eax, %100
    pop_ebx               # =
    mov_[ebx],eax
    pop_eax               # ;
    push_eax              # __var_args (local)
    lea_eax,[ebp+DWORD] %72
    push_eax              # fprintf (function)
    mov_eax, &f_fprintf
    add_ebp, %84         # ()
    call_eax
    sub_ebp, %84
    pop_eax               # ;
# stack_c.c 760
    push_eax              # 1
    mov_eax, %1
    mov_ebx,[ebp]         # return
    push_ebx
    ret
# stack_c.c 762
:_main_else60 # no else
    push_eax              # nesting_type (global)
    mov_eax, &g_nesting_type
    push_eax              # nesting_depth (global)
    mov_eax, &g_nesting_depth
    mov_eax,[eax]         # ?
    pop_ebx               # +
    add_eax,ebx
    push_eax              # 69
    mov_eax, %69
    pop_ebx               # =1
    mov_[ebx],al
    pop_eax               # ;
# stack_c.c 763
    push_eax              # nesting_nr_vars (global)
    mov_eax, &g_nesting_nr_vars
    push_eax              # nesting_depth (global)
    mov_eax, &g_nesting_depth
    mov_eax,[eax]         # ?
    push_eax              # 4
    mov_eax, %4
    pop_ebx               # *
    mul_ebx
    pop_ebx               # +
    add_eax,ebx
    push_eax              # nr_idents (global)
    mov_eax, &g_nr_idents
    mov_eax,[eax]         # ?
    pop_ebx               # =
    mov_[ebx],eax
    pop_eax               # ;
# stack_c.c 764
    push_eax              # nesting_pos (global)
    mov_eax, &g_nesting_pos
    push_eax              # nesting_depth (global)
    mov_eax, &g_nesting_depth
    mov_eax,[eax]         # ?
    push_eax              # 4
    mov_eax, %4
    pop_ebx               # *
    mul_ebx
    pop_ebx               # +
    add_eax,ebx
    push_eax              # pos (global)
    mov_eax, &g_pos
    mov_eax,[eax]         # ?
    pop_ebx               # =
    mov_[ebx],eax
    pop_eax               # ;
# stack_c.c 765
    push_eax              # nesting_depth (global)
    mov_eax, &g_nesting_depth
    push_eax              # $ (dup)
    mov_eax,[eax]         # ?
    push_eax              # 1
    mov_eax, %1
    pop_ebx               # +
    add_eax,ebx
    pop_ebx               # =
    mov_[ebx],eax
    push_eax              # 1
    mov_eax, %1
    pop_ebx               # -
    sub_ebx,eax
    mov_eax,ebx
    pop_eax               # ;
    jmp %_main_else_end58
:_main_else58
# stack_c.c 768
# stack_c.c 769
    push_eax              # fout (global)
    mov_eax, &g_fout
    mov_eax,[eax]         # ?
    push_eax              # ':_%s_else%d # no else\n'
    mov_eax, &string_50
    push_eax              # __var_args (local)
    lea_eax,[ebp+DWORD] %72
    push_eax              # function_name (local)
    lea_eax,[ebp+DWORD] %20
    pop_ebx               # =
    mov_[ebx],eax
    pop_eax               # ;
    push_eax              # __var_args (local)
    lea_eax,[ebp+DWORD] %72
    push_eax              # 4
    mov_eax, %4
    pop_ebx               # +
    add_eax,ebx
    push_eax              # nesting_id (global)
    mov_eax, &g_nesting_id
    push_eax              # nesting_depth (global)
    mov_eax, &g_nesting_depth
    mov_eax,[eax]         # ?
    push_eax              # 4
    mov_eax, %4
    pop_ebx               # *
    mul_ebx
    pop_ebx               # +
    add_eax,ebx
    mov_eax,[eax]         # ?
    pop_ebx               # =
    mov_[ebx],eax
    pop_eax               # ;
    push_eax              # __var_args (local)
    lea_eax,[ebp+DWORD] %72
    push_eax              # fprintf (function)
    mov_eax, &f_fprintf
    add_ebp, %80         # ()
    call_eax
    sub_ebp, %80
    pop_eax               # ;
# stack_c.c 770
    jmp %_main_loop13
:_main_else_end58
    jmp %_main_else_end57
:_main_else57
# stack_c.c 773
    push_eax              # nesting_type (global)
    mov_eax, &g_nesting_type
    push_eax              # nesting_depth (global)
    mov_eax, &g_nesting_depth
    mov_eax,[eax]         # ?
    pop_ebx               # +
    add_eax,ebx
    mov_al,[eax]          # ?1
    movzx_eax,al
    movsx_eax,al          # char
    push_eax              # 69
    mov_eax, %69
    pop_ebx               # ==
    cmp_eax_ebx
    sete_al
    movzx_eax,al
    test_eax,eax          # if
    pop_eax
    je %_main_else61
# stack_c.c 774
    push_eax              # fout (global)
    mov_eax, &g_fout
    mov_eax,[eax]         # ?
    push_eax              # ':_%s_else_end%d\n'
    mov_eax, &string_51
    push_eax              # __var_args (local)
    lea_eax,[ebp+DWORD] %72
    push_eax              # function_name (local)
    lea_eax,[ebp+DWORD] %20
    pop_ebx               # =
    mov_[ebx],eax
    pop_eax               # ;
    push_eax              # __var_args (local)
    lea_eax,[ebp+DWORD] %72
    push_eax              # 4
    mov_eax, %4
    pop_ebx               # +
    add_eax,ebx
    push_eax              # nesting_id (global)
    mov_eax, &g_nesting_id
    push_eax              # nesting_depth (global)
    mov_eax, &g_nesting_depth
    mov_eax,[eax]         # ?
    push_eax              # 4
    mov_eax, %4
    pop_ebx               # *
    mul_ebx
    pop_ebx               # +
    add_eax,ebx
    mov_eax,[eax]         # ?
    pop_ebx               # =
    mov_[ebx],eax
    pop_eax               # ;
    push_eax              # __var_args (local)
    lea_eax,[ebp+DWORD] %72
    push_eax              # fprintf (function)
    mov_eax, &f_fprintf
    add_ebp, %80         # ()
    call_eax
    sub_ebp, %80
    pop_eax               # ;
    jmp %_main_else_end61
:_main_else61
# stack_c.c 775
    push_eax              # nesting_type (global)
    mov_eax, &g_nesting_type
    push_eax              # nesting_depth (global)
    mov_eax, &g_nesting_depth
    mov_eax,[eax]         # ?
    pop_ebx               # +
    add_eax,ebx
    mov_al,[eax]          # ?1
    movzx_eax,al
    movsx_eax,al          # char
    push_eax              # 65
    mov_eax, %65
    pop_ebx               # ==
    cmp_eax_ebx
    sete_al
    movzx_eax,al
    test_eax,eax          # if
    pop_eax
    je %_main_else62
# stack_c.c 776
    push_eax              # fout (global)
    mov_eax, &g_fout
    mov_eax,[eax]         # ?
    push_eax              # ':_%s_and_end%d\n'
    mov_eax, &string_52
    push_eax              # __var_args (local)
    lea_eax,[ebp+DWORD] %72
    push_eax              # function_name (local)
    lea_eax,[ebp+DWORD] %20
    pop_ebx               # =
    mov_[ebx],eax
    pop_eax               # ;
    push_eax              # __var_args (local)
    lea_eax,[ebp+DWORD] %72
    push_eax              # 4
    mov_eax, %4
    pop_ebx               # +
    add_eax,ebx
    push_eax              # nesting_id (global)
    mov_eax, &g_nesting_id
    push_eax              # nesting_depth (global)
    mov_eax, &g_nesting_depth
    mov_eax,[eax]         # ?
    push_eax              # 4
    mov_eax, %4
    pop_ebx               # *
    mul_ebx
    pop_ebx               # +
    add_eax,ebx
    mov_eax,[eax]         # ?
    pop_ebx               # =
    mov_[ebx],eax
    pop_eax               # ;
    push_eax              # __var_args (local)
    lea_eax,[ebp+DWORD] %72
    push_eax              # fprintf (function)
    mov_eax, &f_fprintf
    add_ebp, %80         # ()
    call_eax
    sub_ebp, %80
    pop_eax               # ;
    jmp %_main_else_end62
:_main_else62
# stack_c.c 777
    push_eax              # nesting_type (global)
    mov_eax, &g_nesting_type
    push_eax              # nesting_depth (global)
    mov_eax, &g_nesting_depth
    mov_eax,[eax]         # ?
    pop_ebx               # +
    add_eax,ebx
    mov_al,[eax]          # ?1
    movzx_eax,al
    movsx_eax,al          # char
    push_eax              # 79
    mov_eax, %79
    pop_ebx               # ==
    cmp_eax_ebx
    sete_al
    movzx_eax,al
    test_eax,eax          # if
    pop_eax
    je %_main_else63
# stack_c.c 778
    push_eax              # fout (global)
    mov_eax, &g_fout
    mov_eax,[eax]         # ?
    push_eax              # ':_%s_or_end%d\n'
    mov_eax, &string_53
    push_eax              # __var_args (local)
    lea_eax,[ebp+DWORD] %72
    push_eax              # function_name (local)
    lea_eax,[ebp+DWORD] %20
    pop_ebx               # =
    mov_[ebx],eax
    pop_eax               # ;
    push_eax              # __var_args (local)
    lea_eax,[ebp+DWORD] %72
    push_eax              # 4
    mov_eax, %4
    pop_ebx               # +
    add_eax,ebx
    push_eax              # nesting_id (global)
    mov_eax, &g_nesting_id
    push_eax              # nesting_depth (global)
    mov_eax, &g_nesting_depth
    mov_eax,[eax]         # ?
    push_eax              # 4
    mov_eax, %4
    pop_ebx               # *
    mul_ebx
    pop_ebx               # +
    add_eax,ebx
    mov_eax,[eax]         # ?
    pop_ebx               # =
    mov_[ebx],eax
    pop_eax               # ;
    push_eax              # __var_args (local)
    lea_eax,[ebp+DWORD] %72
    push_eax              # fprintf (function)
    mov_eax, &f_fprintf
    add_ebp, %80         # ()
    call_eax
    sub_ebp, %80
    pop_eax               # ;
:_main_else63 # no else
:_main_else_end62
:_main_else_end61
:_main_else_end57
:_main_else_end56
    jmp %_main_else_end54
:_main_else54
# stack_c.c 780
    push_eax              # sym (global)
    mov_eax, &g_sym
    mov_al,[eax]          # ?1
    movzx_eax,al
    movsx_eax,al          # char
    push_eax              # 82
    mov_eax, %82
    pop_ebx               # ==
    cmp_eax_ebx
    sete_al
    movzx_eax,al
    test_eax,eax          # if
    pop_eax
    je %_main_else64
# stack_c.c 781
# stack_c.c 782
    push_eax              # fout (global)
    mov_eax, &g_fout
    mov_eax,[eax]         # ?
    push_eax              # '\tmov_ebx,[ebp]         # return\n\tpush_ebx\n\tret\n'
    mov_eax, &string_54
    push_eax              # 0
    mov_eax, %0
    push_eax              # fprintf (function)
    mov_eax, &f_fprintf
    add_ebp, %72         # ()
    call_eax
    sub_ebp, %72
    pop_eax               # ;
    jmp %_main_else_end64
:_main_else64
# stack_c.c 784
    push_eax              # sym (global)
    mov_eax, &g_sym
    mov_al,[eax]          # ?1
    movzx_eax,al
    movsx_eax,al          # char
    push_eax              # 59
    mov_eax, %59
    pop_ebx               # ==
    cmp_eax_ebx
    sete_al
    movzx_eax,al
    test_eax,eax          # if
    pop_eax
    je %_main_else65
# stack_c.c 785
# stack_c.c 786
    push_eax              # fout (global)
    mov_eax, &g_fout
    mov_eax,[eax]         # ?
    push_eax              # '\tpop_eax               # ;\n'
    mov_eax, &string_55
    push_eax              # 0
    mov_eax, %0
    push_eax              # fprintf (function)
    mov_eax, &f_fprintf
    add_ebp, %72         # ()
    call_eax
    sub_ebp, %72
    pop_eax               # ;
    jmp %_main_else_end65
:_main_else65
# stack_c.c 788
    push_eax              # sym (global)
    mov_eax, &g_sym
    mov_al,[eax]          # ?1
    movzx_eax,al
    movsx_eax,al          # char
    push_eax              # 36
    mov_eax, %36
    pop_ebx               # ==
    cmp_eax_ebx
    sete_al
    movzx_eax,al
    test_eax,eax          # if
    pop_eax
    je %_main_else66
# stack_c.c 789
# stack_c.c 790
    push_eax              # fout (global)
    mov_eax, &g_fout
    mov_eax,[eax]         # ?
    push_eax              # '\tpush_eax              # $ (dup)\n'
    mov_eax, &string_56
    push_eax              # 0
    mov_eax, %0
    push_eax              # fprintf (function)
    mov_eax, &f_fprintf
    add_ebp, %72         # ()
    call_eax
    sub_ebp, %72
    pop_eax               # ;
    jmp %_main_else_end66
:_main_else66
# stack_c.c 792
    push_eax              # sym (global)
    mov_eax, &g_sym
    mov_al,[eax]          # ?1
    movzx_eax,al
    movsx_eax,al          # char
    push_eax              # 71
    mov_eax, %71
    pop_ebx               # ==
    cmp_eax_ebx
    sete_al
    movzx_eax,al
    test_eax,eax          # if
    pop_eax
    je %_main_else67
# stack_c.c 793
# stack_c.c 794
    push_eax              # get_token (function)
    mov_eax, &f_get_token
    add_ebp, %72         # ()
    call_eax
    sub_ebp, %72
    pop_eax               # ;
# stack_c.c 795
    push_eax              # sym (global)
    mov_eax, &g_sym
    mov_al,[eax]          # ?1
    movzx_eax,al
    movsx_eax,al          # char
    push_eax              # 65
    mov_eax, %65
    pop_ebx               # !=
    cmp_eax_ebx
    setne_al
    movzx_eax,al
    test_eax,eax          # if
    pop_eax
    je %_main_else68
# stack_c.c 796
# stack_c.c 797
    push_eax              # ferr (global)
    mov_eax, &g_ferr
    mov_eax,[eax]         # ?
    push_eax              # 'ERROR %d.%d: Expecting label after 'goto'\n'
    mov_eax, &string_57
    push_eax              # __var_args (local)
    lea_eax,[ebp+DWORD] %72
    push_eax              # cur_line (global)
    mov_eax, &g_cur_line
    mov_eax,[eax]         # ?
    pop_ebx               # =
    mov_[ebx],eax
    pop_eax               # ;
    push_eax              # __var_args (local)
    lea_eax,[ebp+DWORD] %72
    push_eax              # 4
    mov_eax, %4
    pop_ebx               # +
    add_eax,ebx
    push_eax              # cur_column (global)
    mov_eax, &g_cur_column
    mov_eax,[eax]         # ?
    pop_ebx               # =
    mov_[ebx],eax
    pop_eax               # ;
    push_eax              # __var_args (local)
    lea_eax,[ebp+DWORD] %72
    push_eax              # fprintf (function)
    mov_eax, &f_fprintf
    add_ebp, %80         # ()
    call_eax
    sub_ebp, %80
    pop_eax               # ;
# stack_c.c 798
    push_eax              # 0
    mov_eax, %0
    mov_ebx,[ebp]         # return
    push_ebx
    ret
# stack_c.c 800
:_main_else68 # no else
    push_eax              # fout (global)
    mov_eax, &g_fout
    mov_eax,[eax]         # ?
    push_eax              # '\tjmp %%l_%s_%s\n'
    mov_eax, &string_58
    push_eax              # __var_args (local)
    lea_eax,[ebp+DWORD] %72
    push_eax              # function_name (local)
    lea_eax,[ebp+DWORD] %20
    pop_ebx               # =
    mov_[ebx],eax
    pop_eax               # ;
    push_eax              # __var_args (local)
    lea_eax,[ebp+DWORD] %72
    push_eax              # 4
    mov_eax, %4
    pop_ebx               # +
    add_eax,ebx
    push_eax              # token (global)
    mov_eax, &g_token
    pop_ebx               # =
    mov_[ebx],eax
    pop_eax               # ;
    push_eax              # __var_args (local)
    lea_eax,[ebp+DWORD] %72
    push_eax              # fprintf (function)
    mov_eax, &f_fprintf
    add_ebp, %80         # ()
    call_eax
    sub_ebp, %80
    pop_eax               # ;
    jmp %_main_else_end67
:_main_else67
# stack_c.c 802
    push_eax              # sym (global)
    mov_eax, &g_sym
    mov_al,[eax]          # ?1
    movzx_eax,al
    movsx_eax,al          # char
    push_eax              # 65
    mov_eax, %65
    pop_ebx               # ==
    cmp_eax_ebx
    sete_al
    movzx_eax,al
    test_eax,eax          # if
    pop_eax
    je %_main_else69
# stack_c.c 803
    push_eax              # i (local)
    lea_eax,[ebp+DWORD] %72
    push_eax              # nr_idents (global)
    mov_eax, &g_nr_idents
    mov_eax,[eax]         # ?
    push_eax              # 1
    mov_eax, %1
    pop_ebx               # -
    sub_ebx,eax
    mov_eax,ebx
    pop_ebx               # =
    mov_[ebx],eax
    pop_eax               # ;
# stack_c.c 805
:_main_loop70
    push_eax              # i (local)
    lea_eax,[ebp+DWORD] %72
    mov_eax,[eax]         # ?
    push_eax              # 0
    mov_eax, %0
    pop_ebx               # >=sfv
    cmp_eax_ebx
    setge_al
    movzx_eax,al
    test_eax,eax          # !
    sete_al
    movzx_eax,al
    test_eax,eax          # if
    pop_eax
    je %_main_else71
    jmp %_main_loop_end70
# stack_c.c 806
:_main_else71 # no else
    push_eax              # token (global)
    mov_eax, &g_token
    push_eax              # idents (global)
    mov_eax, &g_idents
    push_eax              # i (local)
    lea_eax,[ebp+DWORD] %72
    mov_eax,[eax]         # ?
    push_eax              # 68
    mov_eax, %68
    pop_ebx               # *
    mul_ebx
    pop_ebx               # +
    add_eax,ebx
    push_eax              # 4 (const s7_m_name)
    mov_eax, %4
    pop_ebx               # +
    add_eax,ebx
    push_eax              # strcmp (function)
    mov_eax, &f_strcmp
    add_ebp, %76         # ()
    call_eax
    sub_ebp, %76
    push_eax              # 0
    mov_eax, %0
    pop_ebx               # ==
    cmp_eax_ebx
    sete_al
    movzx_eax,al
    test_eax,eax          # if
    pop_eax
    je %_main_else72
# stack_c.c 807
    jmp %_main_loop_end70
:_main_else72 # no else
    push_eax              # i (local)
    lea_eax,[ebp+DWORD] %72
    push_eax              # $ (dup)
    mov_eax,[eax]         # ?
    push_eax              # 1
    mov_eax, %1
    pop_ebx               # -
    sub_ebx,eax
    mov_eax,ebx
    pop_ebx               # =
    mov_[ebx],eax
    push_eax              # 1
    mov_eax, %1
    pop_ebx               # +
    add_eax,ebx
    pop_eax               # ;
    jmp %_main_loop70
:_main_loop_end70
# stack_c.c 808
    push_eax              # i (local)
    lea_eax,[ebp+DWORD] %72
    mov_eax,[eax]         # ?
    push_eax              # 0
    mov_eax, %0
    pop_ebx               # >=sfv
    cmp_eax_ebx
    setge_al
    movzx_eax,al
    test_eax,eax          # if
    pop_eax
    je %_main_else73
# stack_c.c 809
# stack_c.c 816
    push_eax              # idents (global)
    mov_eax, &g_idents
    push_eax              # i (local)
    lea_eax,[ebp+DWORD] %72
    mov_eax,[eax]         # ?
    push_eax              # 68
    mov_eax, %68
    pop_ebx               # *
    mul_ebx
    pop_ebx               # +
    add_eax,ebx
    push_eax              # 0 (const s7_m_type)
    mov_eax, %0
    pop_ebx               # +
    add_eax,ebx
    mov_al,[eax]          # ?1
    movzx_eax,al
    movsx_eax,al          # char
    push_eax              # 71
    mov_eax, %71
    pop_ebx               # ==
    cmp_eax_ebx
    sete_al
    movzx_eax,al
    test_eax,eax          # if
    pop_eax
    je %_main_else74
# stack_c.c 817
    push_eax              # fout (global)
    mov_eax, &g_fout
    mov_eax,[eax]         # ?
    push_eax              # '\tpush_eax              # %s (global)\n\tmov_eax, &g_%s\n'
    mov_eax, &string_59
    push_eax              # __var_args (local)
    lea_eax,[ebp+DWORD] %76
    push_eax              # token (global)
    mov_eax, &g_token
    pop_ebx               # =
    mov_[ebx],eax
    pop_eax               # ;
    push_eax              # __var_args (local)
    lea_eax,[ebp+DWORD] %76
    push_eax              # 4
    mov_eax, %4
    pop_ebx               # +
    add_eax,ebx
    push_eax              # token (global)
    mov_eax, &g_token
    pop_ebx               # =
    mov_[ebx],eax
    pop_eax               # ;
    push_eax              # __var_args (local)
    lea_eax,[ebp+DWORD] %76
    push_eax              # fprintf (function)
    mov_eax, &f_fprintf
    add_ebp, %84         # ()
    call_eax
    sub_ebp, %84
    pop_eax               # ;
    jmp %_main_else_end74
:_main_else74
# stack_c.c 818
    push_eax              # idents (global)
    mov_eax, &g_idents
    push_eax              # i (local)
    lea_eax,[ebp+DWORD] %72
    mov_eax,[eax]         # ?
    push_eax              # 68
    mov_eax, %68
    pop_ebx               # *
    mul_ebx
    pop_ebx               # +
    add_eax,ebx
    push_eax              # 0 (const s7_m_type)
    mov_eax, %0
    pop_ebx               # +
    add_eax,ebx
    mov_al,[eax]          # ?1
    movzx_eax,al
    movsx_eax,al          # char
    push_eax              # 70
    mov_eax, %70
    pop_ebx               # ==
    cmp_eax_ebx
    sete_al
    movzx_eax,al
    test_eax,eax          # if
    pop_eax
    je %_main_else75
# stack_c.c 819
    push_eax              # fout (global)
    mov_eax, &g_fout
    mov_eax,[eax]         # ?
    push_eax              # '\tpush_eax              # %s (function)\n\tmov_eax, &f_%s\n'
    mov_eax, &string_60
    push_eax              # __var_args (local)
    lea_eax,[ebp+DWORD] %76
    push_eax              # token (global)
    mov_eax, &g_token
    pop_ebx               # =
    mov_[ebx],eax
    pop_eax               # ;
    push_eax              # __var_args (local)
    lea_eax,[ebp+DWORD] %76
    push_eax              # 4
    mov_eax, %4
    pop_ebx               # +
    add_eax,ebx
    push_eax              # token (global)
    mov_eax, &g_token
    pop_ebx               # =
    mov_[ebx],eax
    pop_eax               # ;
    push_eax              # __var_args (local)
    lea_eax,[ebp+DWORD] %76
    push_eax              # fprintf (function)
    mov_eax, &f_fprintf
    add_ebp, %84         # ()
    call_eax
    sub_ebp, %84
    pop_eax               # ;
    jmp %_main_else_end75
:_main_else75
# stack_c.c 820
    push_eax              # idents (global)
    mov_eax, &g_idents
    push_eax              # i (local)
    lea_eax,[ebp+DWORD] %72
    mov_eax,[eax]         # ?
    push_eax              # 68
    mov_eax, %68
    pop_ebx               # *
    mul_ebx
    pop_ebx               # +
    add_eax,ebx
    push_eax              # 0 (const s7_m_type)
    mov_eax, %0
    pop_ebx               # +
    add_eax,ebx
    mov_al,[eax]          # ?1
    movzx_eax,al
    movsx_eax,al          # char
    push_eax              # 67
    mov_eax, %67
    pop_ebx               # ==
    cmp_eax_ebx
    sete_al
    movzx_eax,al
    test_eax,eax          # if
    pop_eax
    je %_main_else76
# stack_c.c 821
    push_eax              # fout (global)
    mov_eax, &g_fout
    mov_eax,[eax]         # ?
    push_eax              # '\tpush_eax              # %u (const %s)\n\tmov_eax, %%%u\n'
    mov_eax, &string_61
    push_eax              # __var_args (local)
    lea_eax,[ebp+DWORD] %76
    push_eax              # idents (global)
    mov_eax, &g_idents
    push_eax              # i (local)
    lea_eax,[ebp+DWORD] %72
    mov_eax,[eax]         # ?
    push_eax              # 68
    mov_eax, %68
    pop_ebx               # *
    mul_ebx
    pop_ebx               # +
    add_eax,ebx
    push_eax              # 64 (const s7_m_value)
    mov_eax, %64
    pop_ebx               # +
    add_eax,ebx
    mov_eax,[eax]         # ?
    pop_ebx               # =
    mov_[ebx],eax
    pop_eax               # ;
    push_eax              # __var_args (local)
    lea_eax,[ebp+DWORD] %76
    push_eax              # 4
    mov_eax, %4
    pop_ebx               # +
    add_eax,ebx
    push_eax              # token (global)
    mov_eax, &g_token
    pop_ebx               # =
    mov_[ebx],eax
    pop_eax               # ;
    push_eax              # __var_args (local)
    lea_eax,[ebp+DWORD] %76
    push_eax              # 8
    mov_eax, %8
    pop_ebx               # +
    add_eax,ebx
    push_eax              # idents (global)
    mov_eax, &g_idents
    push_eax              # i (local)
    lea_eax,[ebp+DWORD] %72
    mov_eax,[eax]         # ?
    push_eax              # 68
    mov_eax, %68
    pop_ebx               # *
    mul_ebx
    pop_ebx               # +
    add_eax,ebx
    push_eax              # 64 (const s7_m_value)
    mov_eax, %64
    pop_ebx               # +
    add_eax,ebx
    mov_eax,[eax]         # ?
    pop_ebx               # =
    mov_[ebx],eax
    pop_eax               # ;
    push_eax              # __var_args (local)
    lea_eax,[ebp+DWORD] %76
    push_eax              # fprintf (function)
    mov_eax, &f_fprintf
    add_ebp, %88         # ()
    call_eax
    sub_ebp, %88
    pop_eax               # ;
    jmp %_main_else_end76
:_main_else76
# stack_c.c 822
    push_eax              # idents (global)
    mov_eax, &g_idents
    push_eax              # i (local)
    lea_eax,[ebp+DWORD] %72
    mov_eax,[eax]         # ?
    push_eax              # 68
    mov_eax, %68
    pop_ebx               # *
    mul_ebx
    pop_ebx               # +
    add_eax,ebx
    push_eax              # 0 (const s7_m_type)
    mov_eax, %0
    pop_ebx               # +
    add_eax,ebx
    mov_al,[eax]          # ?1
    movzx_eax,al
    movsx_eax,al          # char
    push_eax              # 76
    mov_eax, %76
    pop_ebx               # ==
    cmp_eax_ebx
    sete_al
    movzx_eax,al
    test_eax,eax          # if
    pop_eax
    je %_main_else77
# stack_c.c 823
    push_eax              # fout (global)
    mov_eax, &g_fout
    mov_eax,[eax]         # ?
    push_eax              # '\tpush_eax              # %s (local)\n\tlea_eax,[ebp+DWORD] %%%d\n'
    mov_eax, &string_62
    push_eax              # __var_args (local)
    lea_eax,[ebp+DWORD] %76
    push_eax              # token (global)
    mov_eax, &g_token
    pop_ebx               # =
    mov_[ebx],eax
    pop_eax               # ;
    push_eax              # __var_args (local)
    lea_eax,[ebp+DWORD] %76
    push_eax              # 4
    mov_eax, %4
    pop_ebx               # +
    add_eax,ebx
    push_eax              # 4
    mov_eax, %4
    push_eax              # idents (global)
    mov_eax, &g_idents
    push_eax              # i (local)
    lea_eax,[ebp+DWORD] %72
    mov_eax,[eax]         # ?
    push_eax              # 68
    mov_eax, %68
    pop_ebx               # *
    mul_ebx
    pop_ebx               # +
    add_eax,ebx
    push_eax              # 56 (const s7_m_pos)
    mov_eax, %56
    pop_ebx               # +
    add_eax,ebx
    mov_eax,[eax]         # ?
    pop_ebx               # *
    mul_ebx
    pop_ebx               # =
    mov_[ebx],eax
    pop_eax               # ;
    push_eax              # __var_args (local)
    lea_eax,[ebp+DWORD] %76
    push_eax              # fprintf (function)
    mov_eax, &f_fprintf
    add_ebp, %84         # ()
    call_eax
    sub_ebp, %84
    pop_eax               # ;
    jmp %_main_else_end77
:_main_else77
# stack_c.c 824
    push_eax              # idents (global)
    mov_eax, &g_idents
    push_eax              # i (local)
    lea_eax,[ebp+DWORD] %72
    mov_eax,[eax]         # ?
    push_eax              # 68
    mov_eax, %68
    pop_ebx               # *
    mul_ebx
    pop_ebx               # +
    add_eax,ebx
    push_eax              # 0 (const s7_m_type)
    mov_eax, %0
    pop_ebx               # +
    add_eax,ebx
    mov_al,[eax]          # ?1
    movzx_eax,al
    movsx_eax,al          # char
    push_eax              # 83
    mov_eax, %83
    pop_ebx               # ==
    cmp_eax_ebx
    sete_al
    movzx_eax,al
    test_eax,eax          # if
    pop_eax
    je %_main_else78
# stack_c.c 825
    push_eax              # fout (global)
    mov_eax, &g_fout
    mov_eax,[eax]         # ?
    push_eax              # '\tpush_eax              # %s (static)\n\tmov_eax, &static_%d_%s\n'
    mov_eax, &string_63
    push_eax              # __var_args (local)
    lea_eax,[ebp+DWORD] %76
    push_eax              # token (global)
    mov_eax, &g_token
    pop_ebx               # =
    mov_[ebx],eax
    pop_eax               # ;
    push_eax              # __var_args (local)
    lea_eax,[ebp+DWORD] %76
    push_eax              # 4
    mov_eax, %4
    pop_ebx               # +
    add_eax,ebx
    push_eax              # idents (global)
    mov_eax, &g_idents
    push_eax              # i (local)
    lea_eax,[ebp+DWORD] %72
    mov_eax,[eax]         # ?
    push_eax              # 68
    mov_eax, %68
    pop_ebx               # *
    mul_ebx
    pop_ebx               # +
    add_eax,ebx
    push_eax              # 64 (const s7_m_value)
    mov_eax, %64
    pop_ebx               # +
    add_eax,ebx
    mov_eax,[eax]         # ?
    pop_ebx               # =
    mov_[ebx],eax
    pop_eax               # ;
    push_eax              # __var_args (local)
    lea_eax,[ebp+DWORD] %76
    push_eax              # 8
    mov_eax, %8
    pop_ebx               # +
    add_eax,ebx
    push_eax              # token (global)
    mov_eax, &g_token
    pop_ebx               # =
    mov_[ebx],eax
    pop_eax               # ;
    push_eax              # __var_args (local)
    lea_eax,[ebp+DWORD] %76
    push_eax              # fprintf (function)
    mov_eax, &f_fprintf
    add_ebp, %88         # ()
    call_eax
    sub_ebp, %88
    pop_eax               # ;
:_main_else78 # no else
:_main_else_end77
:_main_else_end76
:_main_else_end75
:_main_else_end74
    jmp %_main_else_end73
:_main_else73
# stack_c.c 828
# stack_c.c 829
    push_eax              # ferr (global)
    mov_eax, &g_ferr
    mov_eax,[eax]         # ?
    push_eax              # 'ERROR %d.%d: Ident %s is not defined\n'
    mov_eax, &string_64
    push_eax              # __var_args (local)
    lea_eax,[ebp+DWORD] %76
    push_eax              # cur_line (global)
    mov_eax, &g_cur_line
    mov_eax,[eax]         # ?
    pop_ebx               # =
    mov_[ebx],eax
    pop_eax               # ;
    push_eax              # __var_args (local)
    lea_eax,[ebp+DWORD] %76
    push_eax              # 4
    mov_eax, %4
    pop_ebx               # +
    add_eax,ebx
    push_eax              # cur_column (global)
    mov_eax, &g_cur_column
    mov_eax,[eax]         # ?
    pop_ebx               # =
    mov_[ebx],eax
    pop_eax               # ;
    push_eax              # __var_args (local)
    lea_eax,[ebp+DWORD] %76
    push_eax              # 8
    mov_eax, %8
    pop_ebx               # +
    add_eax,ebx
    push_eax              # token (global)
    mov_eax, &g_token
    pop_ebx               # =
    mov_[ebx],eax
    pop_eax               # ;
    push_eax              # __var_args (local)
    lea_eax,[ebp+DWORD] %76
    push_eax              # fprintf (function)
    mov_eax, &f_fprintf
    add_ebp, %88         # ()
    call_eax
    sub_ebp, %88
    pop_eax               # ;
# stack_c.c 830
    push_eax              # error (global)
    mov_eax, &g_error
    push_eax              # 1
    mov_eax, %1
    pop_ebx               # =
    mov_[ebx],eax
    pop_eax               # ;
:_main_else_end73
    jmp %_main_else_end69
:_main_else69
# stack_c.c 833
    push_eax              # sym (global)
    mov_eax, &g_sym
    mov_al,[eax]          # ?1
    movzx_eax,al
    movsx_eax,al          # char
    push_eax              # 48
    mov_eax, %48
    pop_ebx               # ==
    cmp_eax_ebx
    sete_al
    movzx_eax,al
    test_eax,eax          # if
    pop_eax
    je %_main_else79
# stack_c.c 834
# stack_c.c 835
    push_eax              # fout (global)
    mov_eax, &g_fout
    mov_eax,[eax]         # ?
    push_eax              # '\tpush_eax              # %u\n\tmov_eax, %%%u\n'
    mov_eax, &string_65
    push_eax              # __var_args (local)
    lea_eax,[ebp+DWORD] %72
    push_eax              # int_value (global)
    mov_eax, &g_int_value
    mov_eax,[eax]         # ?
    pop_ebx               # =
    mov_[ebx],eax
    pop_eax               # ;
    push_eax              # __var_args (local)
    lea_eax,[ebp+DWORD] %72
    push_eax              # 4
    mov_eax, %4
    pop_ebx               # +
    add_eax,ebx
    push_eax              # int_value (global)
    mov_eax, &g_int_value
    mov_eax,[eax]         # ?
    pop_ebx               # =
    mov_[ebx],eax
    pop_eax               # ;
    push_eax              # __var_args (local)
    lea_eax,[ebp+DWORD] %72
    push_eax              # fprintf (function)
    mov_eax, &f_fprintf
    add_ebp, %80         # ()
    call_eax
    sub_ebp, %80
    pop_eax               # ;
    jmp %_main_else_end79
:_main_else79
# stack_c.c 837
    push_eax              # sym (global)
    mov_eax, &g_sym
    mov_al,[eax]          # ?1
    movzx_eax,al
    movsx_eax,al          # char
    push_eax              # 34
    mov_eax, %34
    pop_ebx               # ==
    cmp_eax_ebx
    sete_al
    movzx_eax,al
    test_eax,eax          # if
    pop_eax
    je %_main_else80
# stack_c.c 838
    push_eax              # nr (local)
    lea_eax,[ebp+DWORD] %72
    push_eax              # token (global)
    mov_eax, &g_token
    push_eax              # token_len (global)
    mov_eax, &g_token_len
    mov_eax,[eax]         # ?
    push_eax              # nr_for_string (function)
    mov_eax, &f_nr_for_string
    add_ebp, %76         # ()
    call_eax
    sub_ebp, %76
    pop_ebx               # =
    mov_[ebx],eax
    pop_eax               # ;
# stack_c.c 840
    push_eax              # fout (global)
    mov_eax, &g_fout
    mov_eax,[eax]         # ?
    push_eax              # '\tpush_eax              # ''
    mov_eax, &string_66
    push_eax              # 0
    mov_eax, %0
    push_eax              # fprintf (function)
    mov_eax, &f_fprintf
    add_ebp, %76         # ()
    call_eax
    sub_ebp, %76
    pop_eax               # ;
# stack_c.c 841
    push_eax              # fout (global)
    mov_eax, &g_fout
    mov_eax,[eax]         # ?
    push_eax              # token (global)
    mov_eax, &g_token
    push_eax              # save_print_string (function)
    mov_eax, &f_save_print_string
    add_ebp, %76         # ()
    call_eax
    sub_ebp, %76
    pop_eax               # ;
# stack_c.c 842
    push_eax              # fout (global)
    mov_eax, &g_fout
    mov_eax,[eax]         # ?
    push_eax              # ''\n\tmov_eax, &string_%d\n'
    mov_eax, &string_67
    push_eax              # __var_args (local)
    lea_eax,[ebp+DWORD] %76
    push_eax              # nr (local)
    lea_eax,[ebp+DWORD] %72
    mov_eax,[eax]         # ?
    pop_ebx               # =
    mov_[ebx],eax
    pop_eax               # ;
    push_eax              # __var_args (local)
    lea_eax,[ebp+DWORD] %76
    push_eax              # fprintf (function)
    mov_eax, &f_fprintf
    add_ebp, %80         # ()
    call_eax
    sub_ebp, %80
    pop_eax               # ;
    jmp %_main_else_end80
:_main_else80
# stack_c.c 844
    push_eax              # sym (global)
    mov_eax, &g_sym
    mov_al,[eax]          # ?1
    movzx_eax,al
    movsx_eax,al          # char
    push_eax              # 39
    mov_eax, %39
    pop_ebx               # ==
    cmp_eax_ebx
    sete_al
    movzx_eax,al
    test_eax,eax          # if
    pop_eax
    je %_main_else81
# stack_c.c 845
# stack_c.c 846
    push_eax              # 32
    mov_eax, %32
    push_eax              # token (global)
    mov_eax, &g_token
    push_eax              # 0
    mov_eax, %0
    pop_ebx               # +
    add_eax,ebx
    mov_al,[eax]          # ?1
    movzx_eax,al
    movsx_eax,al          # char
    pop_ebx               # <s
    cmp_eax_ebx
    setl_al
    movzx_eax,al
    test_eax,eax          # &&
    je %_main_and_end82
    pop_eax
    push_eax              # token (global)
    mov_eax, &g_token
    push_eax              # 0
    mov_eax, %0
    pop_ebx               # +
    add_eax,ebx
    mov_al,[eax]          # ?1
    movzx_eax,al
    movsx_eax,al          # char
    push_eax              # 127
    mov_eax, %127
    pop_ebx               # <s
    cmp_eax_ebx
    setl_al
    movzx_eax,al
:_main_and_end82
    test_eax,eax          # if
    pop_eax
    je %_main_else83
# stack_c.c 847
    push_eax              # fout (global)
    mov_eax, &g_fout
    mov_eax,[eax]         # ?
    push_eax              # '\tpush_eax              # '%c'\n\tmov_eax, %%%d\n'
    mov_eax, &string_68
    push_eax              # __var_args (local)
    lea_eax,[ebp+DWORD] %72
    push_eax              # token (global)
    mov_eax, &g_token
    push_eax              # 0
    mov_eax, %0
    pop_ebx               # +
    add_eax,ebx
    mov_al,[eax]          # ?1
    movzx_eax,al
    movsx_eax,al          # char
    pop_ebx               # =
    mov_[ebx],eax
    pop_eax               # ;
    push_eax              # __var_args (local)
    lea_eax,[ebp+DWORD] %72
    push_eax              # 4
    mov_eax, %4
    pop_ebx               # +
    add_eax,ebx
    push_eax              # token (global)
    mov_eax, &g_token
    push_eax              # 0
    mov_eax, %0
    pop_ebx               # +
    add_eax,ebx
    mov_al,[eax]          # ?1
    movzx_eax,al
    movsx_eax,al          # char
    pop_ebx               # =
    mov_[ebx],eax
    pop_eax               # ;
    push_eax              # __var_args (local)
    lea_eax,[ebp+DWORD] %72
    push_eax              # fprintf (function)
    mov_eax, &f_fprintf
    add_ebp, %80         # ()
    call_eax
    sub_ebp, %80
    pop_eax               # ;
    jmp %_main_else_end83
:_main_else83
# stack_c.c 849
    push_eax              # fout (global)
    mov_eax, &g_fout
    mov_eax,[eax]         # ?
    push_eax              # '\tpush_eax              # %d\n\tmov_eax, %%%d\n'
    mov_eax, &string_69
    push_eax              # __var_args (local)
    lea_eax,[ebp+DWORD] %72
    push_eax              # token (global)
    mov_eax, &g_token
    push_eax              # 0
    mov_eax, %0
    pop_ebx               # +
    add_eax,ebx
    mov_al,[eax]          # ?1
    movzx_eax,al
    movsx_eax,al          # char
    pop_ebx               # =
    mov_[ebx],eax
    pop_eax               # ;
    push_eax              # __var_args (local)
    lea_eax,[ebp+DWORD] %72
    push_eax              # 4
    mov_eax, %4
    pop_ebx               # +
    add_eax,ebx
    push_eax              # token (global)
    mov_eax, &g_token
    push_eax              # 0
    mov_eax, %0
    pop_ebx               # +
    add_eax,ebx
    mov_al,[eax]          # ?1
    movzx_eax,al
    movsx_eax,al          # char
    pop_ebx               # =
    mov_[ebx],eax
    pop_eax               # ;
    push_eax              # __var_args (local)
    lea_eax,[ebp+DWORD] %72
    push_eax              # fprintf (function)
    mov_eax, &f_fprintf
    add_ebp, %80         # ()
    call_eax
    sub_ebp, %80
    pop_eax               # ;
:_main_else_end83
    jmp %_main_else_end81
:_main_else81
# stack_c.c 851
    push_eax              # sym (global)
    mov_eax, &g_sym
    mov_al,[eax]          # ?1
    movzx_eax,al
    movsx_eax,al          # char
    push_eax              # 63
    mov_eax, %63
    pop_ebx               # ==
    cmp_eax_ebx
    sete_al
    movzx_eax,al
    test_eax,eax          # if
    pop_eax
    je %_main_else84
# stack_c.c 852
# stack_c.c 853
    push_eax              # fout (global)
    mov_eax, &g_fout
    mov_eax,[eax]         # ?
    push_eax              # '\tmov_eax,[eax]         # ?\n'
    mov_eax, &string_70
    push_eax              # 0
    mov_eax, %0
    push_eax              # fprintf (function)
    mov_eax, &f_fprintf
    add_ebp, %72         # ()
    call_eax
    sub_ebp, %72
    pop_eax               # ;
    jmp %_main_else_end84
:_main_else84
# stack_c.c 855
    push_eax              # sym (global)
    mov_eax, &g_sym
    mov_al,[eax]          # ?1
    movzx_eax,al
    movsx_eax,al          # char
    push_eax              # 61
    mov_eax, %61
    pop_ebx               # ==
    cmp_eax_ebx
    sete_al
    movzx_eax,al
    test_eax,eax          # if
    pop_eax
    je %_main_else85
# stack_c.c 856
# stack_c.c 857
    push_eax              # fout (global)
    mov_eax, &g_fout
    mov_eax,[eax]         # ?
    push_eax              # '\tpop_ebx               # =\n\tmov_[ebx],eax\n'
    mov_eax, &string_71
    push_eax              # 0
    mov_eax, %0
    push_eax              # fprintf (function)
    mov_eax, &f_fprintf
    add_ebp, %72         # ()
    call_eax
    sub_ebp, %72
    pop_eax               # ;
    jmp %_main_else_end85
:_main_else85
# stack_c.c 859
    push_eax              # sym (global)
    mov_eax, &g_sym
    mov_al,[eax]          # ?1
    movzx_eax,al
    movsx_eax,al          # char
    push_eax              # 43
    mov_eax, %43
    pop_ebx               # ==
    cmp_eax_ebx
    sete_al
    movzx_eax,al
    test_eax,eax          # if
    pop_eax
    je %_main_else86
# stack_c.c 860
# stack_c.c 861
    push_eax              # fout (global)
    mov_eax, &g_fout
    mov_eax,[eax]         # ?
    push_eax              # '\tpop_ebx               # +\n\tadd_eax,ebx\n'
    mov_eax, &string_72
    push_eax              # 0
    mov_eax, %0
    push_eax              # fprintf (function)
    mov_eax, &f_fprintf
    add_ebp, %72         # ()
    call_eax
    sub_ebp, %72
    pop_eax               # ;
    jmp %_main_else_end86
:_main_else86
# stack_c.c 863
    push_eax              # sym (global)
    mov_eax, &g_sym
    mov_al,[eax]          # ?1
    movzx_eax,al
    movsx_eax,al          # char
    push_eax              # 45
    mov_eax, %45
    pop_ebx               # ==
    cmp_eax_ebx
    sete_al
    movzx_eax,al
    test_eax,eax          # ||
    jne %_main_or_end87
    pop_eax
    push_eax              # sym (global)
    mov_eax, &g_sym
    mov_al,[eax]          # ?1
    movzx_eax,al
    movsx_eax,al          # char
    push_eax              # 97
    mov_eax, %97
    push_eax              # 22
    mov_eax, %22
    pop_ebx               # +
    add_eax,ebx
    pop_ebx               # ==
    cmp_eax_ebx
    sete_al
    movzx_eax,al
:_main_or_end87
    test_eax,eax          # if
    pop_eax
    je %_main_else88
# stack_c.c 864
# stack_c.c 865
    push_eax              # fout (global)
    mov_eax, &g_fout
    mov_eax,[eax]         # ?
    push_eax              # '\tpop_ebx               # -\n\tsub_ebx,eax\n\tmov_eax,ebx\n'
    mov_eax, &string_73
    push_eax              # 0
    mov_eax, %0
    push_eax              # fprintf (function)
    mov_eax, &f_fprintf
    add_ebp, %72         # ()
    call_eax
    sub_ebp, %72
    pop_eax               # ;
    jmp %_main_else_end88
:_main_else88
# stack_c.c 867
    push_eax              # sym (global)
    mov_eax, &g_sym
    mov_al,[eax]          # ?1
    movzx_eax,al
    movsx_eax,al          # char
    push_eax              # 42
    mov_eax, %42
    pop_ebx               # ==
    cmp_eax_ebx
    sete_al
    movzx_eax,al
    test_eax,eax          # if
    pop_eax
    je %_main_else89
# stack_c.c 868
# stack_c.c 869
    push_eax              # fout (global)
    mov_eax, &g_fout
    mov_eax,[eax]         # ?
    push_eax              # '\tpop_ebx               # *\n\tmul_ebx\n'
    mov_eax, &string_74
    push_eax              # 0
    mov_eax, %0
    push_eax              # fprintf (function)
    mov_eax, &f_fprintf
    add_ebp, %72         # ()
    call_eax
    sub_ebp, %72
    pop_eax               # ;
    jmp %_main_else_end89
:_main_else89
# stack_c.c 871
    push_eax              # sym (global)
    mov_eax, &g_sym
    mov_al,[eax]          # ?1
    movzx_eax,al
    movsx_eax,al          # char
    push_eax              # 38
    mov_eax, %38
    pop_ebx               # ==
    cmp_eax_ebx
    sete_al
    movzx_eax,al
    test_eax,eax          # if
    pop_eax
    je %_main_else90
# stack_c.c 872
# stack_c.c 873
    push_eax              # fout (global)
    mov_eax, &g_fout
    mov_eax,[eax]         # ?
    push_eax              # '\tpop_ebx               # &\n\tand_eax,ebx\n'
    mov_eax, &string_75
    push_eax              # 0
    mov_eax, %0
    push_eax              # fprintf (function)
    mov_eax, &f_fprintf
    add_ebp, %72         # ()
    call_eax
    sub_ebp, %72
    pop_eax               # ;
    jmp %_main_else_end90
:_main_else90
# stack_c.c 875
    push_eax              # sym (global)
    mov_eax, &g_sym
    mov_al,[eax]          # ?1
    movzx_eax,al
    movsx_eax,al          # char
    push_eax              # 124
    mov_eax, %124
    pop_ebx               # ==
    cmp_eax_ebx
    sete_al
    movzx_eax,al
    test_eax,eax          # if
    pop_eax
    je %_main_else91
# stack_c.c 876
# stack_c.c 877
    push_eax              # fout (global)
    mov_eax, &g_fout
    mov_eax,[eax]         # ?
    push_eax              # '\tpop_ebx               # |\n\tor_eax,ebx\n'
    mov_eax, &string_76
    push_eax              # 0
    mov_eax, %0
    push_eax              # fprintf (function)
    mov_eax, &f_fprintf
    add_ebp, %72         # ()
    call_eax
    sub_ebp, %72
    pop_eax               # ;
    jmp %_main_else_end91
:_main_else91
# stack_c.c 879
    push_eax              # sym (global)
    mov_eax, &g_sym
    mov_al,[eax]          # ?1
    movzx_eax,al
    movsx_eax,al          # char
    push_eax              # 94
    mov_eax, %94
    pop_ebx               # ==
    cmp_eax_ebx
    sete_al
    movzx_eax,al
    test_eax,eax          # if
    pop_eax
    je %_main_else92
# stack_c.c 880
# stack_c.c 881
    push_eax              # fout (global)
    mov_eax, &g_fout
    mov_eax,[eax]         # ?
    push_eax              # '\tpop_ebx               # ^\n\txor_eax,ebx\n'
    mov_eax, &string_77
    push_eax              # 0
    mov_eax, %0
    push_eax              # fprintf (function)
    mov_eax, &f_fprintf
    add_ebp, %72         # ()
    call_eax
    sub_ebp, %72
    pop_eax               # ;
    jmp %_main_else_end92
:_main_else92
# stack_c.c 883
    push_eax              # sym (global)
    mov_eax, &g_sym
    mov_al,[eax]          # ?1
    movzx_eax,al
    movsx_eax,al          # char
    push_eax              # 126
    mov_eax, %126
    pop_ebx               # ==
    cmp_eax_ebx
    sete_al
    movzx_eax,al
    test_eax,eax          # if
    pop_eax
    je %_main_else93
# stack_c.c 884
# stack_c.c 885
    push_eax              # fout (global)
    mov_eax, &g_fout
    mov_eax,[eax]         # ?
    push_eax              # '\tnot_eax               # ~\n'
    mov_eax, &string_78
    push_eax              # 0
    mov_eax, %0
    push_eax              # fprintf (function)
    mov_eax, &f_fprintf
    add_ebp, %72         # ()
    call_eax
    sub_ebp, %72
    pop_eax               # ;
    jmp %_main_else_end93
:_main_else93
# stack_c.c 887
    push_eax              # sym (global)
    mov_eax, &g_sym
    mov_al,[eax]          # ?1
    movzx_eax,al
    movsx_eax,al          # char
    push_eax              # 47
    mov_eax, %47
    pop_ebx               # ==
    cmp_eax_ebx
    sete_al
    movzx_eax,al
    test_eax,eax          # if
    pop_eax
    je %_main_else94
# stack_c.c 888
# stack_c.c 889
    push_eax              # fout (global)
    mov_eax, &g_fout
    mov_eax,[eax]         # ?
    push_eax              # '\tmov_ebx,eax           # /\n\tpop_eax\n\tmov_edx, %%0\n\tdiv_ebx\n'
    mov_eax, &string_79
    push_eax              # 0
    mov_eax, %0
    push_eax              # fprintf (function)
    mov_eax, &f_fprintf
    add_ebp, %72         # ()
    call_eax
    sub_ebp, %72
    pop_eax               # ;
    jmp %_main_else_end94
:_main_else94
# stack_c.c 891
    push_eax              # sym (global)
    mov_eax, &g_sym
    mov_al,[eax]          # ?1
    movzx_eax,al
    movsx_eax,al          # char
    push_eax              # 37
    mov_eax, %37
    pop_ebx               # ==
    cmp_eax_ebx
    sete_al
    movzx_eax,al
    test_eax,eax          # if
    pop_eax
    je %_main_else95
# stack_c.c 892
# stack_c.c 893
    push_eax              # fout (global)
    mov_eax, &g_fout
    mov_eax,[eax]         # ?
    push_eax              # '\tmov_ebx,eax           # %%\n\tpop_eax\n\tmov_edx, %%0\n\tdiv_ebx\n\tmov_eax,edx\n'
    mov_eax, &string_80
    push_eax              # 0
    mov_eax, %0
    push_eax              # fprintf (function)
    mov_eax, &f_fprintf
    add_ebp, %72         # ()
    call_eax
    sub_ebp, %72
    pop_eax               # ;
    jmp %_main_else_end95
:_main_else95
# stack_c.c 895
    push_eax              # sym (global)
    mov_eax, &g_sym
    mov_al,[eax]          # ?1
    movzx_eax,al
    movsx_eax,al          # char
    push_eax              # 60
    mov_eax, %60
    pop_ebx               # ==
    cmp_eax_ebx
    sete_al
    movzx_eax,al
    test_eax,eax          # if
    pop_eax
    je %_main_else96
# stack_c.c 896
# stack_c.c 897
    push_eax              # fout (global)
    mov_eax, &g_fout
    mov_eax,[eax]         # ?
    push_eax              # '\tpop_ebx               # <\n\tcmp_eax_ebx\n\tsetb_al\n\tmovzx_eax,al\n'
    mov_eax, &string_81
    push_eax              # 0
    mov_eax, %0
    push_eax              # fprintf (function)
    mov_eax, &f_fprintf
    add_ebp, %72         # ()
    call_eax
    sub_ebp, %72
    pop_eax               # ;
    jmp %_main_else_end96
:_main_else96
# stack_c.c 899
    push_eax              # sym (global)
    mov_eax, &g_sym
    mov_al,[eax]          # ?1
    movzx_eax,al
    movsx_eax,al          # char
    push_eax              # 62
    mov_eax, %62
    pop_ebx               # ==
    cmp_eax_ebx
    sete_al
    movzx_eax,al
    test_eax,eax          # if
    pop_eax
    je %_main_else97
# stack_c.c 900
# stack_c.c 901
    push_eax              # fout (global)
    mov_eax, &g_fout
    mov_eax,[eax]         # ?
    push_eax              # '\tpop_ebx               # >\n\tcmp_eax_ebx\n\tseta_al\n\tmovzx_eax,al\n'
    mov_eax, &string_82
    push_eax              # 0
    mov_eax, %0
    push_eax              # fprintf (function)
    mov_eax, &f_fprintf
    add_ebp, %72         # ()
    call_eax
    sub_ebp, %72
    pop_eax               # ;
    jmp %_main_else_end97
:_main_else97
# stack_c.c 903
    push_eax              # sym (global)
    mov_eax, &g_sym
    mov_al,[eax]          # ?1
    movzx_eax,al
    movsx_eax,al          # char
    push_eax              # 33
    mov_eax, %33
    pop_ebx               # ==
    cmp_eax_ebx
    sete_al
    movzx_eax,al
    test_eax,eax          # if
    pop_eax
    je %_main_else98
# stack_c.c 904
# stack_c.c 905
    push_eax              # fout (global)
    mov_eax, &g_fout
    mov_eax,[eax]         # ?
    push_eax              # '\ttest_eax,eax          # !\n\tsete_al\n\tmovzx_eax,al\n'
    mov_eax, &string_83
    push_eax              # 0
    mov_eax, %0
    push_eax              # fprintf (function)
    mov_eax, &f_fprintf
    add_ebp, %72         # ()
    call_eax
    sub_ebp, %72
    pop_eax               # ;
    jmp %_main_else_end98
:_main_else98
# stack_c.c 907
    push_eax              # sym (global)
    mov_eax, &g_sym
    mov_al,[eax]          # ?1
    movzx_eax,al
    movsx_eax,al          # char
    push_eax              # 58
    mov_eax, %58
    pop_ebx               # ==
    cmp_eax_ebx
    sete_al
    movzx_eax,al
    test_eax,eax          # if
    pop_eax
    je %_main_else99
# stack_c.c 908
# stack_c.c 909
    push_eax              # get_token (function)
    mov_eax, &f_get_token
    add_ebp, %72         # ()
    call_eax
    sub_ebp, %72
    pop_eax               # ;
# stack_c.c 910
    push_eax              # sym (global)
    mov_eax, &g_sym
    mov_al,[eax]          # ?1
    movzx_eax,al
    movsx_eax,al          # char
    push_eax              # 65
    mov_eax, %65
    pop_ebx               # !=
    cmp_eax_ebx
    setne_al
    movzx_eax,al
    test_eax,eax          # if
    pop_eax
    je %_main_else100
# stack_c.c 911
# stack_c.c 912
    push_eax              # ferr (global)
    mov_eax, &g_ferr
    mov_eax,[eax]         # ?
    push_eax              # 'ERROR %d.%d: Expect identifier after ':'
    mov_eax, &string_84
    push_eax              # __var_args (local)
    lea_eax,[ebp+DWORD] %72
    push_eax              # cur_line (global)
    mov_eax, &g_cur_line
    mov_eax,[eax]         # ?
    pop_ebx               # =
    mov_[ebx],eax
    pop_eax               # ;
    push_eax              # __var_args (local)
    lea_eax,[ebp+DWORD] %72
    push_eax              # 4
    mov_eax, %4
    pop_ebx               # +
    add_eax,ebx
    push_eax              # cur_column (global)
    mov_eax, &g_cur_column
    mov_eax,[eax]         # ?
    pop_ebx               # =
    mov_[ebx],eax
    pop_eax               # ;
    push_eax              # __var_args (local)
    lea_eax,[ebp+DWORD] %72
    push_eax              # fprintf (function)
    mov_eax, &f_fprintf
    add_ebp, %80         # ()
    call_eax
    sub_ebp, %80
    pop_eax               # ;
# stack_c.c 913
    push_eax              # 4294967295
    mov_eax, %4294967295
    mov_ebx,[ebp]         # return
    push_ebx
    ret
# stack_c.c 915
:_main_else100 # no else
    push_eax              # fout (global)
    mov_eax, &g_fout
    mov_eax,[eax]         # ?
    push_eax              # ':l_%s_%s\n'
    mov_eax, &string_85
    push_eax              # __var_args (local)
    lea_eax,[ebp+DWORD] %72
    push_eax              # function_name (local)
    lea_eax,[ebp+DWORD] %20
    pop_ebx               # =
    mov_[ebx],eax
    pop_eax               # ;
    push_eax              # __var_args (local)
    lea_eax,[ebp+DWORD] %72
    push_eax              # 4
    mov_eax, %4
    pop_ebx               # +
    add_eax,ebx
    push_eax              # token (global)
    mov_eax, &g_token
    pop_ebx               # =
    mov_[ebx],eax
    pop_eax               # ;
    push_eax              # __var_args (local)
    lea_eax,[ebp+DWORD] %72
    push_eax              # fprintf (function)
    mov_eax, &f_fprintf
    add_ebp, %80         # ()
    call_eax
    sub_ebp, %80
    pop_eax               # ;
    jmp %_main_else_end99
:_main_else99
# stack_c.c 917
    push_eax              # sym (global)
    mov_eax, &g_sym
    mov_al,[eax]          # ?1
    movzx_eax,al
    movsx_eax,al          # char
    push_eax              # 97
    mov_eax, %97
    push_eax              # 0
    mov_eax, %0
    pop_ebx               # +
    add_eax,ebx
    pop_ebx               # ==
    cmp_eax_ebx
    sete_al
    movzx_eax,al
    test_eax,eax          # if
    pop_eax
    je %_main_else101
# stack_c.c 918
# stack_c.c 919
    push_eax              # fout (global)
    mov_eax, &g_fout
    mov_eax,[eax]         # ?
    push_eax              # '\tpop_ebx               # =:\n\tmov_[eax],ebx\n\tpop_eax\n'
    mov_eax, &string_86
    push_eax              # 0
    mov_eax, %0
    push_eax              # fprintf (function)
    mov_eax, &f_fprintf
    add_ebp, %72         # ()
    call_eax
    sub_ebp, %72
    pop_eax               # ;
    jmp %_main_else_end101
:_main_else101
# stack_c.c 921
    push_eax              # sym (global)
    mov_eax, &g_sym
    mov_al,[eax]          # ?1
    movzx_eax,al
    movsx_eax,al          # char
    push_eax              # 97
    mov_eax, %97
    push_eax              # 1
    mov_eax, %1
    pop_ebx               # +
    add_eax,ebx
    pop_ebx               # ==
    cmp_eax_ebx
    sete_al
    movzx_eax,al
    test_eax,eax          # if
    pop_eax
    je %_main_else102
# stack_c.c 922
# stack_c.c 923
    push_eax              # fout (global)
    mov_eax, &g_fout
    mov_eax,[eax]         # ?
    push_eax              # '\tmov_al,[eax]          # ?1\n\tmovzx_eax,al\n'
    mov_eax, &string_87
    push_eax              # 0
    mov_eax, %0
    push_eax              # fprintf (function)
    mov_eax, &f_fprintf
    add_ebp, %72         # ()
    call_eax
    sub_ebp, %72
    pop_eax               # ;
    jmp %_main_else_end102
:_main_else102
# stack_c.c 925
    push_eax              # sym (global)
    mov_eax, &g_sym
    mov_al,[eax]          # ?1
    movzx_eax,al
    movsx_eax,al          # char
    push_eax              # 97
    mov_eax, %97
    push_eax              # 2
    mov_eax, %2
    pop_ebx               # +
    add_eax,ebx
    pop_ebx               # ==
    cmp_eax_ebx
    sete_al
    movzx_eax,al
    test_eax,eax          # if
    pop_eax
    je %_main_else103
# stack_c.c 926
# stack_c.c 927
    push_eax              # fout (global)
    mov_eax, &g_fout
    mov_eax,[eax]         # ?
    push_eax              # '\tmov_ax,[eax]          # ?2\n\tand_eax, %%65535\n'
    mov_eax, &string_88
    push_eax              # 0
    mov_eax, %0
    push_eax              # fprintf (function)
    mov_eax, &f_fprintf
    add_ebp, %72         # ()
    call_eax
    sub_ebp, %72
    pop_eax               # ;
    jmp %_main_else_end103
:_main_else103
# stack_c.c 929
    push_eax              # sym (global)
    mov_eax, &g_sym
    mov_al,[eax]          # ?1
    movzx_eax,al
    movsx_eax,al          # char
    push_eax              # 75
    mov_eax, %75
    pop_ebx               # ==
    cmp_eax_ebx
    sete_al
    movzx_eax,al
    test_eax,eax          # if
    pop_eax
    je %_main_else104
# stack_c.c 930
# stack_c.c 931
    push_eax              # fout (global)
    mov_eax, &g_fout
    mov_eax,[eax]         # ?
    push_eax              # '\tmovsx_eax,al          # char\n'
    mov_eax, &string_89
    push_eax              # 0
    mov_eax, %0
    push_eax              # fprintf (function)
    mov_eax, &f_fprintf
    add_ebp, %72         # ()
    call_eax
    sub_ebp, %72
    pop_eax               # ;
    jmp %_main_else_end104
:_main_else104
# stack_c.c 933
    push_eax              # sym (global)
    mov_eax, &g_sym
    mov_al,[eax]          # ?1
    movzx_eax,al
    movsx_eax,al          # char
    push_eax              # 97
    mov_eax, %97
    push_eax              # 3
    mov_eax, %3
    pop_ebx               # +
    add_eax,ebx
    pop_ebx               # ==
    cmp_eax_ebx
    sete_al
    movzx_eax,al
    test_eax,eax          # if
    pop_eax
    je %_main_else105
# stack_c.c 934
# stack_c.c 935
    push_eax              # fout (global)
    mov_eax, &g_fout
    mov_eax,[eax]         # ?
    push_eax              # '\tpop_ebx               # =1\n\tmov_[ebx],al\n'
    mov_eax, &string_90
    push_eax              # 0
    mov_eax, %0
    push_eax              # fprintf (function)
    mov_eax, &f_fprintf
    add_ebp, %72         # ()
    call_eax
    sub_ebp, %72
    pop_eax               # ;
    jmp %_main_else_end105
:_main_else105
# stack_c.c 937
    push_eax              # sym (global)
    mov_eax, &g_sym
    mov_al,[eax]          # ?1
    movzx_eax,al
    movsx_eax,al          # char
    push_eax              # 97
    mov_eax, %97
    push_eax              # 4
    mov_eax, %4
    pop_ebx               # +
    add_eax,ebx
    pop_ebx               # ==
    cmp_eax_ebx
    sete_al
    movzx_eax,al
    test_eax,eax          # if
    pop_eax
    je %_main_else106
# stack_c.c 938
# stack_c.c 939
    push_eax              # fout (global)
    mov_eax, &g_fout
    mov_eax,[eax]         # ?
    push_eax              # '\tpop_ebx               # =2\n\tmov_[ebx],ax\n'
    mov_eax, &string_91
    push_eax              # 0
    mov_eax, %0
    push_eax              # fprintf (function)
    mov_eax, &f_fprintf
    add_ebp, %72         # ()
    call_eax
    sub_ebp, %72
    pop_eax               # ;
    jmp %_main_else_end106
:_main_else106
# stack_c.c 941
    push_eax              # sym (global)
    mov_eax, &g_sym
    mov_al,[eax]          # ?1
    movzx_eax,al
    movsx_eax,al          # char
    push_eax              # 97
    mov_eax, %97
    push_eax              # 5
    mov_eax, %5
    pop_ebx               # +
    add_eax,ebx
    pop_ebx               # ==
    cmp_eax_ebx
    sete_al
    movzx_eax,al
    test_eax,eax          # if
    pop_eax
    je %_main_else107
# stack_c.c 942
# stack_c.c 945
    push_eax              # fout (global)
    mov_eax, &g_fout
    mov_eax,[eax]         # ?
    push_eax              # '\tadd_ebp, %%%d         # ()\n\tcall_eax\n\tsub_ebp, %%%d\n'
    mov_eax, &string_92
    push_eax              # __var_args (local)
    lea_eax,[ebp+DWORD] %72
    push_eax              # 4
    mov_eax, %4
    push_eax              # pos (global)
    mov_eax, &g_pos
    mov_eax,[eax]         # ?
    pop_ebx               # *
    mul_ebx
    pop_ebx               # =
    mov_[ebx],eax
    pop_eax               # ;
    push_eax              # __var_args (local)
    lea_eax,[ebp+DWORD] %72
    push_eax              # 4
    mov_eax, %4
    pop_ebx               # +
    add_eax,ebx
    push_eax              # 4
    mov_eax, %4
    push_eax              # pos (global)
    mov_eax, &g_pos
    mov_eax,[eax]         # ?
    pop_ebx               # *
    mul_ebx
    pop_ebx               # =
    mov_[ebx],eax
    pop_eax               # ;
    push_eax              # __var_args (local)
    lea_eax,[ebp+DWORD] %72
    push_eax              # fprintf (function)
    mov_eax, &f_fprintf
    add_ebp, %80         # ()
    call_eax
    sub_ebp, %80
    pop_eax               # ;
    jmp %_main_else_end107
:_main_else107
# stack_c.c 947
    push_eax              # sym (global)
    mov_eax, &g_sym
    mov_al,[eax]          # ?1
    movzx_eax,al
    movsx_eax,al          # char
    push_eax              # 97
    mov_eax, %97
    push_eax              # 6
    mov_eax, %6
    pop_ebx               # +
    add_eax,ebx
    pop_ebx               # ==
    cmp_eax_ebx
    sete_al
    movzx_eax,al
    test_eax,eax          # if
    pop_eax
    je %_main_else108
# stack_c.c 948
# stack_c.c 949
    push_eax              # fout (global)
    mov_eax, &g_fout
    mov_eax,[eax]         # ?
    push_eax              # '\tmov_ebx,eax           # /s\n\tpop_eax\n\tcdq\n\tidiv_ebx\n'
    mov_eax, &string_93
    push_eax              # 0
    mov_eax, %0
    push_eax              # fprintf (function)
    mov_eax, &f_fprintf
    add_ebp, %72         # ()
    call_eax
    sub_ebp, %72
    pop_eax               # ;
    jmp %_main_else_end108
:_main_else108
# stack_c.c 951
    push_eax              # sym (global)
    mov_eax, &g_sym
    mov_al,[eax]          # ?1
    movzx_eax,al
    movsx_eax,al          # char
    push_eax              # 97
    mov_eax, %97
    push_eax              # 7
    mov_eax, %7
    pop_ebx               # +
    add_eax,ebx
    pop_ebx               # ==
    cmp_eax_ebx
    sete_al
    movzx_eax,al
    test_eax,eax          # if
    pop_eax
    je %_main_else109
# stack_c.c 952
# stack_c.c 953
    push_eax              # fout (global)
    mov_eax, &g_fout
    mov_eax,[eax]         # ?
    push_eax              # '\tmov_ebx,eax           # %%s\n\tpop_eax\n\tcdq\n\tidiv_ebx\n\tmov_eax,edx'
    mov_eax, &string_94
    push_eax              # 0
    mov_eax, %0
    push_eax              # fprintf (function)
    mov_eax, &f_fprintf
    add_ebp, %72         # ()
    call_eax
    sub_ebp, %72
    pop_eax               # ;
    jmp %_main_else_end109
:_main_else109
# stack_c.c 955
    push_eax              # sym (global)
    mov_eax, &g_sym
    mov_al,[eax]          # ?1
    movzx_eax,al
    movsx_eax,al          # char
    push_eax              # 97
    mov_eax, %97
    push_eax              # 8
    mov_eax, %8
    pop_ebx               # +
    add_eax,ebx
    pop_ebx               # ==
    cmp_eax_ebx
    sete_al
    movzx_eax,al
    test_eax,eax          # if
    pop_eax
    je %_main_else110
# stack_c.c 956
# stack_c.c 957
    push_eax              # fout (global)
    mov_eax, &g_fout
    mov_eax,[eax]         # ?
    push_eax              # '\tpop_ebx               # ==\n\tcmp_eax_ebx\n\tsete_al\n\tmovzx_eax,al\n'
    mov_eax, &string_95
    push_eax              # 0
    mov_eax, %0
    push_eax              # fprintf (function)
    mov_eax, &f_fprintf
    add_ebp, %72         # ()
    call_eax
    sub_ebp, %72
    pop_eax               # ;
    jmp %_main_else_end110
:_main_else110
# stack_c.c 959
    push_eax              # sym (global)
    mov_eax, &g_sym
    mov_al,[eax]          # ?1
    movzx_eax,al
    movsx_eax,al          # char
    push_eax              # 97
    mov_eax, %97
    push_eax              # 9
    mov_eax, %9
    pop_ebx               # +
    add_eax,ebx
    pop_ebx               # ==
    cmp_eax_ebx
    sete_al
    movzx_eax,al
    test_eax,eax          # if
    pop_eax
    je %_main_else111
# stack_c.c 960
# stack_c.c 961
    push_eax              # fout (global)
    mov_eax, &g_fout
    mov_eax,[eax]         # ?
    push_eax              # '\tpop_ebx               # !=\n\tcmp_eax_ebx\n\tsetne_al\n\tmovzx_eax,al\n'
    mov_eax, &string_96
    push_eax              # 0
    mov_eax, %0
    push_eax              # fprintf (function)
    mov_eax, &f_fprintf
    add_ebp, %72         # ()
    call_eax
    sub_ebp, %72
    pop_eax               # ;
    jmp %_main_else_end111
:_main_else111
# stack_c.c 963
    push_eax              # sym (global)
    mov_eax, &g_sym
    mov_al,[eax]          # ?1
    movzx_eax,al
    movsx_eax,al          # char
    push_eax              # 97
    mov_eax, %97
    push_eax              # 10
    mov_eax, %10
    pop_ebx               # +
    add_eax,ebx
    pop_ebx               # ==
    cmp_eax_ebx
    sete_al
    movzx_eax,al
    test_eax,eax          # if
    pop_eax
    je %_main_else112
# stack_c.c 964
# stack_c.c 965
    push_eax              # fout (global)
    mov_eax, &g_fout
    mov_eax,[eax]         # ?
    push_eax              # '\tpop_ebx               # <=\n\tcmp_eax_ebx\n\tsetbe_al\n\tmovzx_eax,al\n'
    mov_eax, &string_97
    push_eax              # 0
    mov_eax, %0
    push_eax              # fprintf (function)
    mov_eax, &f_fprintf
    add_ebp, %72         # ()
    call_eax
    sub_ebp, %72
    pop_eax               # ;
    jmp %_main_else_end112
:_main_else112
# stack_c.c 967
    push_eax              # sym (global)
    mov_eax, &g_sym
    mov_al,[eax]          # ?1
    movzx_eax,al
    movsx_eax,al          # char
    push_eax              # 97
    mov_eax, %97
    push_eax              # 11
    mov_eax, %11
    pop_ebx               # +
    add_eax,ebx
    pop_ebx               # ==
    cmp_eax_ebx
    sete_al
    movzx_eax,al
    test_eax,eax          # if
    pop_eax
    je %_main_else113
# stack_c.c 968
# stack_c.c 969
    push_eax              # fout (global)
    mov_eax, &g_fout
    mov_eax,[eax]         # ?
    push_eax              # '\tpop_ebx               # >=\n\tcmp_eax_ebx\n\tsetae_al\n\tmovzx_eax,al\n'
    mov_eax, &string_98
    push_eax              # 0
    mov_eax, %0
    push_eax              # fprintf (function)
    mov_eax, &f_fprintf
    add_ebp, %72         # ()
    call_eax
    sub_ebp, %72
    pop_eax               # ;
    jmp %_main_else_end113
:_main_else113
# stack_c.c 971
    push_eax              # sym (global)
    mov_eax, &g_sym
    mov_al,[eax]          # ?1
    movzx_eax,al
    movsx_eax,al          # char
    push_eax              # 97
    mov_eax, %97
    push_eax              # 12
    mov_eax, %12
    pop_ebx               # +
    add_eax,ebx
    pop_ebx               # ==
    cmp_eax_ebx
    sete_al
    movzx_eax,al
    test_eax,eax          # if
    pop_eax
    je %_main_else114
# stack_c.c 972
# stack_c.c 973
    push_eax              # fout (global)
    mov_eax, &g_fout
    mov_eax,[eax]         # ?
    push_eax              # '\tpop_ebx               # <s\n\tcmp_eax_ebx\n\tsetl_al\n\tmovzx_eax,al\n'
    mov_eax, &string_99
    push_eax              # 0
    mov_eax, %0
    push_eax              # fprintf (function)
    mov_eax, &f_fprintf
    add_ebp, %72         # ()
    call_eax
    sub_ebp, %72
    pop_eax               # ;
    jmp %_main_else_end114
:_main_else114
# stack_c.c 975
    push_eax              # sym (global)
    mov_eax, &g_sym
    mov_al,[eax]          # ?1
    movzx_eax,al
    movsx_eax,al          # char
    push_eax              # 97
    mov_eax, %97
    push_eax              # 13
    mov_eax, %13
    pop_ebx               # +
    add_eax,ebx
    pop_ebx               # ==
    cmp_eax_ebx
    sete_al
    movzx_eax,al
    test_eax,eax          # if
    pop_eax
    je %_main_else115
# stack_c.c 976
# stack_c.c 977
    push_eax              # fout (global)
    mov_eax, &g_fout
    mov_eax,[eax]         # ?
    push_eax              # '\tpop_ebx               # <=s\n\tcmp_eax_ebx\n\tsetle_al\n\tmovzx_eax,al\n'
    mov_eax, &string_100
    push_eax              # 0
    mov_eax, %0
    push_eax              # fprintf (function)
    mov_eax, &f_fprintf
    add_ebp, %72         # ()
    call_eax
    sub_ebp, %72
    pop_eax               # ;
    jmp %_main_else_end115
:_main_else115
# stack_c.c 979
    push_eax              # sym (global)
    mov_eax, &g_sym
    mov_al,[eax]          # ?1
    movzx_eax,al
    movsx_eax,al          # char
    push_eax              # 97
    mov_eax, %97
    push_eax              # 14
    mov_eax, %14
    pop_ebx               # +
    add_eax,ebx
    pop_ebx               # ==
    cmp_eax_ebx
    sete_al
    movzx_eax,al
    test_eax,eax          # if
    pop_eax
    je %_main_else116
# stack_c.c 980
# stack_c.c 981
    push_eax              # fout (global)
    mov_eax, &g_fout
    mov_eax,[eax]         # ?
    push_eax              # '\tpop_ebx               # >s\n\tcmp_eax_ebx\n\tsetg_al\n\tmovzx_eax,al\n'
    mov_eax, &string_101
    push_eax              # 0
    mov_eax, %0
    push_eax              # fprintf (function)
    mov_eax, &f_fprintf
    add_ebp, %72         # ()
    call_eax
    sub_ebp, %72
    pop_eax               # ;
    jmp %_main_else_end116
:_main_else116
# stack_c.c 983
    push_eax              # sym (global)
    mov_eax, &g_sym
    mov_al,[eax]          # ?1
    movzx_eax,al
    movsx_eax,al          # char
    push_eax              # 97
    mov_eax, %97
    push_eax              # 15
    mov_eax, %15
    pop_ebx               # +
    add_eax,ebx
    pop_ebx               # ==
    cmp_eax_ebx
    sete_al
    movzx_eax,al
    test_eax,eax          # if
    pop_eax
    je %_main_else117
# stack_c.c 984
# stack_c.c 985
    push_eax              # fout (global)
    mov_eax, &g_fout
    mov_eax,[eax]         # ?
    push_eax              # '\tpop_ebx               # >=sfv\n\tcmp_eax_ebx\n\tsetge_al\n\tmovzx_eax,al\n'
    mov_eax, &string_102
    push_eax              # 0
    mov_eax, %0
    push_eax              # fprintf (function)
    mov_eax, &f_fprintf
    add_ebp, %72         # ()
    call_eax
    sub_ebp, %72
    pop_eax               # ;
    jmp %_main_else_end117
:_main_else117
# stack_c.c 987
    push_eax              # sym (global)
    mov_eax, &g_sym
    mov_al,[eax]          # ?1
    movzx_eax,al
    movsx_eax,al          # char
    push_eax              # 97
    mov_eax, %97
    push_eax              # 16
    mov_eax, %16
    pop_ebx               # +
    add_eax,ebx
    pop_ebx               # ==
    cmp_eax_ebx
    sete_al
    movzx_eax,al
    test_eax,eax          # if
    pop_eax
    je %_main_else118
# stack_c.c 988
# stack_c.c 989
    push_eax              # fout (global)
    mov_eax, &g_fout
    mov_eax,[eax]         # ?
    push_eax              # '\tmov_ecx,eax           # <<\n\tpop_eax\n\tshl_eax,cl\n'
    mov_eax, &string_103
    push_eax              # 0
    mov_eax, %0
    push_eax              # fprintf (function)
    mov_eax, &f_fprintf
    add_ebp, %72         # ()
    call_eax
    sub_ebp, %72
    pop_eax               # ;
    jmp %_main_else_end118
:_main_else118
# stack_c.c 991
    push_eax              # sym (global)
    mov_eax, &g_sym
    mov_al,[eax]          # ?1
    movzx_eax,al
    movsx_eax,al          # char
    push_eax              # 97
    mov_eax, %97
    push_eax              # 17
    mov_eax, %17
    pop_ebx               # +
    add_eax,ebx
    pop_ebx               # ==
    cmp_eax_ebx
    sete_al
    movzx_eax,al
    test_eax,eax          # if
    pop_eax
    je %_main_else119
# stack_c.c 992
# stack_c.c 993
    push_eax              # fout (global)
    mov_eax, &g_fout
    mov_eax,[eax]         # ?
    push_eax              # '\tmov_ecx,eax           # >>\n\tpop_eax\n\tshr_eax,cl\n'
    mov_eax, &string_104
    push_eax              # 0
    mov_eax, %0
    push_eax              # fprintf (function)
    mov_eax, &f_fprintf
    add_ebp, %72         # ()
    call_eax
    sub_ebp, %72
    pop_eax               # ;
    jmp %_main_else_end119
:_main_else119
# stack_c.c 995
    push_eax              # sym (global)
    mov_eax, &g_sym
    mov_al,[eax]          # ?1
    movzx_eax,al
    movsx_eax,al          # char
    push_eax              # 97
    mov_eax, %97
    push_eax              # 18
    mov_eax, %18
    pop_ebx               # +
    add_eax,ebx
    pop_ebx               # ==
    cmp_eax_ebx
    sete_al
    movzx_eax,al
    test_eax,eax          # if
    pop_eax
    je %_main_else120
# stack_c.c 996
# stack_c.c 997
    push_eax              # get_token (function)
    mov_eax, &f_get_token
    add_ebp, %72         # ()
    call_eax
    sub_ebp, %72
    pop_eax               # ;
# stack_c.c 998
    push_eax              # sym (global)
    mov_eax, &g_sym
    mov_al,[eax]          # ?1
    movzx_eax,al
    movsx_eax,al          # char
    push_eax              # 123
    mov_eax, %123
    pop_ebx               # !=
    cmp_eax_ebx
    setne_al
    movzx_eax,al
    test_eax,eax          # if
    pop_eax
    je %_main_else121
# stack_c.c 999
# stack_c.c 1000
    push_eax              # ferr (global)
    mov_eax, &g_ferr
    mov_eax,[eax]         # ?
    push_eax              # 'ERROR %d.%d: expecting '{' after '&&'\n'
    mov_eax, &string_105
    push_eax              # __var_args (local)
    lea_eax,[ebp+DWORD] %72
    push_eax              # cur_line (global)
    mov_eax, &g_cur_line
    mov_eax,[eax]         # ?
    pop_ebx               # =
    mov_[ebx],eax
    pop_eax               # ;
    push_eax              # __var_args (local)
    lea_eax,[ebp+DWORD] %72
    push_eax              # 4
    mov_eax, %4
    pop_ebx               # +
    add_eax,ebx
    push_eax              # cur_column (global)
    mov_eax, &g_cur_column
    mov_eax,[eax]         # ?
    pop_ebx               # =
    mov_[ebx],eax
    pop_eax               # ;
    push_eax              # __var_args (local)
    lea_eax,[ebp+DWORD] %72
    push_eax              # fprintf (function)
    mov_eax, &f_fprintf
    add_ebp, %80         # ()
    call_eax
    sub_ebp, %80
    pop_eax               # ;
# stack_c.c 1001
    push_eax              # 1
    mov_eax, %1
    mov_ebx,[ebp]         # return
    push_ebx
    ret
# stack_c.c 1003
:_main_else121 # no else
    push_eax              # fout (global)
    mov_eax, &g_fout
    mov_eax,[eax]         # ?
    push_eax              # '\ttest_eax,eax          # &&\n\tje %%_%s_and_end%d\n\tpop_eax\n'
    mov_eax, &string_106
    push_eax              # __var_args (local)
    lea_eax,[ebp+DWORD] %72
    push_eax              # function_name (local)
    lea_eax,[ebp+DWORD] %20
    pop_ebx               # =
    mov_[ebx],eax
    pop_eax               # ;
    push_eax              # __var_args (local)
    lea_eax,[ebp+DWORD] %72
    push_eax              # 4
    mov_eax, %4
    pop_ebx               # +
    add_eax,ebx
    push_eax              # id (local)
    lea_eax,[ebp+DWORD] %16
    mov_eax,[eax]         # ?
    pop_ebx               # =
    mov_[ebx],eax
    pop_eax               # ;
    push_eax              # __var_args (local)
    lea_eax,[ebp+DWORD] %72
    push_eax              # fprintf (function)
    mov_eax, &f_fprintf
    add_ebp, %80         # ()
    call_eax
    sub_ebp, %80
    pop_eax               # ;
# stack_c.c 1004
    push_eax              # nesting_depth (global)
    mov_eax, &g_nesting_depth
    mov_eax,[eax]         # ?
    push_eax              # 100
    mov_eax, %100
    pop_ebx               # >=sfv
    cmp_eax_ebx
    setge_al
    movzx_eax,al
    test_eax,eax          # if
    pop_eax
    je %_main_else122
# stack_c.c 1005
# stack_c.c 1006
    push_eax              # ferr (global)
    mov_eax, &g_ferr
    mov_eax,[eax]         # ?
    push_eax              # 'ERROR %d.%d: Nesting deeper than %d\n'
    mov_eax, &string_38
    push_eax              # __var_args (local)
    lea_eax,[ebp+DWORD] %72
    push_eax              # cur_line (global)
    mov_eax, &g_cur_line
    mov_eax,[eax]         # ?
    pop_ebx               # =
    mov_[ebx],eax
    pop_eax               # ;
    push_eax              # __var_args (local)
    lea_eax,[ebp+DWORD] %72
    push_eax              # 4
    mov_eax, %4
    pop_ebx               # +
    add_eax,ebx
    push_eax              # cur_column (global)
    mov_eax, &g_cur_column
    mov_eax,[eax]         # ?
    pop_ebx               # =
    mov_[ebx],eax
    pop_eax               # ;
    push_eax              # __var_args (local)
    lea_eax,[ebp+DWORD] %72
    push_eax              # 8
    mov_eax, %8
    pop_ebx               # +
    add_eax,ebx
    push_eax              # 100
    mov_eax, %100
    pop_ebx               # =
    mov_[ebx],eax
    pop_eax               # ;
    push_eax              # __var_args (local)
    lea_eax,[ebp+DWORD] %72
    push_eax              # fprintf (function)
    mov_eax, &f_fprintf
    add_ebp, %84         # ()
    call_eax
    sub_ebp, %84
    pop_eax               # ;
# stack_c.c 1007
    push_eax              # 1
    mov_eax, %1
    mov_ebx,[ebp]         # return
    push_ebx
    ret
# stack_c.c 1009
:_main_else122 # no else
    push_eax              # nesting_type (global)
    mov_eax, &g_nesting_type
    push_eax              # nesting_depth (global)
    mov_eax, &g_nesting_depth
    mov_eax,[eax]         # ?
    pop_ebx               # +
    add_eax,ebx
    push_eax              # 65
    mov_eax, %65
    pop_ebx               # =1
    mov_[ebx],al
    pop_eax               # ;
# stack_c.c 1010
    push_eax              # nesting_id (global)
    mov_eax, &g_nesting_id
    push_eax              # nesting_depth (global)
    mov_eax, &g_nesting_depth
    mov_eax,[eax]         # ?
    push_eax              # 4
    mov_eax, %4
    pop_ebx               # *
    mul_ebx
    pop_ebx               # +
    add_eax,ebx
    push_eax              # id (local)
    lea_eax,[ebp+DWORD] %16
    push_eax              # $ (dup)
    mov_eax,[eax]         # ?
    push_eax              # 1
    mov_eax, %1
    pop_ebx               # +
    add_eax,ebx
    pop_ebx               # =
    mov_[ebx],eax
    push_eax              # 1
    mov_eax, %1
    pop_ebx               # -
    sub_ebx,eax
    mov_eax,ebx
    pop_ebx               # =
    mov_[ebx],eax
    pop_eax               # ;
# stack_c.c 1011
    push_eax              # nesting_nr_vars (global)
    mov_eax, &g_nesting_nr_vars
    push_eax              # nesting_depth (global)
    mov_eax, &g_nesting_depth
    mov_eax,[eax]         # ?
    push_eax              # 4
    mov_eax, %4
    pop_ebx               # *
    mul_ebx
    pop_ebx               # +
    add_eax,ebx
    push_eax              # nr_idents (global)
    mov_eax, &g_nr_idents
    mov_eax,[eax]         # ?
    pop_ebx               # =
    mov_[ebx],eax
    pop_eax               # ;
# stack_c.c 1012
    push_eax              # nesting_pos (global)
    mov_eax, &g_nesting_pos
    push_eax              # nesting_depth (global)
    mov_eax, &g_nesting_depth
    mov_eax,[eax]         # ?
    push_eax              # 4
    mov_eax, %4
    pop_ebx               # *
    mul_ebx
    pop_ebx               # +
    add_eax,ebx
    push_eax              # pos (global)
    mov_eax, &g_pos
    mov_eax,[eax]         # ?
    pop_ebx               # =
    mov_[ebx],eax
    pop_eax               # ;
# stack_c.c 1013
    push_eax              # nesting_depth (global)
    mov_eax, &g_nesting_depth
    push_eax              # $ (dup)
    mov_eax,[eax]         # ?
    push_eax              # 1
    mov_eax, %1
    pop_ebx               # +
    add_eax,ebx
    pop_ebx               # =
    mov_[ebx],eax
    push_eax              # 1
    mov_eax, %1
    pop_ebx               # -
    sub_ebx,eax
    mov_eax,ebx
    pop_eax               # ;
    jmp %_main_else_end120
:_main_else120
# stack_c.c 1015
    push_eax              # sym (global)
    mov_eax, &g_sym
    mov_al,[eax]          # ?1
    movzx_eax,al
    movsx_eax,al          # char
    push_eax              # 97
    mov_eax, %97
    push_eax              # 19
    mov_eax, %19
    pop_ebx               # +
    add_eax,ebx
    pop_ebx               # ==
    cmp_eax_ebx
    sete_al
    movzx_eax,al
    test_eax,eax          # if
    pop_eax
    je %_main_else123
# stack_c.c 1016
# stack_c.c 1017
    push_eax              # get_token (function)
    mov_eax, &f_get_token
    add_ebp, %72         # ()
    call_eax
    sub_ebp, %72
    pop_eax               # ;
# stack_c.c 1018
    push_eax              # sym (global)
    mov_eax, &g_sym
    mov_al,[eax]          # ?1
    movzx_eax,al
    movsx_eax,al          # char
    push_eax              # 123
    mov_eax, %123
    pop_ebx               # !=
    cmp_eax_ebx
    setne_al
    movzx_eax,al
    test_eax,eax          # if
    pop_eax
    je %_main_else124
# stack_c.c 1019
# stack_c.c 1020
    push_eax              # ferr (global)
    mov_eax, &g_ferr
    mov_eax,[eax]         # ?
    push_eax              # 'ERROR %d.%d: expecting '{' after '||'\n'
    mov_eax, &string_107
    push_eax              # __var_args (local)
    lea_eax,[ebp+DWORD] %72
    push_eax              # cur_line (global)
    mov_eax, &g_cur_line
    mov_eax,[eax]         # ?
    pop_ebx               # =
    mov_[ebx],eax
    pop_eax               # ;
    push_eax              # __var_args (local)
    lea_eax,[ebp+DWORD] %72
    push_eax              # 4
    mov_eax, %4
    pop_ebx               # +
    add_eax,ebx
    push_eax              # cur_column (global)
    mov_eax, &g_cur_column
    mov_eax,[eax]         # ?
    pop_ebx               # =
    mov_[ebx],eax
    pop_eax               # ;
    push_eax              # __var_args (local)
    lea_eax,[ebp+DWORD] %72
    push_eax              # fprintf (function)
    mov_eax, &f_fprintf
    add_ebp, %80         # ()
    call_eax
    sub_ebp, %80
    pop_eax               # ;
# stack_c.c 1021
    push_eax              # 1
    mov_eax, %1
    mov_ebx,[ebp]         # return
    push_ebx
    ret
# stack_c.c 1023
:_main_else124 # no else
    push_eax              # fout (global)
    mov_eax, &g_fout
    mov_eax,[eax]         # ?
    push_eax              # '\ttest_eax,eax          # ||\n\tjne %%_%s_or_end%d\n\tpop_eax\n'
    mov_eax, &string_108
    push_eax              # __var_args (local)
    lea_eax,[ebp+DWORD] %72
    push_eax              # function_name (local)
    lea_eax,[ebp+DWORD] %20
    pop_ebx               # =
    mov_[ebx],eax
    pop_eax               # ;
    push_eax              # __var_args (local)
    lea_eax,[ebp+DWORD] %72
    push_eax              # 4
    mov_eax, %4
    pop_ebx               # +
    add_eax,ebx
    push_eax              # id (local)
    lea_eax,[ebp+DWORD] %16
    mov_eax,[eax]         # ?
    pop_ebx               # =
    mov_[ebx],eax
    pop_eax               # ;
    push_eax              # __var_args (local)
    lea_eax,[ebp+DWORD] %72
    push_eax              # fprintf (function)
    mov_eax, &f_fprintf
    add_ebp, %80         # ()
    call_eax
    sub_ebp, %80
    pop_eax               # ;
# stack_c.c 1024
    push_eax              # nesting_depth (global)
    mov_eax, &g_nesting_depth
    mov_eax,[eax]         # ?
    push_eax              # 100
    mov_eax, %100
    pop_ebx               # >=sfv
    cmp_eax_ebx
    setge_al
    movzx_eax,al
    test_eax,eax          # if
    pop_eax
    je %_main_else125
# stack_c.c 1025
# stack_c.c 1026
    push_eax              # ferr (global)
    mov_eax, &g_ferr
    mov_eax,[eax]         # ?
    push_eax              # 'ERROR %d.%d: Nesting deeper than %d\n'
    mov_eax, &string_38
    push_eax              # __var_args (local)
    lea_eax,[ebp+DWORD] %72
    push_eax              # cur_line (global)
    mov_eax, &g_cur_line
    mov_eax,[eax]         # ?
    pop_ebx               # =
    mov_[ebx],eax
    pop_eax               # ;
    push_eax              # __var_args (local)
    lea_eax,[ebp+DWORD] %72
    push_eax              # 4
    mov_eax, %4
    pop_ebx               # +
    add_eax,ebx
    push_eax              # cur_column (global)
    mov_eax, &g_cur_column
    mov_eax,[eax]         # ?
    pop_ebx               # =
    mov_[ebx],eax
    pop_eax               # ;
    push_eax              # __var_args (local)
    lea_eax,[ebp+DWORD] %72
    push_eax              # 8
    mov_eax, %8
    pop_ebx               # +
    add_eax,ebx
    push_eax              # 100
    mov_eax, %100
    pop_ebx               # =
    mov_[ebx],eax
    pop_eax               # ;
    push_eax              # __var_args (local)
    lea_eax,[ebp+DWORD] %72
    push_eax              # fprintf (function)
    mov_eax, &f_fprintf
    add_ebp, %84         # ()
    call_eax
    sub_ebp, %84
    pop_eax               # ;
# stack_c.c 1027
    push_eax              # 1
    mov_eax, %1
    mov_ebx,[ebp]         # return
    push_ebx
    ret
# stack_c.c 1029
:_main_else125 # no else
    push_eax              # nesting_type (global)
    mov_eax, &g_nesting_type
    push_eax              # nesting_depth (global)
    mov_eax, &g_nesting_depth
    mov_eax,[eax]         # ?
    pop_ebx               # +
    add_eax,ebx
    push_eax              # 79
    mov_eax, %79
    pop_ebx               # =1
    mov_[ebx],al
    pop_eax               # ;
# stack_c.c 1030
    push_eax              # nesting_id (global)
    mov_eax, &g_nesting_id
    push_eax              # nesting_depth (global)
    mov_eax, &g_nesting_depth
    mov_eax,[eax]         # ?
    push_eax              # 4
    mov_eax, %4
    pop_ebx               # *
    mul_ebx
    pop_ebx               # +
    add_eax,ebx
    push_eax              # id (local)
    lea_eax,[ebp+DWORD] %16
    push_eax              # $ (dup)
    mov_eax,[eax]         # ?
    push_eax              # 1
    mov_eax, %1
    pop_ebx               # +
    add_eax,ebx
    pop_ebx               # =
    mov_[ebx],eax
    push_eax              # 1
    mov_eax, %1
    pop_ebx               # -
    sub_ebx,eax
    mov_eax,ebx
    pop_ebx               # =
    mov_[ebx],eax
    pop_eax               # ;
# stack_c.c 1031
    push_eax              # nesting_nr_vars (global)
    mov_eax, &g_nesting_nr_vars
    push_eax              # nesting_depth (global)
    mov_eax, &g_nesting_depth
    mov_eax,[eax]         # ?
    push_eax              # 4
    mov_eax, %4
    pop_ebx               # *
    mul_ebx
    pop_ebx               # +
    add_eax,ebx
    push_eax              # nr_idents (global)
    mov_eax, &g_nr_idents
    mov_eax,[eax]         # ?
    pop_ebx               # =
    mov_[ebx],eax
    pop_eax               # ;
# stack_c.c 1032
    push_eax              # nesting_pos (global)
    mov_eax, &g_nesting_pos
    push_eax              # nesting_depth (global)
    mov_eax, &g_nesting_depth
    mov_eax,[eax]         # ?
    push_eax              # 4
    mov_eax, %4
    pop_ebx               # *
    mul_ebx
    pop_ebx               # +
    add_eax,ebx
    push_eax              # pos (global)
    mov_eax, &g_pos
    mov_eax,[eax]         # ?
    pop_ebx               # =
    mov_[ebx],eax
    pop_eax               # ;
# stack_c.c 1033
    push_eax              # nesting_depth (global)
    mov_eax, &g_nesting_depth
    push_eax              # $ (dup)
    mov_eax,[eax]         # ?
    push_eax              # 1
    mov_eax, %1
    pop_ebx               # +
    add_eax,ebx
    pop_ebx               # =
    mov_[ebx],eax
    push_eax              # 1
    mov_eax, %1
    pop_ebx               # -
    sub_ebx,eax
    mov_eax,ebx
    pop_eax               # ;
    jmp %_main_else_end123
:_main_else123
# stack_c.c 1035
    push_eax              # sym (global)
    mov_eax, &g_sym
    mov_al,[eax]          # ?1
    movzx_eax,al
    movsx_eax,al          # char
    push_eax              # 97
    mov_eax, %97
    push_eax              # 20
    mov_eax, %20
    pop_ebx               # +
    add_eax,ebx
    pop_ebx               # ==
    cmp_eax_ebx
    sete_al
    movzx_eax,al
    test_eax,eax          # if
    pop_eax
    je %_main_else126
# stack_c.c 1036
# stack_c.c 1037
    push_eax              # get_token (function)
    mov_eax, &f_get_token
    add_ebp, %72         # ()
    call_eax
    sub_ebp, %72
    pop_eax               # ;
# stack_c.c 1038
    push_eax              # sym (global)
    mov_eax, &g_sym
    mov_al,[eax]          # ?1
    movzx_eax,al
    movsx_eax,al          # char
    push_eax              # 65
    mov_eax, %65
    pop_ebx               # !=
    cmp_eax_ebx
    setne_al
    movzx_eax,al
    test_eax,eax          # if
    pop_eax
    je %_main_else127
# stack_c.c 1039
# stack_c.c 1040
    push_eax              # ferr (global)
    mov_eax, &g_ferr
    mov_eax,[eax]         # ?
    push_eax              # 'ERROR %d.%d: Expecting const ident after '->'. Found %s\n'
    mov_eax, &string_109
    push_eax              # __var_args (local)
    lea_eax,[ebp+DWORD] %72
    push_eax              # cur_line (global)
    mov_eax, &g_cur_line
    mov_eax,[eax]         # ?
    pop_ebx               # =
    mov_[ebx],eax
    pop_eax               # ;
    push_eax              # __var_args (local)
    lea_eax,[ebp+DWORD] %72
    push_eax              # 4
    mov_eax, %4
    pop_ebx               # +
    add_eax,ebx
    push_eax              # cur_column (global)
    mov_eax, &g_cur_column
    mov_eax,[eax]         # ?
    pop_ebx               # =
    mov_[ebx],eax
    pop_eax               # ;
    push_eax              # __var_args (local)
    lea_eax,[ebp+DWORD] %72
    push_eax              # 8
    mov_eax, %8
    pop_ebx               # +
    add_eax,ebx
    push_eax              # token (global)
    mov_eax, &g_token
    pop_ebx               # =
    mov_[ebx],eax
    pop_eax               # ;
    push_eax              # __var_args (local)
    lea_eax,[ebp+DWORD] %72
    push_eax              # fprintf (function)
    mov_eax, &f_fprintf
    add_ebp, %84         # ()
    call_eax
    sub_ebp, %84
    pop_eax               # ;
# stack_c.c 1041
    push_eax              # 1
    mov_eax, %1
    mov_ebx,[ebp]         # return
    push_ebx
    ret
:_main_else127 # no else
    push_eax              # i (local)
    lea_eax,[ebp+DWORD] %72
    push_eax              # nr_idents (global)
    mov_eax, &g_nr_idents
    mov_eax,[eax]         # ?
    push_eax              # 1
    mov_eax, %1
    pop_ebx               # -
    sub_ebx,eax
    mov_eax,ebx
    pop_ebx               # =
    mov_[ebx],eax
    pop_eax               # ;
# stack_c.c 1044
:_main_loop128
    push_eax              # i (local)
    lea_eax,[ebp+DWORD] %72
    mov_eax,[eax]         # ?
    push_eax              # 0
    mov_eax, %0
    pop_ebx               # >=sfv
    cmp_eax_ebx
    setge_al
    movzx_eax,al
    test_eax,eax          # !
    sete_al
    movzx_eax,al
    test_eax,eax          # if
    pop_eax
    je %_main_else129
    jmp %_main_loop_end128
# stack_c.c 1045
:_main_else129 # no else
    push_eax              # token (global)
    mov_eax, &g_token
    push_eax              # idents (global)
    mov_eax, &g_idents
    push_eax              # i (local)
    lea_eax,[ebp+DWORD] %72
    mov_eax,[eax]         # ?
    push_eax              # 68
    mov_eax, %68
    pop_ebx               # *
    mul_ebx
    pop_ebx               # +
    add_eax,ebx
    push_eax              # 4 (const s7_m_name)
    mov_eax, %4
    pop_ebx               # +
    add_eax,ebx
    push_eax              # strcmp (function)
    mov_eax, &f_strcmp
    add_ebp, %76         # ()
    call_eax
    sub_ebp, %76
    push_eax              # 0
    mov_eax, %0
    pop_ebx               # ==
    cmp_eax_ebx
    sete_al
    movzx_eax,al
    test_eax,eax          # if
    pop_eax
    je %_main_else130
# stack_c.c 1046
    jmp %_main_loop_end128
:_main_else130 # no else
    push_eax              # i (local)
    lea_eax,[ebp+DWORD] %72
    push_eax              # $ (dup)
    mov_eax,[eax]         # ?
    push_eax              # 1
    mov_eax, %1
    pop_ebx               # -
    sub_ebx,eax
    mov_eax,ebx
    pop_ebx               # =
    mov_[ebx],eax
    push_eax              # 1
    mov_eax, %1
    pop_ebx               # +
    add_eax,ebx
    pop_eax               # ;
    jmp %_main_loop128
:_main_loop_end128
# stack_c.c 1047
    push_eax              # i (local)
    lea_eax,[ebp+DWORD] %72
    mov_eax,[eax]         # ?
    push_eax              # 0
    mov_eax, %0
    pop_ebx               # >=sfv
    cmp_eax_ebx
    setge_al
    movzx_eax,al
    test_eax,eax          # &&
    je %_main_and_end131
    pop_eax
    push_eax              # idents (global)
    mov_eax, &g_idents
    push_eax              # i (local)
    lea_eax,[ebp+DWORD] %72
    mov_eax,[eax]         # ?
    push_eax              # 68
    mov_eax, %68
    pop_ebx               # *
    mul_ebx
    pop_ebx               # +
    add_eax,ebx
    push_eax              # 0 (const s7_m_type)
    mov_eax, %0
    pop_ebx               # +
    add_eax,ebx
    mov_al,[eax]          # ?1
    movzx_eax,al
    movsx_eax,al          # char
    push_eax              # 67
    mov_eax, %67
    pop_ebx               # ==
    cmp_eax_ebx
    sete_al
    movzx_eax,al
:_main_and_end131
    test_eax,eax          # if
    pop_eax
    je %_main_else132
# stack_c.c 1048
# stack_c.c 1049
    push_eax              # fout (global)
    mov_eax, &g_fout
    mov_eax,[eax]         # ?
    push_eax              # '\tmov_eax,[eax]         # ->\n\tadd_eax, %%%d\n'
    mov_eax, &string_110
    push_eax              # __var_args (local)
    lea_eax,[ebp+DWORD] %76
    push_eax              # idents (global)
    mov_eax, &g_idents
    push_eax              # i (local)
    lea_eax,[ebp+DWORD] %72
    mov_eax,[eax]         # ?
    push_eax              # 68
    mov_eax, %68
    pop_ebx               # *
    mul_ebx
    pop_ebx               # +
    add_eax,ebx
    push_eax              # 64 (const s7_m_value)
    mov_eax, %64
    pop_ebx               # +
    add_eax,ebx
    mov_eax,[eax]         # ?
    pop_ebx               # =
    mov_[ebx],eax
    pop_eax               # ;
    push_eax              # __var_args (local)
    lea_eax,[ebp+DWORD] %76
    push_eax              # fprintf (function)
    mov_eax, &f_fprintf
    add_ebp, %80         # ()
    call_eax
    sub_ebp, %80
    pop_eax               # ;
    jmp %_main_else_end132
:_main_else132
# stack_c.c 1052
# stack_c.c 1053
    push_eax              # ferr (global)
    mov_eax, &g_ferr
    mov_eax,[eax]         # ?
    push_eax              # 'ERROR %d: Ident %s is not defined\n'
    mov_eax, &string_111
    push_eax              # __var_args (local)
    lea_eax,[ebp+DWORD] %76
    push_eax              # cur_line (global)
    mov_eax, &g_cur_line
    mov_eax,[eax]         # ?
    pop_ebx               # =
    mov_[ebx],eax
    pop_eax               # ;
    push_eax              # __var_args (local)
    lea_eax,[ebp+DWORD] %76
    push_eax              # 4
    mov_eax, %4
    pop_ebx               # +
    add_eax,ebx
    push_eax              # token (global)
    mov_eax, &g_token
    pop_ebx               # =
    mov_[ebx],eax
    pop_eax               # ;
    push_eax              # __var_args (local)
    lea_eax,[ebp+DWORD] %76
    push_eax              # fprintf (function)
    mov_eax, &f_fprintf
    add_ebp, %84         # ()
    call_eax
    sub_ebp, %84
    pop_eax               # ;
# stack_c.c 1054
    push_eax              # error (global)
    mov_eax, &g_error
    push_eax              # 1
    mov_eax, %1
    pop_ebx               # =
    mov_[ebx],eax
    pop_eax               # ;
:_main_else_end132
    jmp %_main_else_end126
:_main_else126
# stack_c.c 1057
    push_eax              # sym (global)
    mov_eax, &g_sym
    mov_al,[eax]          # ?1
    movzx_eax,al
    movsx_eax,al          # char
    push_eax              # 97
    mov_eax, %97
    push_eax              # 21
    mov_eax, %21
    pop_ebx               # +
    add_eax,ebx
    pop_ebx               # ==
    cmp_eax_ebx
    sete_al
    movzx_eax,al
    test_eax,eax          # if
    pop_eax
    je %_main_else133
# stack_c.c 1058
# stack_c.c 1059
    push_eax              # fout (global)
    mov_eax, &g_fout
    mov_eax,[eax]         # ?
    push_eax              # '\tmov_ebx,eax          # >< swap\n\tpop_eax\n\tpush_ebx\n'
    mov_eax, &string_112
    push_eax              # 0
    mov_eax, %0
    push_eax              # fprintf (function)
    mov_eax, &f_fprintf
    add_ebp, %72         # ()
    call_eax
    sub_ebp, %72
    pop_eax               # ;
    jmp %_main_else_end133
:_main_else133
# stack_c.c 1062
# stack_c.c 1063
    push_eax              # ferr (global)
    mov_eax, &g_ferr
    mov_eax,[eax]         # ?
    push_eax              # 'ERROR %d.%d: token |%s| not supported\n'
    mov_eax, &string_113
    push_eax              # __var_args (local)
    lea_eax,[ebp+DWORD] %72
    push_eax              # cur_line (global)
    mov_eax, &g_cur_line
    mov_eax,[eax]         # ?
    pop_ebx               # =
    mov_[ebx],eax
    pop_eax               # ;
    push_eax              # __var_args (local)
    lea_eax,[ebp+DWORD] %72
    push_eax              # 4
    mov_eax, %4
    pop_ebx               # +
    add_eax,ebx
    push_eax              # cur_column (global)
    mov_eax, &g_cur_column
    mov_eax,[eax]         # ?
    pop_ebx               # =
    mov_[ebx],eax
    pop_eax               # ;
    push_eax              # __var_args (local)
    lea_eax,[ebp+DWORD] %72
    push_eax              # 8
    mov_eax, %8
    pop_ebx               # +
    add_eax,ebx
    push_eax              # token (global)
    mov_eax, &g_token
    pop_ebx               # =
    mov_[ebx],eax
    pop_eax               # ;
    push_eax              # __var_args (local)
    lea_eax,[ebp+DWORD] %72
    push_eax              # fprintf (function)
    mov_eax, &f_fprintf
    add_ebp, %84         # ()
    call_eax
    sub_ebp, %84
    pop_eax               # ;
# stack_c.c 1064
    push_eax              # error (global)
    mov_eax, &g_error
    push_eax              # 1
    mov_eax, %1
    pop_ebx               # =
    mov_[ebx],eax
    pop_eax               # ;
:_main_else_end133
:_main_else_end126
:_main_else_end123
:_main_else_end120
:_main_else_end119
:_main_else_end118
:_main_else_end117
:_main_else_end116
:_main_else_end115
:_main_else_end114
:_main_else_end113
:_main_else_end112
:_main_else_end111
:_main_else_end110
:_main_else_end109
:_main_else_end108
:_main_else_end107
:_main_else_end106
:_main_else_end105
:_main_else_end104
:_main_else_end103
:_main_else_end102
:_main_else_end101
:_main_else_end99
:_main_else_end98
:_main_else_end97
:_main_else_end96
:_main_else_end95
:_main_else_end94
:_main_else_end93
:_main_else_end92
:_main_else_end91
:_main_else_end90
:_main_else_end89
:_main_else_end88
:_main_else_end86
:_main_else_end85
:_main_else_end84
:_main_else_end81
:_main_else_end80
:_main_else_end79
:_main_else_end69
:_main_else_end67
:_main_else_end66
:_main_else_end65
:_main_else_end64
:_main_else_end54
:_main_else_end53
:_main_else_end52
:_main_else_end49
:_main_else_end43
:_main_else_end39
:_main_else_end30
:_main_else_end25
:_main_else_end16
# stack_c.c 1067
    push_eax              # get_token (function)
    mov_eax, &f_get_token
    add_ebp, %72         # ()
    call_eax
    sub_ebp, %72
    pop_eax               # ;
    jmp %_main_loop13
:_main_loop_end13
# stack_c.c 1070
    push_eax              # fout (global)
    mov_eax, &g_fout
    mov_eax,[eax]         # ?
    push_eax              # '\n:ELF_data\n\n'
    mov_eax, &string_114
    push_eax              # 0
    mov_eax, %0
    push_eax              # fprintf (function)
    mov_eax, &f_fprintf
    add_ebp, %72         # ()
    call_eax
    sub_ebp, %72
    pop_eax               # ;
# stack_c.c 1071
    push_eax              # fout (global)
    mov_eax, &g_fout
    mov_eax,[eax]         # ?
    push_eax              # ':SYS_MALLOC NULL\n'
    mov_eax, &string_115
    push_eax              # 0
    mov_eax, %0
    push_eax              # fprintf (function)
    mov_eax, &f_fprintf
    add_ebp, %72         # ()
    call_eax
    sub_ebp, %72
    pop_eax               # ;
    push_eax              # nr (local)
    lea_eax,[ebp+DWORD] %72
    push_eax              # 0
    mov_eax, %0
    pop_ebx               # =
    mov_[ebx],eax
    pop_eax               # ;
# stack_c.c 1073
    push_eax              # string (local)
    lea_eax,[ebp+DWORD] %76
    push_eax              # strings (global)
    mov_eax, &g_strings
    mov_eax,[eax]         # ?
    pop_ebx               # =
    mov_[ebx],eax
    pop_eax               # ;
:_main_loop134
    push_eax              # string (local)
    lea_eax,[ebp+DWORD] %76
    mov_eax,[eax]         # ?
    push_eax              # 0
    mov_eax, %0
    pop_ebx               # !=
    cmp_eax_ebx
    setne_al
    movzx_eax,al
    test_eax,eax          # !
    sete_al
    movzx_eax,al
    test_eax,eax          # if
    pop_eax
    je %_main_else135
    jmp %_main_loop_end134
# stack_c.c 1074
# stack_c.c 1075
:_main_else135 # no else
    push_eax              # fout (global)
    mov_eax, &g_fout
    mov_eax,[eax]         # ?
    push_eax              # ':string_%d  '
    mov_eax, &string_116
    push_eax              # __var_args (local)
    lea_eax,[ebp+DWORD] %80
    push_eax              # nr (local)
    lea_eax,[ebp+DWORD] %72
    mov_eax,[eax]         # ?
    pop_ebx               # =
    mov_[ebx],eax
    pop_eax               # ;
    push_eax              # __var_args (local)
    lea_eax,[ebp+DWORD] %80
    push_eax              # fprintf (function)
    mov_eax, &f_fprintf
    add_ebp, %84         # ()
    call_eax
    sub_ebp, %84
    pop_eax               # ;
    push_eax              # safe_string (local)
    lea_eax,[ebp+DWORD] %80
    push_eax              # 1
    mov_eax, %1
    pop_ebx               # =
    mov_[ebx],eax
    pop_eax               # ;
# stack_c.c 1077
    push_eax              # i (local)
    lea_eax,[ebp+DWORD] %84
    push_eax              # 0
    mov_eax, %0
    pop_ebx               # =
    mov_[ebx],eax
    pop_eax               # ;
:_main_loop136
    push_eax              # i (local)
    lea_eax,[ebp+DWORD] %84
    mov_eax,[eax]         # ?
    push_eax              # string (local)
    lea_eax,[ebp+DWORD] %76
    mov_eax,[eax]         # ->
    add_eax, %4
    mov_eax,[eax]         # ?
    pop_ebx               # <s
    cmp_eax_ebx
    setl_al
    movzx_eax,al
    test_eax,eax          # !
    sete_al
    movzx_eax,al
    test_eax,eax          # if
    pop_eax
    je %_main_else137
    jmp %_main_loop_end136
# stack_c.c 1078
:_main_else137 # no else
    push_eax              # ch (local)
    lea_eax,[ebp+DWORD] %88
    push_eax              # string (local)
    lea_eax,[ebp+DWORD] %76
    mov_eax,[eax]         # ->
    add_eax, %0
    mov_eax,[eax]         # ?
    push_eax              # i (local)
    lea_eax,[ebp+DWORD] %84
    mov_eax,[eax]         # ?
    pop_ebx               # +
    add_eax,ebx
    mov_al,[eax]          # ?1
    movzx_eax,al
    movsx_eax,al          # char
    pop_ebx               # =1
    mov_[ebx],al
    pop_eax               # ;
# stack_c.c 1080
    push_eax              # ch (local)
    lea_eax,[ebp+DWORD] %88
    mov_al,[eax]          # ?1
    movzx_eax,al
    movsx_eax,al          # char
    push_eax              # 34
    mov_eax, %34
    pop_ebx               # ==
    cmp_eax_ebx
    sete_al
    movzx_eax,al
    test_eax,eax          # ||
    jne %_main_or_end138
    pop_eax
    push_eax              # ch (local)
    lea_eax,[ebp+DWORD] %88
    mov_al,[eax]          # ?1
    movzx_eax,al
    movsx_eax,al          # char
    push_eax              # 32
    mov_eax, %32
    pop_ebx               # <s
    cmp_eax_ebx
    setl_al
    movzx_eax,al
:_main_or_end138
    test_eax,eax          # if
    pop_eax
    je %_main_else139
# stack_c.c 1081
# stack_c.c 1082
    push_eax              # safe_string (local)
    lea_eax,[ebp+DWORD] %80
    push_eax              # 0
    mov_eax, %0
    pop_ebx               # =
    mov_[ebx],eax
    pop_eax               # ;
# stack_c.c 1083
    jmp %_main_loop_end136
:_main_else139 # no else
    push_eax              # i (local)
    lea_eax,[ebp+DWORD] %84
    push_eax              # $ (dup)
    mov_eax,[eax]         # ?
    push_eax              # 1
    mov_eax, %1
    pop_ebx               # +
    add_eax,ebx
    pop_ebx               # =
    mov_[ebx],eax
    push_eax              # 1
    mov_eax, %1
    pop_ebx               # -
    sub_ebx,eax
    mov_eax,ebx
    pop_eax               # ;
    jmp %_main_loop136
:_main_loop_end136
# stack_c.c 1086
    push_eax              # safe_string (local)
    lea_eax,[ebp+DWORD] %80
    mov_eax,[eax]         # ?
    test_eax,eax          # if
    pop_eax
    je %_main_else140
# stack_c.c 1087
    push_eax              # fout (global)
    mov_eax, &g_fout
    mov_eax,[eax]         # ?
    push_eax              # '\"%s\"'
    mov_eax, &string_117
    push_eax              # __var_args (local)
    lea_eax,[ebp+DWORD] %84
    push_eax              # string (local)
    lea_eax,[ebp+DWORD] %76
    mov_eax,[eax]         # ->
    add_eax, %0
    mov_eax,[eax]         # ?
    pop_ebx               # =
    mov_[ebx],eax
    pop_eax               # ;
    push_eax              # __var_args (local)
    lea_eax,[ebp+DWORD] %84
    push_eax              # fprintf (function)
    mov_eax, &f_fprintf
    add_ebp, %88         # ()
    call_eax
    sub_ebp, %88
    pop_eax               # ;
    jmp %_main_else_end140
:_main_else140
# stack_c.c 1089
# stack_c.c 1090
    push_eax              # i (local)
    lea_eax,[ebp+DWORD] %84
    push_eax              # 0
    mov_eax, %0
    pop_ebx               # =
    mov_[ebx],eax
    pop_eax               # ;
:_main_loop141
    push_eax              # i (local)
    lea_eax,[ebp+DWORD] %84
    mov_eax,[eax]         # ?
    push_eax              # string (local)
    lea_eax,[ebp+DWORD] %76
    mov_eax,[eax]         # ->
    add_eax, %4
    mov_eax,[eax]         # ?
    pop_ebx               # <s
    cmp_eax_ebx
    setl_al
    movzx_eax,al
    test_eax,eax          # !
    sete_al
    movzx_eax,al
    test_eax,eax          # if
    pop_eax
    je %_main_else142
    jmp %_main_loop_end141
# stack_c.c 1091
:_main_else142 # no else
    push_eax              # fout (global)
    mov_eax, &g_fout
    mov_eax,[eax]         # ?
    push_eax              # '!%u%s'
    mov_eax, &string_118
    push_eax              # __var_args (local)
    lea_eax,[ebp+DWORD] %88
    push_eax              # string (local)
    lea_eax,[ebp+DWORD] %76
    mov_eax,[eax]         # ->
    add_eax, %0
    mov_eax,[eax]         # ?
    push_eax              # i (local)
    lea_eax,[ebp+DWORD] %84
    mov_eax,[eax]         # ?
    pop_ebx               # +
    add_eax,ebx
    mov_al,[eax]          # ?1
    movzx_eax,al
    movsx_eax,al          # char
    pop_ebx               # =
    mov_[ebx],eax
    pop_eax               # ;
    push_eax              # __var_args (local)
    lea_eax,[ebp+DWORD] %88
    push_eax              # 4
    mov_eax, %4
    pop_ebx               # +
    add_eax,ebx
    push_eax              # i (local)
    lea_eax,[ebp+DWORD] %84
    mov_eax,[eax]         # ?
    push_eax              # 20
    mov_eax, %20
    mov_ebx,eax           # %s
    pop_eax
    cdq
    idiv_ebx
    mov_eax,edx push_eax              # 16
    mov_eax, %16
    pop_ebx               # ==
    cmp_eax_ebx
    sete_al
    movzx_eax,al
    test_eax,eax          # if
    pop_eax
    je %_main_else143
    push_eax              # '\n  '
    mov_eax, &string_119
    jmp %_main_else_end143
:_main_else143
    push_eax              # ' '
    mov_eax, &string_1
:_main_else_end143
    pop_ebx               # =
    mov_[ebx],eax
    pop_eax               # ;
    push_eax              # __var_args (local)
    lea_eax,[ebp+DWORD] %88
    push_eax              # fprintf (function)
    mov_eax, &f_fprintf
    add_ebp, %96         # ()
    call_eax
    sub_ebp, %96
    pop_eax               # ;
    push_eax              # i (local)
    lea_eax,[ebp+DWORD] %84
    push_eax              # $ (dup)
    mov_eax,[eax]         # ?
    push_eax              # 1
    mov_eax, %1
    pop_ebx               # +
    add_eax,ebx
    pop_ebx               # =
    mov_[ebx],eax
    push_eax              # 1
    mov_eax, %1
    pop_ebx               # -
    sub_ebx,eax
    mov_eax,ebx
    pop_eax               # ;
    jmp %_main_loop141
:_main_loop_end141
# stack_c.c 1092
    push_eax              # fout (global)
    mov_eax, &g_fout
    mov_eax,[eax]         # ?
    push_eax              # '!0'
    mov_eax, &string_120
    push_eax              # 0
    mov_eax, %0
    push_eax              # fprintf (function)
    mov_eax, &f_fprintf
    add_ebp, %84         # ()
    call_eax
    sub_ebp, %84
    pop_eax               # ;
:_main_else_end140
# stack_c.c 1094
    push_eax              # fout (global)
    mov_eax, &g_fout
    mov_eax,[eax]         # ?
    push_eax              # '\n'
    mov_eax, &string_2
    push_eax              # 0
    mov_eax, %0
    push_eax              # fprintf (function)
    mov_eax, &f_fprintf
    add_ebp, %84         # ()
    call_eax
    sub_ebp, %84
    pop_eax               # ;
    push_eax              # string (local)
    lea_eax,[ebp+DWORD] %76
    push_eax              # string (local)
    lea_eax,[ebp+DWORD] %76
    mov_eax,[eax]         # ->
    add_eax, %8
    mov_eax,[eax]         # ?
    pop_ebx               # =
    mov_[ebx],eax
    pop_eax               # ;
    push_eax              # nr (local)
    lea_eax,[ebp+DWORD] %72
    push_eax              # $ (dup)
    mov_eax,[eax]         # ?
    push_eax              # 1
    mov_eax, %1
    pop_ebx               # +
    add_eax,ebx
    pop_ebx               # =
    mov_[ebx],eax
    push_eax              # 1
    mov_eax, %1
    pop_ebx               # -
    sub_ebx,eax
    mov_eax,ebx
    pop_eax               # ;
    jmp %_main_loop134
:_main_loop_end134
# stack_c.c 1096
    push_eax              # i (local)
    lea_eax,[ebp+DWORD] %76
    push_eax              # 0
    mov_eax, %0
    pop_ebx               # =
    mov_[ebx],eax
    pop_eax               # ;
:_main_loop144
    push_eax              # i (local)
    lea_eax,[ebp+DWORD] %76
    mov_eax,[eax]         # ?
    push_eax              # nr_idents (global)
    mov_eax, &g_nr_idents
    mov_eax,[eax]         # ?
    pop_ebx               # <s
    cmp_eax_ebx
    setl_al
    movzx_eax,al
    test_eax,eax          # !
    sete_al
    movzx_eax,al
    test_eax,eax          # if
    pop_eax
    je %_main_else145
    jmp %_main_loop_end144
# stack_c.c 1097
:_main_else145 # no else
    push_eax              # idents (global)
    mov_eax, &g_idents
    push_eax              # i (local)
    lea_eax,[ebp+DWORD] %76
    mov_eax,[eax]         # ?
    push_eax              # 68
    mov_eax, %68
    pop_ebx               # *
    mul_ebx
    pop_ebx               # +
    add_eax,ebx
    push_eax              # 0 (const s7_m_type)
    mov_eax, %0
    pop_ebx               # +
    add_eax,ebx
    mov_al,[eax]          # ?1
    movzx_eax,al
    movsx_eax,al          # char
    push_eax              # 71
    mov_eax, %71
    pop_ebx               # ==
    cmp_eax_ebx
    sete_al
    movzx_eax,al
    test_eax,eax          # if
    pop_eax
    je %_main_else146
# stack_c.c 1098
# stack_c.c 1099
    push_eax              # fout (global)
    mov_eax, &g_fout
    mov_eax,[eax]         # ?
    push_eax              # ':g_%s'
    mov_eax, &string_121
    push_eax              # __var_args (local)
    lea_eax,[ebp+DWORD] %80
    push_eax              # idents (global)
    mov_eax, &g_idents
    push_eax              # i (local)
    lea_eax,[ebp+DWORD] %76
    mov_eax,[eax]         # ?
    push_eax              # 68
    mov_eax, %68
    pop_ebx               # *
    mul_ebx
    pop_ebx               # +
    add_eax,ebx
    push_eax              # 4 (const s7_m_name)
    mov_eax, %4
    pop_ebx               # +
    add_eax,ebx
    pop_ebx               # =
    mov_[ebx],eax
    pop_eax               # ;
    push_eax              # __var_args (local)
    lea_eax,[ebp+DWORD] %80
    push_eax              # fprintf (function)
    mov_eax, &f_fprintf
    add_ebp, %84         # ()
    call_eax
    sub_ebp, %84
    pop_eax               # ;
# stack_c.c 1100
    push_eax              # j (local)
    lea_eax,[ebp+DWORD] %80
    push_eax              # 0
    mov_eax, %0
    pop_ebx               # =
    mov_[ebx],eax
    pop_eax               # ;
:_main_loop147
    push_eax              # j (local)
    lea_eax,[ebp+DWORD] %80
    mov_eax,[eax]         # ?
    push_eax              # idents (global)
    mov_eax, &g_idents
    push_eax              # i (local)
    lea_eax,[ebp+DWORD] %76
    mov_eax,[eax]         # ?
    push_eax              # 68
    mov_eax, %68
    pop_ebx               # *
    mul_ebx
    pop_ebx               # +
    add_eax,ebx
    push_eax              # 60 (const s7_m_size)
    mov_eax, %60
    pop_ebx               # +
    add_eax,ebx
    mov_eax,[eax]         # ?
    pop_ebx               # <s
    cmp_eax_ebx
    setl_al
    movzx_eax,al
    test_eax,eax          # !
    sete_al
    movzx_eax,al
    test_eax,eax          # if
    pop_eax
    je %_main_else148
    jmp %_main_loop_end147
# stack_c.c 1101
:_main_else148 # no else
    push_eax              # fout (global)
    mov_eax, &g_fout
    mov_eax,[eax]         # ?
    push_eax              # '%sNULL'
    mov_eax, &string_122
    push_eax              # __var_args (local)
    lea_eax,[ebp+DWORD] %84
    push_eax              # j (local)
    lea_eax,[ebp+DWORD] %80
    mov_eax,[eax]         # ?
    push_eax              # 8
    mov_eax, %8
    mov_ebx,eax           # %s
    pop_eax
    cdq
    idiv_ebx
    mov_eax,edx push_eax              # 0
    mov_eax, %0
    pop_ebx               # ==
    cmp_eax_ebx
    sete_al
    movzx_eax,al
    test_eax,eax          # if
    pop_eax
    je %_main_else149
    push_eax              # '\n\t'
    mov_eax, &string_123
    jmp %_main_else_end149
:_main_else149
    push_eax              # ' '
    mov_eax, &string_1
:_main_else_end149
    pop_ebx               # =
    mov_[ebx],eax
    pop_eax               # ;
    push_eax              # __var_args (local)
    lea_eax,[ebp+DWORD] %84
    push_eax              # fprintf (function)
    mov_eax, &f_fprintf
    add_ebp, %88         # ()
    call_eax
    sub_ebp, %88
    pop_eax               # ;
    push_eax              # j (local)
    lea_eax,[ebp+DWORD] %80
    push_eax              # $ (dup)
    mov_eax,[eax]         # ?
    push_eax              # 1
    mov_eax, %1
    pop_ebx               # +
    add_eax,ebx
    pop_ebx               # =
    mov_[ebx],eax
    push_eax              # 1
    mov_eax, %1
    pop_ebx               # -
    sub_ebx,eax
    mov_eax,ebx
    pop_eax               # ;
    jmp %_main_loop147
:_main_loop_end147
# stack_c.c 1102
    push_eax              # fout (global)
    mov_eax, &g_fout
    mov_eax,[eax]         # ?
    push_eax              # '\n'
    mov_eax, &string_2
    push_eax              # 0
    mov_eax, %0
    push_eax              # fprintf (function)
    mov_eax, &f_fprintf
    add_ebp, %80         # ()
    call_eax
    sub_ebp, %80
    pop_eax               # ;
:_main_else146 # no else
    push_eax              # i (local)
    lea_eax,[ebp+DWORD] %76
    push_eax              # $ (dup)
    mov_eax,[eax]         # ?
    push_eax              # 1
    mov_eax, %1
    pop_ebx               # +
    add_eax,ebx
    pop_ebx               # =
    mov_[ebx],eax
    push_eax              # 1
    mov_eax, %1
    pop_ebx               # -
    sub_ebx,eax
    mov_eax,ebx
    pop_eax               # ;
    jmp %_main_loop144
:_main_loop_end144
# stack_c.c 1104
    push_eax              # i (local)
    lea_eax,[ebp+DWORD] %76
    push_eax              # 0
    mov_eax, %0
    pop_ebx               # =
    mov_[ebx],eax
    pop_eax               # ;
:_main_loop150
    push_eax              # i (local)
    lea_eax,[ebp+DWORD] %76
    mov_eax,[eax]         # ?
    push_eax              # nr_statics (global)
    mov_eax, &g_nr_statics
    mov_eax,[eax]         # ?
    pop_ebx               # <s
    cmp_eax_ebx
    setl_al
    movzx_eax,al
    test_eax,eax          # !
    sete_al
    movzx_eax,al
    test_eax,eax          # if
    pop_eax
    je %_main_else151
    jmp %_main_loop_end150
# stack_c.c 1105
# stack_c.c 1106
:_main_else151 # no else
    push_eax              # fout (global)
    mov_eax, &g_fout
    mov_eax,[eax]         # ?
    push_eax              # ':static_%d_%s'
    mov_eax, &string_124
    push_eax              # __var_args (local)
    lea_eax,[ebp+DWORD] %80
    push_eax              # i (local)
    lea_eax,[ebp+DWORD] %76
    mov_eax,[eax]         # ?
    pop_ebx               # =
    mov_[ebx],eax
    pop_eax               # ;
    push_eax              # __var_args (local)
    lea_eax,[ebp+DWORD] %80
    push_eax              # 4
    mov_eax, %4
    pop_ebx               # +
    add_eax,ebx
    push_eax              # statics (global)
    mov_eax, &g_statics
    push_eax              # i (local)
    lea_eax,[ebp+DWORD] %76
    mov_eax,[eax]         # ?
    push_eax              # 56
    mov_eax, %56
    pop_ebx               # *
    mul_ebx
    pop_ebx               # +
    add_eax,ebx
    push_eax              # 0 (const s8_m_name)
    mov_eax, %0
    pop_ebx               # +
    add_eax,ebx
    pop_ebx               # =
    mov_[ebx],eax
    pop_eax               # ;
    push_eax              # __var_args (local)
    lea_eax,[ebp+DWORD] %80
    push_eax              # fprintf (function)
    mov_eax, &f_fprintf
    add_ebp, %88         # ()
    call_eax
    sub_ebp, %88
    pop_eax               # ;
# stack_c.c 1107
    push_eax              # j (local)
    lea_eax,[ebp+DWORD] %80
    push_eax              # 0
    mov_eax, %0
    pop_ebx               # =
    mov_[ebx],eax
    pop_eax               # ;
:_main_loop152
    push_eax              # j (local)
    lea_eax,[ebp+DWORD] %80
    mov_eax,[eax]         # ?
    push_eax              # statics (global)
    mov_eax, &g_statics
    push_eax              # i (local)
    lea_eax,[ebp+DWORD] %76
    mov_eax,[eax]         # ?
    push_eax              # 56
    mov_eax, %56
    pop_ebx               # *
    mul_ebx
    pop_ebx               # +
    add_eax,ebx
    push_eax              # 52 (const s8_m_size)
    mov_eax, %52
    pop_ebx               # +
    add_eax,ebx
    mov_eax,[eax]         # ?
    pop_ebx               # <s
    cmp_eax_ebx
    setl_al
    movzx_eax,al
    test_eax,eax          # !
    sete_al
    movzx_eax,al
    test_eax,eax          # if
    pop_eax
    je %_main_else153
    jmp %_main_loop_end152
# stack_c.c 1108
:_main_else153 # no else
    push_eax              # fout (global)
    mov_eax, &g_fout
    mov_eax,[eax]         # ?
    push_eax              # '%sNULL'
    mov_eax, &string_122
    push_eax              # __var_args (local)
    lea_eax,[ebp+DWORD] %84
    push_eax              # j (local)
    lea_eax,[ebp+DWORD] %80
    mov_eax,[eax]         # ?
    push_eax              # 8
    mov_eax, %8
    mov_ebx,eax           # %s
    pop_eax
    cdq
    idiv_ebx
    mov_eax,edx push_eax              # 0
    mov_eax, %0
    pop_ebx               # ==
    cmp_eax_ebx
    sete_al
    movzx_eax,al
    test_eax,eax          # if
    pop_eax
    je %_main_else154
    push_eax              # '\n\t'
    mov_eax, &string_123
    jmp %_main_else_end154
:_main_else154
    push_eax              # ' '
    mov_eax, &string_1
:_main_else_end154
    pop_ebx               # =
    mov_[ebx],eax
    pop_eax               # ;
    push_eax              # __var_args (local)
    lea_eax,[ebp+DWORD] %84
    push_eax              # fprintf (function)
    mov_eax, &f_fprintf
    add_ebp, %88         # ()
    call_eax
    sub_ebp, %88
    pop_eax               # ;
    push_eax              # j (local)
    lea_eax,[ebp+DWORD] %80
    push_eax              # $ (dup)
    mov_eax,[eax]         # ?
    push_eax              # 1
    mov_eax, %1
    pop_ebx               # +
    add_eax,ebx
    pop_ebx               # =
    mov_[ebx],eax
    push_eax              # 1
    mov_eax, %1
    pop_ebx               # -
    sub_ebx,eax
    mov_eax,ebx
    pop_eax               # ;
    jmp %_main_loop152
:_main_loop_end152
# stack_c.c 1109
    push_eax              # fout (global)
    mov_eax, &g_fout
    mov_eax,[eax]         # ?
    push_eax              # '\n'
    mov_eax, &string_2
    push_eax              # 0
    mov_eax, %0
    push_eax              # fprintf (function)
    mov_eax, &f_fprintf
    add_ebp, %80         # ()
    call_eax
    sub_ebp, %80
    pop_eax               # ;
    push_eax              # i (local)
    lea_eax,[ebp+DWORD] %76
    push_eax              # $ (dup)
    mov_eax,[eax]         # ?
    push_eax              # 1
    mov_eax, %1
    pop_ebx               # +
    add_eax,ebx
    pop_ebx               # =
    mov_[ebx],eax
    push_eax              # 1
    mov_eax, %1
    pop_ebx               # -
    sub_ebx,eax
    mov_eax,ebx
    pop_eax               # ;
    jmp %_main_loop150
:_main_loop_end150
# stack_c.c 1111
    push_eax              # fout (global)
    mov_eax, &g_fout
    mov_eax,[eax]         # ?
    push_eax              # '\n:ELF_end\n'
    mov_eax, &string_125
    push_eax              # 0
    mov_eax, %0
    push_eax              # fprintf (function)
    mov_eax, &f_fprintf
    add_ebp, %76         # ()
    call_eax
    sub_ebp, %76
    pop_eax               # ;
# stack_c.c 1113
    push_eax              # fout (global)
    mov_eax, &g_fout
    mov_eax,[eax]         # ?
    push_eax              # fclose (function)
    mov_eax, &f_fclose
    add_ebp, %76         # ()
    call_eax
    sub_ebp, %76
    pop_eax               # ;
# stack_c.c 1115
    push_eax              # error (global)
    mov_eax, &g_error
    mov_eax,[eax]         # ?
    mov_ebx,[ebp]         # return
    push_ebx
    ret
    push_eax              # 0
    mov_eax, %0
    mov_ebx,[ebp]         # return
    push_ebx
    ret

:f___init_globals__
    pop_eax
    mov_[ebp],eax
    pop_eax
    push_eax              # __sys_stdin (global)
    mov_eax, &g___sys_stdin
    push_eax              # $ (dup)
    push_eax              # 0
    mov_eax, %0
    pop_ebx               # =
    mov_[ebx],eax
    pop_eax               # ;
    push_eax              # 4
    mov_eax, %4
    pop_ebx               # +
    add_eax,ebx
    push_eax              # 0
    mov_eax, %0
    pop_ebx               # =
    mov_[ebx],eax
    pop_eax               # ;
    push_eax              # __sys_stdout (global)
    mov_eax, &g___sys_stdout
    push_eax              # $ (dup)
    push_eax              # 1
    mov_eax, %1
    pop_ebx               # =
    mov_[ebx],eax
    pop_eax               # ;
    push_eax              # 4
    mov_eax, %4
    pop_ebx               # +
    add_eax,ebx
    push_eax              # 0
    mov_eax, %0
    pop_ebx               # =
    mov_[ebx],eax
    pop_eax               # ;
    push_eax              # __sys_stderr (global)
    mov_eax, &g___sys_stderr
    push_eax              # $ (dup)
    push_eax              # 2
    mov_eax, %2
    pop_ebx               # =
    mov_[ebx],eax
    pop_eax               # ;
    push_eax              # 4
    mov_eax, %4
    pop_ebx               # +
    add_eax,ebx
    push_eax              # 0
    mov_eax, %0
    pop_ebx               # =
    mov_[ebx],eax
    pop_eax               # ;
    push_eax              # stdin (global)
    mov_eax, &g_stdin
    push_eax              # __sys_stdin (global)
    mov_eax, &g___sys_stdin
    pop_ebx               # =
    mov_[ebx],eax
    pop_eax               # ;
    push_eax              # stdout (global)
    mov_eax, &g_stdout
    push_eax              # __sys_stdout (global)
    mov_eax, &g___sys_stdout
    pop_ebx               # =
    mov_[ebx],eax
    pop_eax               # ;
    push_eax              # stderr (global)
    mov_eax, &g_stderr
    push_eax              # __sys_stderr (global)
    mov_eax, &g___sys_stderr
    pop_ebx               # =
    mov_[ebx],eax
    pop_eax               # ;
    push_eax              # LINE_MACRO_OUTPUT_FORMAT_GCC (global)
    mov_eax, &g_LINE_MACRO_OUTPUT_FORMAT_GCC
    push_eax              # 0
    mov_eax, %0
    pop_ebx               # =
    mov_[ebx],eax
    pop_eax               # ;
    push_eax              # LINE_MACRO_OUTPUT_FORMAT_NONE (global)
    mov_eax, &g_LINE_MACRO_OUTPUT_FORMAT_NONE
    push_eax              # 1
    mov_eax, %1
    pop_ebx               # =
    mov_[ebx],eax
    pop_eax               # ;
    push_eax              # LINE_MACRO_OUTPUT_FORMAT_STD (global)
    mov_eax, &g_LINE_MACRO_OUTPUT_FORMAT_STD
    push_eax              # 2
    mov_eax, %2
    pop_ebx               # =
    mov_[ebx],eax
    pop_eax               # ;
    push_eax              # LINE_MACRO_OUTPUT_FORMAT_P10 (global)
    mov_eax, &g_LINE_MACRO_OUTPUT_FORMAT_P10
    push_eax              # 11
    mov_eax, %11
    pop_ebx               # =
    mov_[ebx],eax
    pop_eax               # ;
    push_eax              # _sys_env (global)
    mov_eax, &g__sys_env
    push_eax              # 0
    mov_eax, %0
    pop_ebx               # =
    mov_[ebx],eax
    pop_eax               # ;
    push_eax              # cur_char (global)
    mov_eax, &g_cur_char
    push_eax              # 0
    mov_eax, %0
    pop_ebx               # =1
    mov_[ebx],al
    pop_eax               # ;
    push_eax              # cur_char_line (global)
    mov_eax, &g_cur_char_line
    push_eax              # 1
    mov_eax, %1
    pop_ebx               # =
    mov_[ebx],eax
    pop_eax               # ;
    push_eax              # cur_char_column (global)
    mov_eax, &g_cur_char_column
    push_eax              # 1
    mov_eax, %1
    pop_ebx               # =
    mov_[ebx],eax
    pop_eax               # ;
    push_eax              # token_len (global)
    mov_eax, &g_token_len
    push_eax              # 0
    mov_eax, %0
    pop_ebx               # =
    mov_[ebx],eax
    pop_eax               # ;
    push_eax              # cur_line (global)
    mov_eax, &g_cur_line
    push_eax              # 0
    mov_eax, %0
    pop_ebx               # =
    mov_[ebx],eax
    pop_eax               # ;
    push_eax              # cur_column (global)
    mov_eax, &g_cur_column
    push_eax              # 0
    mov_eax, %0
    pop_ebx               # =
    mov_[ebx],eax
    pop_eax               # ;
    push_eax              # keywords (global)
    mov_eax, &g_keywords
    push_eax              # $ (dup)
    push_eax              # $ (dup)
    push_eax              # 'void'
    mov_eax, &string_126
    pop_ebx               # =
    mov_[ebx],eax
    pop_eax               # ;
    push_eax              # 4
    mov_eax, %4
    pop_ebx               # +
    add_eax,ebx
    push_eax              # 70
    mov_eax, %70
    pop_ebx               # =1
    mov_[ebx],al
    pop_eax               # ;
    push_eax              # 8
    mov_eax, %8
    pop_ebx               # +
    add_eax,ebx
    push_eax              # $ (dup)
    push_eax              # $ (dup)
    push_eax              # 'const'
    mov_eax, &string_127
    pop_ebx               # =
    mov_[ebx],eax
    pop_eax               # ;
    push_eax              # 4
    mov_eax, %4
    pop_ebx               # +
    add_eax,ebx
    push_eax              # 67
    mov_eax, %67
    pop_ebx               # =1
    mov_[ebx],al
    pop_eax               # ;
    push_eax              # 8
    mov_eax, %8
    pop_ebx               # +
    add_eax,ebx
    push_eax              # $ (dup)
    push_eax              # $ (dup)
    push_eax              # 'int'
    mov_eax, &string_128
    pop_ebx               # =
    mov_[ebx],eax
    pop_eax               # ;
    push_eax              # 4
    mov_eax, %4
    pop_ebx               # +
    add_eax,ebx
    push_eax              # 86
    mov_eax, %86
    pop_ebx               # =1
    mov_[ebx],al
    pop_eax               # ;
    push_eax              # 8
    mov_eax, %8
    pop_ebx               # +
    add_eax,ebx
    push_eax              # $ (dup)
    push_eax              # $ (dup)
    push_eax              # 'do'
    mov_eax, &string_129
    pop_ebx               # =
    mov_[ebx],eax
    pop_eax               # ;
    push_eax              # 4
    mov_eax, %4
    pop_ebx               # +
    add_eax,ebx
    push_eax              # 76
    mov_eax, %76
    pop_ebx               # =1
    mov_[ebx],al
    pop_eax               # ;
    push_eax              # 8
    mov_eax, %8
    pop_ebx               # +
    add_eax,ebx
    push_eax              # $ (dup)
    push_eax              # $ (dup)
    push_eax              # 'break'
    mov_eax, &string_130
    pop_ebx               # =
    mov_[ebx],eax
    pop_eax               # ;
    push_eax              # 4
    mov_eax, %4
    pop_ebx               # +
    add_eax,ebx
    push_eax              # 66
    mov_eax, %66
    pop_ebx               # =1
    mov_[ebx],al
    pop_eax               # ;
    push_eax              # 8
    mov_eax, %8
    pop_ebx               # +
    add_eax,ebx
    push_eax              # $ (dup)
    push_eax              # $ (dup)
    push_eax              # 'continue'
    mov_eax, &string_131
    pop_ebx               # =
    mov_[ebx],eax
    pop_eax               # ;
    push_eax              # 4
    mov_eax, %4
    pop_ebx               # +
    add_eax,ebx
    push_eax              # 68
    mov_eax, %68
    pop_ebx               # =1
    mov_[ebx],al
    pop_eax               # ;
    push_eax              # 8
    mov_eax, %8
    pop_ebx               # +
    add_eax,ebx
    push_eax              # $ (dup)
    push_eax              # $ (dup)
    push_eax              # 'if'
    mov_eax, &string_132
    pop_ebx               # =
    mov_[ebx],eax
    pop_eax               # ;
    push_eax              # 4
    mov_eax, %4
    pop_ebx               # +
    add_eax,ebx
    push_eax              # 73
    mov_eax, %73
    pop_ebx               # =1
    mov_[ebx],al
    pop_eax               # ;
    push_eax              # 8
    mov_eax, %8
    pop_ebx               # +
    add_eax,ebx
    push_eax              # $ (dup)
    push_eax              # $ (dup)
    push_eax              # 'else'
    mov_eax, &string_133
    pop_ebx               # =
    mov_[ebx],eax
    pop_eax               # ;
    push_eax              # 4
    mov_eax, %4
    pop_ebx               # +
    add_eax,ebx
    push_eax              # 69
    mov_eax, %69
    pop_ebx               # =1
    mov_[ebx],al
    pop_eax               # ;
    push_eax              # 8
    mov_eax, %8
    pop_ebx               # +
    add_eax,ebx
    push_eax              # $ (dup)
    push_eax              # $ (dup)
    push_eax              # 'return'
    mov_eax, &string_134
    pop_ebx               # =
    mov_[ebx],eax
    pop_eax               # ;
    push_eax              # 4
    mov_eax, %4
    pop_ebx               # +
    add_eax,ebx
    push_eax              # 82
    mov_eax, %82
    pop_ebx               # =1
    mov_[ebx],al
    pop_eax               # ;
    push_eax              # 8
    mov_eax, %8
    pop_ebx               # +
    add_eax,ebx
    push_eax              # $ (dup)
    push_eax              # $ (dup)
    push_eax              # 'goto'
    mov_eax, &string_135
    pop_ebx               # =
    mov_[ebx],eax
    pop_eax               # ;
    push_eax              # 4
    mov_eax, %4
    pop_ebx               # +
    add_eax,ebx
    push_eax              # 71
    mov_eax, %71
    pop_ebx               # =1
    mov_[ebx],al
    pop_eax               # ;
    push_eax              # 8
    mov_eax, %8
    pop_ebx               # +
    add_eax,ebx
    push_eax              # $ (dup)
    push_eax              # $ (dup)
    push_eax              # 'static'
    mov_eax, &string_136
    pop_ebx               # =
    mov_[ebx],eax
    pop_eax               # ;
    push_eax              # 4
    mov_eax, %4
    pop_ebx               # +
    add_eax,ebx
    push_eax              # 83
    mov_eax, %83
    pop_ebx               # =1
    mov_[ebx],al
    pop_eax               # ;
    push_eax              # 8
    mov_eax, %8
    pop_ebx               # +
    add_eax,ebx
    push_eax              # $ (dup)
    push_eax              # 'char'
    mov_eax, &string_137
    pop_ebx               # =
    mov_[ebx],eax
    pop_eax               # ;
    push_eax              # 4
    mov_eax, %4
    pop_ebx               # +
    add_eax,ebx
    push_eax              # 75
    mov_eax, %75
    pop_ebx               # =1
    mov_[ebx],al
    pop_eax               # ;
    push_eax              # symbols (global)
    mov_eax, &g_symbols
    push_eax              # $ (dup)
    push_eax              # $ (dup)
    push_eax              # '=:'
    mov_eax, &string_138
    pop_ebx               # =
    mov_[ebx],eax
    pop_eax               # ;
    push_eax              # 4
    mov_eax, %4
    pop_ebx               # +
    add_eax,ebx
    push_eax              # 97
    mov_eax, %97
    push_eax              # 0
    mov_eax, %0
    pop_ebx               # +
    add_eax,ebx
    pop_ebx               # =1
    mov_[ebx],al
    pop_eax               # ;
    push_eax              # 8
    mov_eax, %8
    pop_ebx               # +
    add_eax,ebx
    push_eax              # $ (dup)
    push_eax              # $ (dup)
    push_eax              # '?1'
    mov_eax, &string_139
    pop_ebx               # =
    mov_[ebx],eax
    pop_eax               # ;
    push_eax              # 4
    mov_eax, %4
    pop_ebx               # +
    add_eax,ebx
    push_eax              # 97
    mov_eax, %97
    push_eax              # 1
    mov_eax, %1
    pop_ebx               # +
    add_eax,ebx
    pop_ebx               # =1
    mov_[ebx],al
    pop_eax               # ;
    push_eax              # 8
    mov_eax, %8
    pop_ebx               # +
    add_eax,ebx
    push_eax              # $ (dup)
    push_eax              # $ (dup)
    push_eax              # '?2'
    mov_eax, &string_140
    pop_ebx               # =
    mov_[ebx],eax
    pop_eax               # ;
    push_eax              # 4
    mov_eax, %4
    pop_ebx               # +
    add_eax,ebx
    push_eax              # 97
    mov_eax, %97
    push_eax              # 2
    mov_eax, %2
    pop_ebx               # +
    add_eax,ebx
    pop_ebx               # =1
    mov_[ebx],al
    pop_eax               # ;
    push_eax              # 8
    mov_eax, %8
    pop_ebx               # +
    add_eax,ebx
    push_eax              # $ (dup)
    push_eax              # $ (dup)
    push_eax              # '=1'
    mov_eax, &string_141
    pop_ebx               # =
    mov_[ebx],eax
    pop_eax               # ;
    push_eax              # 4
    mov_eax, %4
    pop_ebx               # +
    add_eax,ebx
    push_eax              # 97
    mov_eax, %97
    push_eax              # 3
    mov_eax, %3
    pop_ebx               # +
    add_eax,ebx
    pop_ebx               # =1
    mov_[ebx],al
    pop_eax               # ;
    push_eax              # 8
    mov_eax, %8
    pop_ebx               # +
    add_eax,ebx
    push_eax              # $ (dup)
    push_eax              # $ (dup)
    push_eax              # '=2'
    mov_eax, &string_142
    pop_ebx               # =
    mov_[ebx],eax
    pop_eax               # ;
    push_eax              # 4
    mov_eax, %4
    pop_ebx               # +
    add_eax,ebx
    push_eax              # 97
    mov_eax, %97
    push_eax              # 4
    mov_eax, %4
    pop_ebx               # +
    add_eax,ebx
    pop_ebx               # =1
    mov_[ebx],al
    pop_eax               # ;
    push_eax              # 8
    mov_eax, %8
    pop_ebx               # +
    add_eax,ebx
    push_eax              # $ (dup)
    push_eax              # $ (dup)
    push_eax              # '()'
    mov_eax, &string_143
    pop_ebx               # =
    mov_[ebx],eax
    pop_eax               # ;
    push_eax              # 4
    mov_eax, %4
    pop_ebx               # +
    add_eax,ebx
    push_eax              # 97
    mov_eax, %97
    push_eax              # 5
    mov_eax, %5
    pop_ebx               # +
    add_eax,ebx
    pop_ebx               # =1
    mov_[ebx],al
    pop_eax               # ;
    push_eax              # 8
    mov_eax, %8
    pop_ebx               # +
    add_eax,ebx
    push_eax              # $ (dup)
    push_eax              # $ (dup)
    push_eax              # '/s'
    mov_eax, &string_144
    pop_ebx               # =
    mov_[ebx],eax
    pop_eax               # ;
    push_eax              # 4
    mov_eax, %4
    pop_ebx               # +
    add_eax,ebx
    push_eax              # 97
    mov_eax, %97
    push_eax              # 6
    mov_eax, %6
    pop_ebx               # +
    add_eax,ebx
    pop_ebx               # =1
    mov_[ebx],al
    pop_eax               # ;
    push_eax              # 8
    mov_eax, %8
    pop_ebx               # +
    add_eax,ebx
    push_eax              # $ (dup)
    push_eax              # $ (dup)
    push_eax              # '%s'
    mov_eax, &string_145
    pop_ebx               # =
    mov_[ebx],eax
    pop_eax               # ;
    push_eax              # 4
    mov_eax, %4
    pop_ebx               # +
    add_eax,ebx
    push_eax              # 97
    mov_eax, %97
    push_eax              # 7
    mov_eax, %7
    pop_ebx               # +
    add_eax,ebx
    pop_ebx               # =1
    mov_[ebx],al
    pop_eax               # ;
    push_eax              # 8
    mov_eax, %8
    pop_ebx               # +
    add_eax,ebx
    push_eax              # $ (dup)
    push_eax              # $ (dup)
    push_eax              # '=='
    mov_eax, &string_146
    pop_ebx               # =
    mov_[ebx],eax
    pop_eax               # ;
    push_eax              # 4
    mov_eax, %4
    pop_ebx               # +
    add_eax,ebx
    push_eax              # 97
    mov_eax, %97
    push_eax              # 8
    mov_eax, %8
    pop_ebx               # +
    add_eax,ebx
    pop_ebx               # =1
    mov_[ebx],al
    pop_eax               # ;
    push_eax              # 8
    mov_eax, %8
    pop_ebx               # +
    add_eax,ebx
    push_eax              # $ (dup)
    push_eax              # $ (dup)
    push_eax              # '!='
    mov_eax, &string_147
    pop_ebx               # =
    mov_[ebx],eax
    pop_eax               # ;
    push_eax              # 4
    mov_eax, %4
    pop_ebx               # +
    add_eax,ebx
    push_eax              # 97
    mov_eax, %97
    push_eax              # 9
    mov_eax, %9
    pop_ebx               # +
    add_eax,ebx
    pop_ebx               # =1
    mov_[ebx],al
    pop_eax               # ;
    push_eax              # 8
    mov_eax, %8
    pop_ebx               # +
    add_eax,ebx
    push_eax              # $ (dup)
    push_eax              # $ (dup)
    push_eax              # '<='
    mov_eax, &string_148
    pop_ebx               # =
    mov_[ebx],eax
    pop_eax               # ;
    push_eax              # 4
    mov_eax, %4
    pop_ebx               # +
    add_eax,ebx
    push_eax              # 97
    mov_eax, %97
    push_eax              # 10
    mov_eax, %10
    pop_ebx               # +
    add_eax,ebx
    pop_ebx               # =1
    mov_[ebx],al
    pop_eax               # ;
    push_eax              # 8
    mov_eax, %8
    pop_ebx               # +
    add_eax,ebx
    push_eax              # $ (dup)
    push_eax              # $ (dup)
    push_eax              # '>='
    mov_eax, &string_149
    pop_ebx               # =
    mov_[ebx],eax
    pop_eax               # ;
    push_eax              # 4
    mov_eax, %4
    pop_ebx               # +
    add_eax,ebx
    push_eax              # 97
    mov_eax, %97
    push_eax              # 11
    mov_eax, %11
    pop_ebx               # +
    add_eax,ebx
    pop_ebx               # =1
    mov_[ebx],al
    pop_eax               # ;
    push_eax              # 8
    mov_eax, %8
    pop_ebx               # +
    add_eax,ebx
    push_eax              # $ (dup)
    push_eax              # $ (dup)
    push_eax              # '<s'
    mov_eax, &string_150
    pop_ebx               # =
    mov_[ebx],eax
    pop_eax               # ;
    push_eax              # 4
    mov_eax, %4
    pop_ebx               # +
    add_eax,ebx
    push_eax              # 97
    mov_eax, %97
    push_eax              # 12
    mov_eax, %12
    pop_ebx               # +
    add_eax,ebx
    pop_ebx               # =1
    mov_[ebx],al
    pop_eax               # ;
    push_eax              # 8
    mov_eax, %8
    pop_ebx               # +
    add_eax,ebx
    push_eax              # $ (dup)
    push_eax              # $ (dup)
    push_eax              # '<=s'
    mov_eax, &string_151
    pop_ebx               # =
    mov_[ebx],eax
    pop_eax               # ;
    push_eax              # 4
    mov_eax, %4
    pop_ebx               # +
    add_eax,ebx
    push_eax              # 97
    mov_eax, %97
    push_eax              # 13
    mov_eax, %13
    pop_ebx               # +
    add_eax,ebx
    pop_ebx               # =1
    mov_[ebx],al
    pop_eax               # ;
    push_eax              # 8
    mov_eax, %8
    pop_ebx               # +
    add_eax,ebx
    push_eax              # $ (dup)
    push_eax              # $ (dup)
    push_eax              # '>s'
    mov_eax, &string_152
    pop_ebx               # =
    mov_[ebx],eax
    pop_eax               # ;
    push_eax              # 4
    mov_eax, %4
    pop_ebx               # +
    add_eax,ebx
    push_eax              # 97
    mov_eax, %97
    push_eax              # 14
    mov_eax, %14
    pop_ebx               # +
    add_eax,ebx
    pop_ebx               # =1
    mov_[ebx],al
    pop_eax               # ;
    push_eax              # 8
    mov_eax, %8
    pop_ebx               # +
    add_eax,ebx
    push_eax              # $ (dup)
    push_eax              # $ (dup)
    push_eax              # '>=s'
    mov_eax, &string_153
    pop_ebx               # =
    mov_[ebx],eax
    pop_eax               # ;
    push_eax              # 4
    mov_eax, %4
    pop_ebx               # +
    add_eax,ebx
    push_eax              # 97
    mov_eax, %97
    push_eax              # 15
    mov_eax, %15
    pop_ebx               # +
    add_eax,ebx
    pop_ebx               # =1
    mov_[ebx],al
    pop_eax               # ;
    push_eax              # 8
    mov_eax, %8
    pop_ebx               # +
    add_eax,ebx
    push_eax              # $ (dup)
    push_eax              # $ (dup)
    push_eax              # '<<'
    mov_eax, &string_154
    pop_ebx               # =
    mov_[ebx],eax
    pop_eax               # ;
    push_eax              # 4
    mov_eax, %4
    pop_ebx               # +
    add_eax,ebx
    push_eax              # 97
    mov_eax, %97
    push_eax              # 16
    mov_eax, %16
    pop_ebx               # +
    add_eax,ebx
    pop_ebx               # =1
    mov_[ebx],al
    pop_eax               # ;
    push_eax              # 8
    mov_eax, %8
    pop_ebx               # +
    add_eax,ebx
    push_eax              # $ (dup)
    push_eax              # $ (dup)
    push_eax              # '>>'
    mov_eax, &string_155
    pop_ebx               # =
    mov_[ebx],eax
    pop_eax               # ;
    push_eax              # 4
    mov_eax, %4
    pop_ebx               # +
    add_eax,ebx
    push_eax              # 97
    mov_eax, %97
    push_eax              # 17
    mov_eax, %17
    pop_ebx               # +
    add_eax,ebx
    pop_ebx               # =1
    mov_[ebx],al
    pop_eax               # ;
    push_eax              # 8
    mov_eax, %8
    pop_ebx               # +
    add_eax,ebx
    push_eax              # $ (dup)
    push_eax              # $ (dup)
    push_eax              # '&&'
    mov_eax, &string_156
    pop_ebx               # =
    mov_[ebx],eax
    pop_eax               # ;
    push_eax              # 4
    mov_eax, %4
    pop_ebx               # +
    add_eax,ebx
    push_eax              # 97
    mov_eax, %97
    push_eax              # 18
    mov_eax, %18
    pop_ebx               # +
    add_eax,ebx
    pop_ebx               # =1
    mov_[ebx],al
    pop_eax               # ;
    push_eax              # 8
    mov_eax, %8
    pop_ebx               # +
    add_eax,ebx
    push_eax              # $ (dup)
    push_eax              # $ (dup)
    push_eax              # '||'
    mov_eax, &string_157
    pop_ebx               # =
    mov_[ebx],eax
    pop_eax               # ;
    push_eax              # 4
    mov_eax, %4
    pop_ebx               # +
    add_eax,ebx
    push_eax              # 97
    mov_eax, %97
    push_eax              # 19
    mov_eax, %19
    pop_ebx               # +
    add_eax,ebx
    pop_ebx               # =1
    mov_[ebx],al
    pop_eax               # ;
    push_eax              # 8
    mov_eax, %8
    pop_ebx               # +
    add_eax,ebx
    push_eax              # $ (dup)
    push_eax              # $ (dup)
    push_eax              # '->'
    mov_eax, &string_158
    pop_ebx               # =
    mov_[ebx],eax
    pop_eax               # ;
    push_eax              # 4
    mov_eax, %4
    pop_ebx               # +
    add_eax,ebx
    push_eax              # 97
    mov_eax, %97
    push_eax              # 20
    mov_eax, %20
    pop_ebx               # +
    add_eax,ebx
    pop_ebx               # =1
    mov_[ebx],al
    pop_eax               # ;
    push_eax              # 8
    mov_eax, %8
    pop_ebx               # +
    add_eax,ebx
    push_eax              # $ (dup)
    push_eax              # $ (dup)
    push_eax              # '><'
    mov_eax, &string_159
    pop_ebx               # =
    mov_[ebx],eax
    pop_eax               # ;
    push_eax              # 4
    mov_eax, %4
    pop_ebx               # +
    add_eax,ebx
    push_eax              # 97
    mov_eax, %97
    push_eax              # 21
    mov_eax, %21
    pop_ebx               # +
    add_eax,ebx
    pop_ebx               # =1
    mov_[ebx],al
    pop_eax               # ;
    push_eax              # 8
    mov_eax, %8
    pop_ebx               # +
    add_eax,ebx
    push_eax              # $ (dup)
    push_eax              # '-p'
    mov_eax, &string_160
    pop_ebx               # =
    mov_[ebx],eax
    pop_eax               # ;
    push_eax              # 4
    mov_eax, %4
    pop_ebx               # +
    add_eax,ebx
    push_eax              # 97
    mov_eax, %97
    push_eax              # 22
    mov_eax, %22
    pop_ebx               # +
    add_eax,ebx
    pop_ebx               # =1
    mov_[ebx],al
    pop_eax               # ;
    push_eax              # error (global)
    mov_eax, &g_error
    push_eax              # 0
    mov_eax, %0
    pop_ebx               # =
    mov_[ebx],eax
    pop_eax               # ;
    push_eax              # nr_idents (global)
    mov_eax, &g_nr_idents
    push_eax              # 0
    mov_eax, %0
    pop_ebx               # =
    mov_[ebx],eax
    pop_eax               # ;
    push_eax              # pos (global)
    mov_eax, &g_pos
    push_eax              # 0
    mov_eax, %0
    pop_ebx               # =
    mov_[ebx],eax
    pop_eax               # ;
    push_eax              # strings (global)
    mov_eax, &g_strings
    push_eax              # 0
    mov_eax, %0
    pop_ebx               # =
    mov_[ebx],eax
    pop_eax               # ;
    push_eax              # nesting_depth (global)
    mov_eax, &g_nesting_depth
    push_eax              # 0
    mov_eax, %0
    pop_ebx               # =
    mov_[ebx],eax
    pop_eax               # ;
    push_eax              # 0
    mov_eax, %0
    mov_ebx,[ebp]         # return
    push_ebx
    ret

:ELF_data

:SYS_MALLOC NULL
:string_0  "__sys_printf %"
:string_1  " "
:string_2  !10 !0
:string_3  !77 !111 !100 !101 !32 !37 !115 !32 !115 !104 !111 !117 !108 !100 !32 !98 !101
  !32 !39 !114 !47 !119 !40 !98 !41 !40 !43 !41 !39 !44 !32 !39 !119 !39 !44 !32 !111
  !114 !32 !39 !119 !98 !39 !10 !0
:string_4  !102 !111 !112 !101 !110 !32 !37 !115 !32 !37 !115 !32 !114 !101 !116 !117 !114
  !110 !101 !100 !32 !37 !100 !10 !0
:string_5  !84 !79 !68 !79 !32 !116 !105 !109 !101 !10 !0
:string_6  !84 !79 !68 !79 !32 !108 !111 !99 !97 !108 !116 !105 !109 !101 !10 !0
:string_7  !84 !79 !68 !79 !32 !115 !101 !116 !106 !109 !112 !10 !0
:string_8  !84 !79 !68 !79 !32 !108 !111 !110 !103 !106 !109 !112 !10 !0
:string_9  !115 !115 !99 !97 !110 !102 !58 !32 !102 !111 !114 !109 !97 !116 !32 !37 !37
  !37 !99 !32 !110 !111 !116 !32 !115 !117 !112 !112 !111 !114 !116 !101 !100 !10 !0
:string_10  !84 !79 !68 !79 !32 !97 !116 !111 !105 !10 !0
:string_11  !84 !79 !68 !79 !32 !101 !120 !101 !99 !118 !112 !10 !0
:string_12  !69 !82 !82 !79 !82 !32 !37 !100 !58 !32 !86 !97 !114 !105 !97 !98 !108
  !101 !32 !39 !37 !115 !39 !32 !105 !115 !32 !108 !111 !110 !103 !101 !114 !32 !116 !104 !97
  !110 !32 !37 !100 !32 !99 !104 !97 !114 !97 !99 !116 !101 !114 !115 !10 !0
:string_13  !69 !82 !82 !79 !82 !32 !37 !100 !58 !32 !83 !116 !114 !105 !110 !103 !32
  !108 !111 !110 !103 !101 !114 !32 !116 !104 !97 !110 !32 !37 !100 !32 !99 !104 !97 !114 !97
  !99 !116 !101 !114 !115 !10 !0
:string_14  !69 !82 !82 !79 !82 !32 !37 !100 !46 !37 !100 !58 !32 !73 !108 !108 !101
  !103 !97 !108 !32 !99 !104 !97 !114 !97 !99 !116 !101 !114 !32 !39 !37 !99 !39 !32 !97
  !102 !116 !101 !114 !32 !92 !120 !10 !0
:string_15  "%d"
:string_16  "\n"
:string_17  "\t"
:string_18  "\%c"
:string_19  "?"
:string_20  "%c"
:string_21  "-o"
:string_22  "w"
:string_23  !69 !82 !82 !79 !82 !58 !32 !67 !97 !110 !110 !111 !116 !32 !111 !112 !101
  !110 !32 !102 !105 !108 !101 !32 !39 !37 !115 !39 !32 !102 !111 !114 !32 !119 !114 !105 !116
  !105 !110 !103 !10 !0
:string_24  "-i"
:string_25  "r"
:string_26  !69 !82 !82 !79 !82 !58 !32 !67 !97 !110 !110 !111 !116 !32 !111 !112 !101
  !110 !32 !102 !105 !108 !101 !32 !39 !37 !115 !39 !32 !102 !111 !114 !32 !105 !110 !112 !117
  !116 !10 !0
:string_27  "sys_int80"
:string_28  "sys_malloc"
:string_29  !69 !82 !82 !79 !82 !32 !37 !100 !46 !37 !100 !58 !32 !69 !120 !112 !101
  !99 !116 !105 !110 !103 !32 !110 !97 !109 !101 !32 !97 !102 !116 !101 !114 !32 !39 !118 !111
  !105 !100 !39 !32 !102 !111 !114 !32 !102 !117 !110 !99 !116 !105 !111 !110 !10 !0
:string_30  !69 !82 !82 !79 !82 !32 !37 !100 !46 !37 !100 !58 !32 !77 !111 !114 !101
  !32 !116 !104 !97 !110 !32 !37 !100 !32 !118 !97 !114 !105 !97 !98 !108 !101 !115 !10 !0
:string_31  !69 !82 !82 !79 !82 !32 !37 !100 !46 !37 !100 !58 !32 !69 !120 !112 !101
  !99 !116 !32 !59 !32 !111 !114 !32 !123 !32 !97 !102 !116 !101 !114 !32 !102 !117 !110 !99
  !116 !105 !111 !110 !32 !110 !97 !109 !101 !10 !0
:string_32  !10 !58 !102 !95 !37 !115 !10 !9 !112 !111 !112 !95 !101 !97 !120 !10 !9
  !109 !111 !118 !95 !91 !101 !98 !112 !93 !44 !101 !97 !120 !10 !9 !112 !111 !112 !95 !101
  !97 !120 !10 !0
:string_33  !69 !82 !82 !79 !82 !32 !37 !100 !46 !37 !100 !58 !32 !69 !120 !112 !101
  !99 !116 !105 !110 !103 !32 !110 !97 !109 !101 !32 !97 !102 !116 !101 !114 !32 !39 !99 !111
  !110 !115 !116 !39 !10 !0
:string_34  !69 !82 !82 !79 !82 !32 !37 !100 !46 !37 !100 !58 !32 !69 !120 !112 !101
  !99 !116 !105 !110 !103 !32 !110 !117 !109 !98 !101 !114 !32 !97 !102 !116 !101 !114 !32 !39
  !99 !111 !110 !115 !116 !39 !32 !60 !110 !97 !109 !101 !62 !10 !0
:string_35  !69 !82 !82 !79 !82 !32 !37 !100 !46 !37 !100 !58 !32 !69 !120 !112 !101
  !99 !116 !105 !110 !103 !32 !110 !97 !109 !101 !32 !97 !102 !116 !101 !114 !32 !39 !105 !110
  !116 !39 !10 !0
:string_36  !69 !82 !82 !79 !82 !32 !37 !100 !46 !37 !100 !58 !32 !101 !120 !112 !101
  !99 !116 !105 !110 !103 !32 !39 !123 !39 !32 !97 !102 !116 !101 !114 !32 !39 !100 !111 !39
  !10 !0
:string_37  !58 !95 !37 !115 !95 !108 !111 !111 !112 !37 !100 !10 !0
:string_38  !69 !82 !82 !79 !82 !32 !37 !100 !46 !37 !100 !58 !32 !78 !101 !115 !116
  !105 !110 !103 !32 !100 !101 !101 !112 !101 !114 !32 !116 !104 !97 !110 !32 !37 !100 !10 !0
:string_39  !69 !82 !82 !79 !82 !32 !37 !100 !46 !37 !100 !58 !32 !39 !98 !114 !101
  !97 !107 !39 !32 !111 !117 !116 !115 !105 !100 !101 !32 !39 !108 !111 !111 !112 !39 !10 !0
:string_40  !9 !106 !109 !112 !32 !37 !37 !95 !37 !115 !95 !108 !111 !111 !112 !95 !101
  !110 !100 !37 !100 !10 !0
:string_41  !9 !106 !109 !112 !32 !37 !37 !95 !37 !115 !95 !108 !111 !111 !112 !37 !100
  !10 !0
:string_42  !69 !82 !82 !79 !82 !32 !37 !100 !46 !37 !100 !58 !32 !101 !120 !112 !101
  !99 !116 !105 !110 !103 !32 !39 !123 !39 !32 !97 !102 !116 !101 !114 !32 !39 !105 !102 !39
  !10 !0
:string_43  !9 !116 !101 !115 !116 !95 !101 !97 !120 !44 !101 !97 !120 !32 !32 !32 !32
  !32 !32 !32 !32 !32 !32 !35 !32 !105 !102 !10 !9 !112 !111 !112 !95 !101 !97 !120 !10
  !9 !106 !101 !32 !37 !37 !95 !37 !115 !95 !101 !108 !115 !101 !37 !100 !10 !0
:string_44  !69 !82 !82 !79 !82 !32 !37 !100 !46 !37 !100 !58 !32 !117 !110 !101 !120
  !112 !101 !99 !116 !101 !100 !32 !39 !101 !108 !115 !101 !39 !10 !0
:string_45  !69 !82 !82 !79 !82 !32 !37 !100 !46 !37 !100 !58 !32 !84 !111 !32 !109
  !97 !110 !121 !32 !125 !10 !0
:string_46  !9 !106 !109 !112 !32 !37 !37 !95 !37 !115 !95 !108 !111 !111 !112 !37 !100
  !10 !58 !95 !37 !115 !95 !108 !111 !111 !112 !95 !101 !110 !100 !37 !100 !10 !0
:string_47  !69 !82 !82 !79 !82 !32 !37 !100 !46 !37 !100 !58 !32 !101 !120 !112 !101
  !99 !116 !105 !110 !103 !32 !39 !123 !39 !32 !97 !102 !116 !101 !114 !32 !39 !101 !108 !115
  !101 !39 !10 !0
:string_48  !9 !106 !109 !112 !32 !37 !37 !95 !37 !115 !95 !101 !108 !115 !101 !95 !101
  !110 !100 !37 !100 !10 !0
:string_49  !58 !95 !37 !115 !95 !101 !108 !115 !101 !37 !100 !10 !0
:string_50  !58 !95 !37 !115 !95 !101 !108 !115 !101 !37 !100 !32 !35 !32 !110 !111 !32
  !101 !108 !115 !101 !10 !0
:string_51  !58 !95 !37 !115 !95 !101 !108 !115 !101 !95 !101 !110 !100 !37 !100 !10 !0
:string_52  !58 !95 !37 !115 !95 !97 !110 !100 !95 !101 !110 !100 !37 !100 !10 !0
:string_53  !58 !95 !37 !115 !95 !111 !114 !95 !101 !110 !100 !37 !100 !10 !0
:string_54  !9 !109 !111 !118 !95 !101 !98 !120 !44 !91 !101 !98 !112 !93 !32 !32 !32
  !32 !32 !32 !32 !32 !32 !35 !32 !114 !101 !116 !117 !114 !110 !10 !9 !112 !117 !115 !104
  !95 !101 !98 !120 !10 !9 !114 !101 !116 !10 !0
:string_55  !9 !112 !111 !112 !95 !101 !97 !120 !32 !32 !32 !32 !32 !32 !32 !32 !32
  !32 !32 !32 !32 !32 !32 !35 !32 !59 !10 !0
:string_56  !9 !112 !117 !115 !104 !95 !101 !97 !120 !32 !32 !32 !32 !32 !32 !32 !32
  !32 !32 !32 !32 !32 !32 !35 !32 !36 !32 !40 !100 !117 !112 !41 !10 !0
:string_57  !69 !82 !82 !79 !82 !32 !37 !100 !46 !37 !100 !58 !32 !69 !120 !112 !101
  !99 !116 !105 !110 !103 !32 !108 !97 !98 !101 !108 !32 !97 !102 !116 !101 !114 !32 !39 !103
  !111 !116 !111 !39 !10 !0
:string_58  !9 !106 !109 !112 !32 !37 !37 !108 !95 !37 !115 !95 !37 !115 !10 !0
:string_59  !9 !112 !117 !115 !104 !95 !101 !97 !120 !32 !32 !32 !32 !32 !32 !32 !32
  !32 !32 !32 !32 !32 !32 !35 !32 !37 !115 !32 !40 !103 !108 !111 !98 !97 !108 !41 !10
  !9 !109 !111 !118 !95 !101 !97 !120 !44 !32 !38 !103 !95 !37 !115 !10 !0
:string_60  !9 !112 !117 !115 !104 !95 !101 !97 !120 !32 !32 !32 !32 !32 !32 !32 !32
  !32 !32 !32 !32 !32 !32 !35 !32 !37 !115 !32 !40 !102 !117 !110 !99 !116 !105 !111 !110
  !41 !10 !9 !109 !111 !118 !95 !101 !97 !120 !44 !32 !38 !102 !95 !37 !115 !10 !0
:string_61  !9 !112 !117 !115 !104 !95 !101 !97 !120 !32 !32 !32 !32 !32 !32 !32 !32
  !32 !32 !32 !32 !32 !32 !35 !32 !37 !117 !32 !40 !99 !111 !110 !115 !116 !32 !37 !115
  !41 !10 !9 !109 !111 !118 !95 !101 !97 !120 !44 !32 !37 !37 !37 !117 !10 !0
:string_62  !9 !112 !117 !115 !104 !95 !101 !97 !120 !32 !32 !32 !32 !32 !32 !32 !32
  !32 !32 !32 !32 !32 !32 !35 !32 !37 !115 !32 !40 !108 !111 !99 !97 !108 !41 !10 !9
  !108 !101 !97 !95 !101 !97 !120 !44 !91 !101 !98 !112 !43 !68 !87 !79 !82 !68 !93 !32
  !37 !37 !37 !100 !10 !0
:string_63  !9 !112 !117 !115 !104 !95 !101 !97 !120 !32 !32 !32 !32 !32 !32 !32 !32
  !32 !32 !32 !32 !32 !32 !35 !32 !37 !115 !32 !40 !115 !116 !97 !116 !105 !99 !41 !10
  !9 !109 !111 !118 !95 !101 !97 !120 !44 !32 !38 !115 !116 !97 !116 !105 !99 !95 !37 !100
  !95 !37 !115 !10 !0
:string_64  !69 !82 !82 !79 !82 !32 !37 !100 !46 !37 !100 !58 !32 !73 !100 !101 !110
  !116 !32 !37 !115 !32 !105 !115 !32 !110 !111 !116 !32 !100 !101 !102 !105 !110 !101 !100 !10
  !0
:string_65  !9 !112 !117 !115 !104 !95 !101 !97 !120 !32 !32 !32 !32 !32 !32 !32 !32
  !32 !32 !32 !32 !32 !32 !35 !32 !37 !117 !10 !9 !109 !111 !118 !95 !101 !97 !120 !44
  !32 !37 !37 !37 !117 !10 !0
:string_66  !9 !112 !117 !115 !104 !95 !101 !97 !120 !32 !32 !32 !32 !32 !32 !32 !32
  !32 !32 !32 !32 !32 !32 !35 !32 !39 !0
:string_67  !39 !10 !9 !109 !111 !118 !95 !101 !97 !120 !44 !32 !38 !115 !116 !114 !105
  !110 !103 !95 !37 !100 !10 !0
:string_68  !9 !112 !117 !115 !104 !95 !101 !97 !120 !32 !32 !32 !32 !32 !32 !32 !32
  !32 !32 !32 !32 !32 !32 !35 !32 !39 !37 !99 !39 !10 !9 !109 !111 !118 !95 !101 !97
  !120 !44 !32 !37 !37 !37 !100 !10 !0
:string_69  !9 !112 !117 !115 !104 !95 !101 !97 !120 !32 !32 !32 !32 !32 !32 !32 !32
  !32 !32 !32 !32 !32 !32 !35 !32 !37 !100 !10 !9 !109 !111 !118 !95 !101 !97 !120 !44
  !32 !37 !37 !37 !100 !10 !0
:string_70  !9 !109 !111 !118 !95 !101 !97 !120 !44 !91 !101 !97 !120 !93 !32 !32 !32
  !32 !32 !32 !32 !32 !32 !35 !32 !63 !10 !0
:string_71  !9 !112 !111 !112 !95 !101 !98 !120 !32 !32 !32 !32 !32 !32 !32 !32 !32
  !32 !32 !32 !32 !32 !32 !35 !32 !61 !10 !9 !109 !111 !118 !95 !91 !101 !98 !120 !93
  !44 !101 !97 !120 !10 !0
:string_72  !9 !112 !111 !112 !95 !101 !98 !120 !32 !32 !32 !32 !32 !32 !32 !32 !32
  !32 !32 !32 !32 !32 !32 !35 !32 !43 !10 !9 !97 !100 !100 !95 !101 !97 !120 !44 !101
  !98 !120 !10 !0
:string_73  !9 !112 !111 !112 !95 !101 !98 !120 !32 !32 !32 !32 !32 !32 !32 !32 !32
  !32 !32 !32 !32 !32 !32 !35 !32 !45 !10 !9 !115 !117 !98 !95 !101 !98 !120 !44 !101
  !97 !120 !10 !9 !109 !111 !118 !95 !101 !97 !120 !44 !101 !98 !120 !10 !0
:string_74  !9 !112 !111 !112 !95 !101 !98 !120 !32 !32 !32 !32 !32 !32 !32 !32 !32
  !32 !32 !32 !32 !32 !32 !35 !32 !42 !10 !9 !109 !117 !108 !95 !101 !98 !120 !10 !0
:string_75  !9 !112 !111 !112 !95 !101 !98 !120 !32 !32 !32 !32 !32 !32 !32 !32 !32
  !32 !32 !32 !32 !32 !32 !35 !32 !38 !10 !9 !97 !110 !100 !95 !101 !97 !120 !44 !101
  !98 !120 !10 !0
:string_76  !9 !112 !111 !112 !95 !101 !98 !120 !32 !32 !32 !32 !32 !32 !32 !32 !32
  !32 !32 !32 !32 !32 !32 !35 !32 !124 !10 !9 !111 !114 !95 !101 !97 !120 !44 !101 !98
  !120 !10 !0
:string_77  !9 !112 !111 !112 !95 !101 !98 !120 !32 !32 !32 !32 !32 !32 !32 !32 !32
  !32 !32 !32 !32 !32 !32 !35 !32 !94 !10 !9 !120 !111 !114 !95 !101 !97 !120 !44 !101
  !98 !120 !10 !0
:string_78  !9 !110 !111 !116 !95 !101 !97 !120 !32 !32 !32 !32 !32 !32 !32 !32 !32
  !32 !32 !32 !32 !32 !32 !35 !32 !126 !10 !0
:string_79  !9 !109 !111 !118 !95 !101 !98 !120 !44 !101 !97 !120 !32 !32 !32 !32 !32
  !32 !32 !32 !32 !32 !32 !35 !32 !47 !10 !9 !112 !111 !112 !95 !101 !97 !120 !10 !9
  !109 !111 !118 !95 !101 !100 !120 !44 !32 !37 !37 !48 !10 !9 !100 !105 !118 !95 !101 !98
  !120 !10 !0
:string_80  !9 !109 !111 !118 !95 !101 !98 !120 !44 !101 !97 !120 !32 !32 !32 !32 !32
  !32 !32 !32 !32 !32 !32 !35 !32 !37 !37 !10 !9 !112 !111 !112 !95 !101 !97 !120 !10
  !9 !109 !111 !118 !95 !101 !100 !120 !44 !32 !37 !37 !48 !10 !9 !100 !105 !118 !95 !101
  !98 !120 !10 !9 !109 !111 !118 !95 !101 !97 !120 !44 !101 !100 !120 !10 !0
:string_81  !9 !112 !111 !112 !95 !101 !98 !120 !32 !32 !32 !32 !32 !32 !32 !32 !32
  !32 !32 !32 !32 !32 !32 !35 !32 !60 !10 !9 !99 !109 !112 !95 !101 !97 !120 !95 !101
  !98 !120 !10 !9 !115 !101 !116 !98 !95 !97 !108 !10 !9 !109 !111 !118 !122 !120 !95 !101
  !97 !120 !44 !97 !108 !10 !0
:string_82  !9 !112 !111 !112 !95 !101 !98 !120 !32 !32 !32 !32 !32 !32 !32 !32 !32
  !32 !32 !32 !32 !32 !32 !35 !32 !62 !10 !9 !99 !109 !112 !95 !101 !97 !120 !95 !101
  !98 !120 !10 !9 !115 !101 !116 !97 !95 !97 !108 !10 !9 !109 !111 !118 !122 !120 !95 !101
  !97 !120 !44 !97 !108 !10 !0
:string_83  !9 !116 !101 !115 !116 !95 !101 !97 !120 !44 !101 !97 !120 !32 !32 !32 !32
  !32 !32 !32 !32 !32 !32 !35 !32 !33 !10 !9 !115 !101 !116 !101 !95 !97 !108 !10 !9
  !109 !111 !118 !122 !120 !95 !101 !97 !120 !44 !97 !108 !10 !0
:string_84  "ERROR %d.%d: Expect identifier after ':"
:string_85  !58 !108 !95 !37 !115 !95 !37 !115 !10 !0
:string_86  !9 !112 !111 !112 !95 !101 !98 !120 !32 !32 !32 !32 !32 !32 !32 !32 !32
  !32 !32 !32 !32 !32 !32 !35 !32 !61 !58 !10 !9 !109 !111 !118 !95 !91 !101 !97 !120
  !93 !44 !101 !98 !120 !10 !9 !112 !111 !112 !95 !101 !97 !120 !10 !0
:string_87  !9 !109 !111 !118 !95 !97 !108 !44 !91 !101 !97 !120 !93 !32 !32 !32 !32
  !32 !32 !32 !32 !32 !32 !35 !32 !63 !49 !10 !9 !109 !111 !118 !122 !120 !95 !101 !97
  !120 !44 !97 !108 !10 !0
:string_88  !9 !109 !111 !118 !95 !97 !120 !44 !91 !101 !97 !120 !93 !32 !32 !32 !32
  !32 !32 !32 !32 !32 !32 !35 !32 !63 !50 !10 !9 !97 !110 !100 !95 !101 !97 !120 !44
  !32 !37 !37 !54 !53 !53 !51 !53 !10 !0
:string_89  !9 !109 !111 !118 !115 !120 !95 !101 !97 !120 !44 !97 !108 !32 !32 !32 !32
  !32 !32 !32 !32 !32 !32 !35 !32 !99 !104 !97 !114 !10 !0
:string_90  !9 !112 !111 !112 !95 !101 !98 !120 !32 !32 !32 !32 !32 !32 !32 !32 !32
  !32 !32 !32 !32 !32 !32 !35 !32 !61 !49 !10 !9 !109 !111 !118 !95 !91 !101 !98 !120
  !93 !44 !97 !108 !10 !0
:string_91  !9 !112 !111 !112 !95 !101 !98 !120 !32 !32 !32 !32 !32 !32 !32 !32 !32
  !32 !32 !32 !32 !32 !32 !35 !32 !61 !50 !10 !9 !109 !111 !118 !95 !91 !101 !98 !120
  !93 !44 !97 !120 !10 !0
:string_92  !9 !97 !100 !100 !95 !101 !98 !112 !44 !32 !37 !37 !37 !100 !32 !32 !32
  !32 !32 !32 !32 !32 !32 !35 !32 !40 !41 !10 !9 !99 !97 !108 !108 !95 !101 !97 !120
  !10 !9 !115 !117 !98 !95 !101 !98 !112 !44 !32 !37 !37 !37 !100 !10 !0
:string_93  !9 !109 !111 !118 !95 !101 !98 !120 !44 !101 !97 !120 !32 !32 !32 !32 !32
  !32 !32 !32 !32 !32 !32 !35 !32 !47 !115 !10 !9 !112 !111 !112 !95 !101 !97 !120 !10
  !9 !99 !100 !113 !10 !9 !105 !100 !105 !118 !95 !101 !98 !120 !10 !0
:string_94  !9 !109 !111 !118 !95 !101 !98 !120 !44 !101 !97 !120 !32 !32 !32 !32 !32
  !32 !32 !32 !32 !32 !32 !35 !32 !37 !37 !115 !10 !9 !112 !111 !112 !95 !101 !97 !120
  !10 !9 !99 !100 !113 !10 !9 !105 !100 !105 !118 !95 !101 !98 !120 !10 !9 !109 !111 !118
  !95 !101 !97 !120 !44 !101 !100 !120 !0
:string_95  !9 !112 !111 !112 !95 !101 !98 !120 !32 !32 !32 !32 !32 !32 !32 !32 !32
  !32 !32 !32 !32 !32 !32 !35 !32 !61 !61 !10 !9 !99 !109 !112 !95 !101 !97 !120 !95
  !101 !98 !120 !10 !9 !115 !101 !116 !101 !95 !97 !108 !10 !9 !109 !111 !118 !122 !120 !95
  !101 !97 !120 !44 !97 !108 !10 !0
:string_96  !9 !112 !111 !112 !95 !101 !98 !120 !32 !32 !32 !32 !32 !32 !32 !32 !32
  !32 !32 !32 !32 !32 !32 !35 !32 !33 !61 !10 !9 !99 !109 !112 !95 !101 !97 !120 !95
  !101 !98 !120 !10 !9 !115 !101 !116 !110 !101 !95 !97 !108 !10 !9 !109 !111 !118 !122 !120
  !95 !101 !97 !120 !44 !97 !108 !10 !0
:string_97  !9 !112 !111 !112 !95 !101 !98 !120 !32 !32 !32 !32 !32 !32 !32 !32 !32
  !32 !32 !32 !32 !32 !32 !35 !32 !60 !61 !10 !9 !99 !109 !112 !95 !101 !97 !120 !95
  !101 !98 !120 !10 !9 !115 !101 !116 !98 !101 !95 !97 !108 !10 !9 !109 !111 !118 !122 !120
  !95 !101 !97 !120 !44 !97 !108 !10 !0
:string_98  !9 !112 !111 !112 !95 !101 !98 !120 !32 !32 !32 !32 !32 !32 !32 !32 !32
  !32 !32 !32 !32 !32 !32 !35 !32 !62 !61 !10 !9 !99 !109 !112 !95 !101 !97 !120 !95
  !101 !98 !120 !10 !9 !115 !101 !116 !97 !101 !95 !97 !108 !10 !9 !109 !111 !118 !122 !120
  !95 !101 !97 !120 !44 !97 !108 !10 !0
:string_99  !9 !112 !111 !112 !95 !101 !98 !120 !32 !32 !32 !32 !32 !32 !32 !32 !32
  !32 !32 !32 !32 !32 !32 !35 !32 !60 !115 !10 !9 !99 !109 !112 !95 !101 !97 !120 !95
  !101 !98 !120 !10 !9 !115 !101 !116 !108 !95 !97 !108 !10 !9 !109 !111 !118 !122 !120 !95
  !101 !97 !120 !44 !97 !108 !10 !0
:string_100  !9 !112 !111 !112 !95 !101 !98 !120 !32 !32 !32 !32 !32 !32 !32 !32 !32
  !32 !32 !32 !32 !32 !32 !35 !32 !60 !61 !115 !10 !9 !99 !109 !112 !95 !101 !97 !120
  !95 !101 !98 !120 !10 !9 !115 !101 !116 !108 !101 !95 !97 !108 !10 !9 !109 !111 !118 !122
  !120 !95 !101 !97 !120 !44 !97 !108 !10 !0
:string_101  !9 !112 !111 !112 !95 !101 !98 !120 !32 !32 !32 !32 !32 !32 !32 !32 !32
  !32 !32 !32 !32 !32 !32 !35 !32 !62 !115 !10 !9 !99 !109 !112 !95 !101 !97 !120 !95
  !101 !98 !120 !10 !9 !115 !101 !116 !103 !95 !97 !108 !10 !9 !109 !111 !118 !122 !120 !95
  !101 !97 !120 !44 !97 !108 !10 !0
:string_102  !9 !112 !111 !112 !95 !101 !98 !120 !32 !32 !32 !32 !32 !32 !32 !32 !32
  !32 !32 !32 !32 !32 !32 !35 !32 !62 !61 !115 !102 !118 !10 !9 !99 !109 !112 !95 !101
  !97 !120 !95 !101 !98 !120 !10 !9 !115 !101 !116 !103 !101 !95 !97 !108 !10 !9 !109 !111
  !118 !122 !120 !95 !101 !97 !120 !44 !97 !108 !10 !0
:string_103  !9 !109 !111 !118 !95 !101 !99 !120 !44 !101 !97 !120 !32 !32 !32 !32 !32
  !32 !32 !32 !32 !32 !32 !35 !32 !60 !60 !10 !9 !112 !111 !112 !95 !101 !97 !120 !10
  !9 !115 !104 !108 !95 !101 !97 !120 !44 !99 !108 !10 !0
:string_104  !9 !109 !111 !118 !95 !101 !99 !120 !44 !101 !97 !120 !32 !32 !32 !32 !32
  !32 !32 !32 !32 !32 !32 !35 !32 !62 !62 !10 !9 !112 !111 !112 !95 !101 !97 !120 !10
  !9 !115 !104 !114 !95 !101 !97 !120 !44 !99 !108 !10 !0
:string_105  !69 !82 !82 !79 !82 !32 !37 !100 !46 !37 !100 !58 !32 !101 !120 !112 !101
  !99 !116 !105 !110 !103 !32 !39 !123 !39 !32 !97 !102 !116 !101 !114 !32 !39 !38 !38 !39
  !10 !0
:string_106  !9 !116 !101 !115 !116 !95 !101 !97 !120 !44 !101 !97 !120 !32 !32 !32 !32
  !32 !32 !32 !32 !32 !32 !35 !32 !38 !38 !10 !9 !106 !101 !32 !37 !37 !95 !37 !115
  !95 !97 !110 !100 !95 !101 !110 !100 !37 !100 !10 !9 !112 !111 !112 !95 !101 !97 !120 !10
  !0
:string_107  !69 !82 !82 !79 !82 !32 !37 !100 !46 !37 !100 !58 !32 !101 !120 !112 !101
  !99 !116 !105 !110 !103 !32 !39 !123 !39 !32 !97 !102 !116 !101 !114 !32 !39 !124 !124 !39
  !10 !0
:string_108  !9 !116 !101 !115 !116 !95 !101 !97 !120 !44 !101 !97 !120 !32 !32 !32 !32
  !32 !32 !32 !32 !32 !32 !35 !32 !124 !124 !10 !9 !106 !110 !101 !32 !37 !37 !95 !37
  !115 !95 !111 !114 !95 !101 !110 !100 !37 !100 !10 !9 !112 !111 !112 !95 !101 !97 !120 !10
  !0
:string_109  !69 !82 !82 !79 !82 !32 !37 !100 !46 !37 !100 !58 !32 !69 !120 !112 !101
  !99 !116 !105 !110 !103 !32 !99 !111 !110 !115 !116 !32 !105 !100 !101 !110 !116 !32 !97 !102
  !116 !101 !114 !32 !39 !45 !62 !39 !46 !32 !70 !111 !117 !110 !100 !32 !37 !115 !10 !0
:string_110  !9 !109 !111 !118 !95 !101 !97 !120 !44 !91 !101 !97 !120 !93 !32 !32 !32
  !32 !32 !32 !32 !32 !32 !35 !32 !45 !62 !10 !9 !97 !100 !100 !95 !101 !97 !120 !44
  !32 !37 !37 !37 !100 !10 !0
:string_111  !69 !82 !82 !79 !82 !32 !37 !100 !58 !32 !73 !100 !101 !110 !116 !32 !37
  !115 !32 !105 !115 !32 !110 !111 !116 !32 !100 !101 !102 !105 !110 !101 !100 !10 !0
:string_112  !9 !109 !111 !118 !95 !101 !98 !120 !44 !101 !97 !120 !32 !32 !32 !32 !32
  !32 !32 !32 !32 !32 !35 !32 !62 !60 !32 !115 !119 !97 !112 !10 !9 !112 !111 !112 !95
  !101 !97 !120 !10 !9 !112 !117 !115 !104 !95 !101 !98 !120 !10 !0
:string_113  !69 !82 !82 !79 !82 !32 !37 !100 !46 !37 !100 !58 !32 !116 !111 !107 !101
  !110 !32 !124 !37 !115 !124 !32 !110 !111 !116 !32 !115 !117 !112 !112 !111 !114 !116 !101 !100
  !10 !0
:string_114  !10 !58 !69 !76 !70 !95 !100 !97 !116 !97 !10 !10 !0
:string_115  !58 !83 !89 !83 !95 !77 !65 !76 !76 !79 !67 !32 !78 !85 !76 !76 !10
  !0
:string_116  ":string_%d  "
:string_117  !34 !37 !115 !34 !0
:string_118  "!%u%s"
:string_119  !10 !32 !32 !0
:string_120  "!0"
:string_121  ":g_%s"
:string_122  "%sNULL"
:string_123  !10 !9 !0
:string_124  ":static_%d_%s"
:string_125  !10 !58 !69 !76 !70 !95 !101 !110 !100 !10 !0
:string_126  "void"
:string_127  "const"
:string_128  "int"
:string_129  "do"
:string_130  "break"
:string_131  "continue"
:string_132  "if"
:string_133  "else"
:string_134  "return"
:string_135  "goto"
:string_136  "static"
:string_137  "char"
:string_138  "=:"
:string_139  "?1"
:string_140  "?2"
:string_141  "=1"
:string_142  "=2"
:string_143  "()"
:string_144  "/s"
:string_145  "%s"
:string_146  "=="
:string_147  "!="
:string_148  "<="
:string_149  ">="
:string_150  "<s"
:string_151  "<=s"
:string_152  ">s"
:string_153  ">=s"
:string_154  "<<"
:string_155  ">>"
:string_156  "&&"
:string_157  "||"
:string_158  "->"
:string_159  "><"
:string_160  "-p"
:g___sys_stdin
    NULL NULL
:g___sys_stdout
    NULL NULL
:g___sys_stderr
    NULL NULL
:g_stdin
    NULL
:g_stdout
    NULL
:g_stderr
    NULL
:g_errno
    NULL
:g_LINE_MACRO_OUTPUT_FORMAT_GCC
    NULL
:g_LINE_MACRO_OUTPUT_FORMAT_NONE
    NULL
:g_LINE_MACRO_OUTPUT_FORMAT_STD
    NULL
:g_LINE_MACRO_OUTPUT_FORMAT_P10
    NULL
:g__sys_env
    NULL
:g_fin
    NULL
:g_fout
    NULL
:g_ferr
    NULL
:g_cur_char
    NULL
:g_cur_char_line
    NULL
:g_cur_char_column
    NULL
:g_sym
    NULL
:g_token
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL
:g_token_len
    NULL
:g_int_value
    NULL
:g_cur_line
    NULL
:g_cur_column
    NULL
:g_keywords
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
:g_symbols
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL
:g_error
    NULL
:g_idents
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
:g_nr_idents
    NULL
:g_pos
    NULL
:g_statics
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL
:g_nr_statics
    NULL
:g_strings
    NULL
:g_nesting_depth
    NULL
:g_nesting_nr_vars
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL
:g_nesting_pos
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL
:g_nesting_type
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL
:g_nesting_id
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL NULL NULL NULL NULL
    NULL NULL NULL NULL

:ELF_end

File /x86/stack_c_intro.M1

Source file is 'src/stack_c_intro.M1'.
URL: https://github.com/FransFaase/MES-replacement/blob/64abad6a2a55cbef00ffa065e1c019c6a1932acf/src/stack_c_intro.M1
DEFINE pop_eax 58
DEFINE pop_ebx 5B
DEFINE pop_ecx 59
DEFINE pop_edx 5A
DEFINE pop_edi 5F
DEFINE push_eax 50
DEFINE push_ebx 53
DEFINE push_edi 57
DEFINE mov_eax, B8
DEFINE mov_ebx, BB
DEFINE mov_edx, BA
DEFINE mov_eax,[DWORD] 8B05
DEFINE mov_ebx,[DWORD] 8B1D
DEFINE mov_eax,ebx 89D8
DEFINE mov_eax,edx 89D0
DEFINE mov_edx,eax 89C2
DEFINE mov_ebx,eax 89C3
DEFINE mov_ebx,esp 89E3
DEFINE mov_ecx,eax 89C1
DEFINE mov_ebp,eax 89C5
DEFINE mov_al,[eax] 8A00
DEFINE mov_ax,[eax] 668B00
DEFINE mov_eax,[eax] 8B00
DEFINE mov_ebx,[ebp] 8B5D00
DEFINE mov_eax,[ebp+DWORD] 8B85 
DEFINE lea_eax,[ebp+DWORD] 8D85
DEFINE lea_ecx,[ebp+DWORD] 8D8D
DEFINE mov_[DWORD],eax A3
DEFINE mov_[DWORD],ebx 891D
DEFINE mov_[ecx],eax 8901
DEFINE mov_[eax],ebx 8918
DEFINE mov_[ebx],al 8803
DEFINE mov_[ebx],ax 668903
DEFINE mov_[ebx],eax 8903
DEFINE mov_[ebp],eax 894500
DEFINE mov_[eax],bl 8818
DEFINE add_eax, 81C0
DEFINE add_eax,ebx 01D8
DEFINE add_ebx,eax 01C3
DEFINE sub_ebx,eax 29C3
DEFINE shl_eax,cl D3E0
DEFINE shr_eax,cl D3E8
DEFINE cdq 99
DEFINE mul_ebx F7E3
DEFINE div_ebx F7F3
DEFINE idiv_ebx F7FB
DEFINE and_eax, 25
DEFINE and_eax,ebx 21D8
DEFINE or_eax,ebx 09D8
DEFINE xor_eax,ebx 31D8
DEFINE not_eax F7D0
DEFINE add_ebp, 81C5
DEFINE sub_ebp, 81ED
DEFINE cmp_eax_ebx 39C3
DEFINE seta_al 0F97C0
DEFINE setae_al 0F93C0
DEFINE setb_al 0F92C0
DEFINE setbe_al 0F96C0
DEFINE sete_al 0F94C0
DEFINE setle_al 0F9EC0
DEFINE setl_al 0F9CC0
DEFINE setge_al 0F9DC0
DEFINE setg_al 0F9FC0
DEFINE setne_al 0F95C0
DEFINE movsx_eax,al 0FBEC0
DEFINE movzx_eax,al 0FB6C0
DEFINE test_eax,eax 85C0
DEFINE jmp E9
DEFINE je 0F84
DEFINE jne 0F85
DEFINE jle 0F8E
DEFINE call E8
DEFINE call_eax FFD0
DEFINE ret C3
DEFINE int_80 CD80
DEFINE NULL 00000000

:ELF_text

:_start
    mov_eax, %45                                # the Syscall # for SYS_BRK
    mov_ebx, %0                                 # Get current brk
    int_80                                      # Let the kernel do the work
    mov_[DWORD],eax &SYS_MALLOC                 # Set our malloc pointer

    # allocate memory for the second stack
    mov_eax, %100000
    push_eax                                    # (sys_malloc assums address)
    call %f_sys_malloc
    mov_ebp,eax
    
    # setup argc and argv for the main function
    mov_edx,eax
    pop_eax
    mov_ebx,esp
    push_eax
    push_ebx
    mov_eax,edx

    #call main
    call %f_main
    
    # program completed Successfully
    mov_ebx,eax                                 # All is well
    mov_eax, %1                                 # put the exit syscall number in eax
    int_80                                      # Call it a good day

# These sys_ function follow the same calling conventions
# as all the other functions. To access the arguments on the stack
# the return address is stored in the edi address (which is only possible
# because these functions do not call other function) and the function
# address (which is stored in the eax register, the top of the stack)
# needs to be popped as well.

:f_sys_int80
    pop_edi               # Save return address from the stack
    pop_edx               # Get the arguments from the stack
    pop_ecx
    pop_ebx
    pop_eax
    int_80                # call the Kernel
    push_edi              # restore return address to the stack
    ret

:f_sys_malloc
    pop_edi
    pop_eax
    mov_ebx,[DWORD] &SYS_MALLOC                 # Using the current pointer
    add_ebx,eax                                 # Request the number of desired bytes
    mov_eax, %45                                # the Syscall # for SYS_BRK
    int_80                                      # call the Kernel
    mov_eax,[DWORD] &SYS_MALLOC                 # Return pointer
    mov_[DWORD],ebx &SYS_MALLOC                 # Update pointer
    push_edi
    ret
:SYS_MALLOC
    NULL

    

File /src/tcc_cc.sl

Source file is 'src/tcc_cc.sl'.
URL: https://github.com/FransFaase/MES-replacement/blob/64abad6a2a55cbef00ffa065e1c019c6a1932acf/src/tcc_cc.sl
void sys_int80 ;
void sys_malloc ;
void exit
{
    int result result =:
# stdlib.c 8
    1 result ? 0 0 sys_int80 () ;
    0 return
}
const s1_m_fh 0
const s1_m_at_eof 4
int 2 __sys_stdin
int 2 __sys_stdout
int 2 __sys_stderr
int stdin
int stdout
int stderr
void memcpy
{
    int n n =:
    int src src =:
    int dest dest =:
    int d d dest ? = ;

    int s s src ? = ;

# stdlib.c 34
    {
        int i i 0 = ;

        do
        {
            i ? n ? <s ! if { break }
# stdlib.c 35
            d ? i ? + s ? i ? + ?1 char =1 ;
            i $ ? 1 + = 1 - ;
        }
    }
# stdlib.c 36
    dest ? return
    0 return
}
void memmove
{
    int n n =:
    int src src =:
    int dest dest =:
    int d d dest ? = ;

    int s s src ? = ;

# stdlib.c 43
    1 if
    {
# stdlib.c 44
# stdlib.c 45
        {
            int i i 0 = ;

            do
            {
                i ? n ? < ! if { break }
# stdlib.c 46
                d ? i ? + s ? i ? + ?1 char =1 ;
                i $ ? 1 + = 1 - ;
            }
        }
    }
    else
    {
# stdlib.c 48
        src ? dest ? < if
        {
# stdlib.c 49
            int j j n ? 1 - = ;

# stdlib.c 51
            {
                int i i 0 = ;

                do
                {
                    i ? n ? < ! if { break }
# stdlib.c 52
                    d ? j ? + s ? j ? + ?1 char =1 ;
                    i $ ? 1 + = 1 - ; j $ ? 1 - = 1 + ;
                }
            }
        }
    }
# stdlib.c 54
    dest ? return
    0 return
}
void memset
{
    int n n =:
    int c c =:
    int s s =:
    int p p s ? = ;

# stdlib.c 60
    {
        int i i 0 = ;

        do
        {
            i ? n ? < ! if { break }
# stdlib.c 61
            p ? i ? + c ? =1 ;
            i $ ? 1 + = 1 - ;
        }
    }
# stdlib.c 62
    s ? return
    0 return
}
void memcmp
{
    int n n =:
    int s2 s2 =:
    int s1 s1 =:
    int p1 p1 s1 ? = ;

    int p2 p2 s2 ? = ;

# stdlib.c 69
    {
        int i i 0 = ;

        do
        {
            i ? n ? < ! if { break }
# stdlib.c 70
            int result result p1 ? ?1 char p2 ? ?1 char - = ;

# stdlib.c 72
            result ? 0 != if
            {
# stdlib.c 73
                result ? return
            }
            i $ ? 1 + = 1 - ; p1 $ ? 1 + = 1 - ; p2 $ ? 1 + = 1 - ;
        }
    }
# stdlib.c 75
    0 return
    0 return
}
void strlen
{
    int s s =:
    int len len 0 = ;

# stdlib.c 81
    {
        do
        {
            s ? ?1 char 0 != ! if { break }
# stdlib.c 82
            len $ ? 1 + = 1 - ;
            s $ ? 1 + = 1 - ;
        }
    }
# stdlib.c 83
    len ? return
    0 return
}
void strcpy
{
    int src src =:
    int dest dest =:
    int result result dest ? = ;

# stdlib.c 89
    do
    {
        src ? ?1 char 0 != ! if { break }
# stdlib.c 90
        dest $ ? 1 + = 1 - src $ ? 1 + = 1 - ?1 char =1 ;
    }
# stdlib.c 91
    dest ? 0 =1 ;
# stdlib.c 92
    result ? return
    0 return
}
void strncpy
{
    int n n =:
    int src src =:
    int dest dest =:
    int d d dest ? = ;

    int s s src ? = ;

# stdlib.c 99
    {
        int i i 0 = ;

        do
        {
            i ? n ? <s ! if { break }
# stdlib.c 100
# stdlib.c 101
            d ? i ? + s ? i ? + ?1 char =1 ;
# stdlib.c 102
            s ? i ? + ?1 char 0 == if
            {
# stdlib.c 103
                break
            }
            i $ ? 1 + = 1 - ;
        }
    }
# stdlib.c 105
    dest ? return
    0 return
}
void strcat
{
    int src src =:
    int dest dest =:
# stdlib.c 110
    dest ? dest ? strlen () + src ? strcpy () ;
# stdlib.c 111
    dest ? return
    0 return
}
void strchr
{
    int c c =:
    int s s =:
# stdlib.c 116
    {
        do
        {
            s ? ?1 char 0 != ! if { break }
# stdlib.c 117
            s ? ?1 char c ? == if
            {
# stdlib.c 118
                s ? return
            }
            s $ ? 1 + = 1 - ;
        }
    }
# stdlib.c 119
    c ? 0 == if { s ? } else { 0 } return
    0 return
}
void strrchr
{
    int c c =:
    int s s =:
    int n n s ? strlen () = ;

# stdlib.c 125
    {
        int i i n ? = ;

        do
        {
            i ? 0 >=s ! if { break }
# stdlib.c 126
            s ? i ? + ?1 char c ? == if
            {
# stdlib.c 127
                s ? i ? + return
            }
            i $ ? 1 - = 1 + ;
        }
    }
# stdlib.c 128
    0 return
    0 return
}
void strcmp
{
    int s2 s2 =:
    int s1 s1 =:
# stdlib.c 133
    {
        do
        {
# stdlib.c 134
            int result result s1 ? ?1 char s2 ? ?1 char - = ;

# stdlib.c 136
            result ? 0 != || { s1 ? ?1 char 0 == } if
            {
# stdlib.c 137
                result ? return
            }
# stdlib.c 138
            s1 $ ? 1 + = 1 - ;
# stdlib.c 139
            s2 $ ? 1 + = 1 - ;
        }
    }
# stdlib.c 141
    0 return
    0 return
}
void strncmp
{
    int n n =:
    int s2 s2 =:
    int s1 s1 =:
# stdlib.c 146
    {
        do
        {
            n ? 0 > ! if { break }
# stdlib.c 147
            int result result s1 ? ?1 char s2 ? ?1 char - = ;

# stdlib.c 149
            result ? 0 != || { s1 ? ?1 char 0 == } if
            {
# stdlib.c 150
                result ? return
            }
# stdlib.c 151
            s1 $ ? 1 + = 1 - ;
# stdlib.c 152
            s2 $ ? 1 + = 1 - ;
            n $ ? 1 - = 1 + ;
        }
    }
# stdlib.c 154
    0 return
    0 return
}
void strstr
{
    int needle needle =:
    int haystack haystack =:
    int n n needle ? strlen () = ;

# stdlib.c 160
    {
        do
        {
            haystack ? ?1 char 0 != ! if { break }
# stdlib.c 161
            haystack ? needle ? n ? strncmp () 0 == if
            {
# stdlib.c 162
                haystack ? return
            }
            haystack $ ? 1 + = 1 - ;
        }
    }
# stdlib.c 163
    0 return
    0 return
}
void strtoul
{
    int base base =:
    int endptr endptr =:
    int nptr nptr =:
# stdlib.c 169
    base ? 0 == if
    {
# stdlib.c 170
# stdlib.c 171
        base 10 = ;
# stdlib.c 172
        nptr ? ?1 char 48 == if
        {
# stdlib.c 173
# stdlib.c 174
            base 8 = ;
# stdlib.c 175
            nptr $ ? 1 + = 1 - ;
# stdlib.c 176
            nptr ? ?1 char 120 == || { nptr ? ?1 char 88 == } if
            {
# stdlib.c 177
# stdlib.c 178
                base 16 = ;
# stdlib.c 179
                nptr $ ? 1 + = 1 - ;
            }
        }
    }
    int result result 0 = ;

    int sub_10 sub_10 48 base ? 10 <s if { base ? } else { 10 } + =1 ;

# stdlib.c 185
    {
        do
        {
# stdlib.c 186
# stdlib.c 187
            48 nptr ? ?1 char <=s && { nptr ? ?1 char sub_10 ?1 char <s } if
            {
# stdlib.c 188
                result base ? result ? * nptr ? ?1 char + 48 - = ;
            }
            else
            {
# stdlib.c 189
                97 nptr ? ?1 char <=s && { nptr ? ?1 char 97 base ? + 10 - <s } if
                {
# stdlib.c 190
                    result base ? result ? * nptr ? ?1 char + 97 - 10 + = ;
                }
                else
                {
# stdlib.c 191
                    65 nptr ? ?1 char <=s && { nptr ? ?1 char 65 base ? + 10 - <s } if
                    {
# stdlib.c 192
                        result base ? result ? * nptr ? ?1 char + 65 - 10 + = ;
                    }
                    else
                    {
# stdlib.c 194
                        break
                    }
                }
            }
            nptr $ ? 1 + = 1 - ;
        }
    }
# stdlib.c 196
    endptr ? 0 != if
    {
# stdlib.c 197
        endptr ? nptr ? = ;
    }
# stdlib.c 198
    result ? return
    0 return
}
void strtol
{
    int base base =:
    int endptr endptr =:
    int nptr nptr =:
    int sign sign 1 = ;

# stdlib.c 204
    nptr ? ?1 char 45 == if
    {
# stdlib.c 205
# stdlib.c 206
        sign 4294967295 = ;
# stdlib.c 207
        nptr $ ? 1 + = 1 - ;
    }
# stdlib.c 209
    sign ? nptr ? endptr ? base ? strtoul () * return
    0 return
}
void strtoll
{
    int base base =:
    int endptr endptr =:
    int nptr nptr =:
# stdlib.c 214
    nptr ? endptr ? base ? strtol () return
    0 return
}
void strtoull
{
    int base base =:
    int endptr endptr =:
    int nptr nptr =:
# stdlib.c 219
    nptr ? endptr ? base ? strtoul () return
    0 return
}
void strtof
{
    int endptr endptr =:
    int str str =:
# stdlib.c 225
    endptr ? str ? = ;
# stdlib.c 226
    0 return
    0 return
}
void malloc
{
    int size size =:
# stdlib.c 231
    size size ? 3 + 3 ~ & = ;
    int result result size ? 4 + sys_malloc () = ;

# stdlib.c 233
    result ? size ? = ;
# stdlib.c 234
    result $ ? 4 + = 4 - ;
# stdlib.c 235
    result ? return
    0 return
}
void realloc
{
    int size size =:
    int ptr ptr =:
    int result result size ? malloc () = ;

# stdlib.c 241
    ptr ? 0 != if
    {
# stdlib.c 242
        int old_ptr old_ptr ptr ? = ;

        int old_size old_size old_ptr ? 4294967295 4 * + ? 4 /s = ;

# stdlib.c 245
        {
            int i i 0 = ;

            do
            {
                i ? old_size ? <s ! if { break }
# stdlib.c 246
                result ? i ? 4 * + old_ptr ? i ? 4 * + ? = ;
                i $ ? 1 + = 1 - ;
            }
        }
    }
# stdlib.c 248
    result ? return
    0 return
}
void calloc
{
    int S S =:
    int N N =:
    int len len N ? S ? * = ;

    int r r len ? malloc () = ;

# stdlib.c 255
    {
        int i i 0 = ;

        do
        {
            i ? len ? <s ! if { break }
# stdlib.c 256
            r ? i ? + 0 =1 ;
            i $ ? 1 + = 1 - ;
        }
    }
# stdlib.c 257
    r ? return
    0 return
}
void free
{
    int ptr ptr =:
# stdlib.c 263
    0 return
    0 return
}
void fwrite
{
    int stream stream =:
    int nmemb nmemb =:
    int size size =:
    int ptr ptr =:
# stdlib.c 268
    4 stream ->s1_m_fh ? ptr ? size ? nmemb ? * sys_int80 () return
    0 return
}
void fputc
{
    int stream stream =:
    int c c =:
# stdlib.c 273
    4 stream ->s1_m_fh ? c 1 sys_int80 () return
    0 return
}
void fputs
{
    int stream stream =:
    int s s =:
# stdlib.c 278
    4 stream ->s1_m_fh ? s ? s ? strlen () sys_int80 () return
    0 return
}
void __sys_printf
{
    int args args =:
    int format format =:
    int len len =:
    int trg trg =:
    int stream stream =:
    int 5 buffer
    int l l 0 = ;

    int s
    int cnt cnt 0 = ;

    int org_format org_format format ? = ;

# stdlib.c 292
    {
        do
        {
# stdlib.c 293
# stdlib.c 294
            len ? 0 == if
            {
# stdlib.c 295
                break
            }
# stdlib.c 296
            l ? 0 >s if
            {
# stdlib.c 297
# stdlib.c 298
                stream ? 0 != if
                {
# stdlib.c 299
                    s ? ?1 char stream ? fputc () ;
                }
                else
                {
# stdlib.c 300
                    trg ? 0 != if
                    {
# stdlib.c 301
                        trg $ ? 1 + = 1 - s ? ?1 char =1 ;
                    }
                }
# stdlib.c 302
                s $ ? 1 + = 1 - ;
# stdlib.c 303
                l $ ? 1 - = 1 + ;
# stdlib.c 304
                cnt $ ? 1 + = 1 - ;
# stdlib.c 305
                len ? 0 >s if
                {
# stdlib.c 306
                    len $ ? 1 - = 1 + ;
                }
            }
# stdlib.c 308
            l ? 0 == if
            {
# stdlib.c 309
# stdlib.c 310
                format ? ?1 char 0 == if
                {
# stdlib.c 311
                    break
                }
# stdlib.c 312
                s buffer = ;
# stdlib.c 313
                l 1 = ;
# stdlib.c 314
                format ? ?1 char 37 == if
                {
# stdlib.c 315
# stdlib.c 316
                    format $ ? 1 + = 1 - ;
# stdlib.c 317
                    format ? ?1 char 37 == if
                    {
# stdlib.c 318
                        buffer 0 + 37 =1 ;
                    }
                    else
                    {
# stdlib.c 320
                        int modifier modifier 0 = ;

                        int sign sign 1 = ;

# stdlib.c 323
                        format ? ?1 char 45 == if
                        {
# stdlib.c 324
# stdlib.c 325
                            sign 4294967295 = ;
# stdlib.c 326
                            format $ ? 1 + = 1 - ;
                        }
# stdlib.c 328
                        do
                        {
                            48 format ? ?1 char <=s && { format ? ?1 char 57 <=s } ! if { break }
# stdlib.c 329
# stdlib.c 330
                            modifier 10 modifier ? * format ? ?1 char + 48 - = ;
# stdlib.c 331
                            format $ ? 1 + = 1 - ;
                        }
# stdlib.c 333
                        format ? ?1 char 115 == if
                        {
# stdlib.c 334
# stdlib.c 335
                            s args $ ? 4 + = 4 - ? = ;
# stdlib.c 336
                            l s ? strlen () = ;
                        }
                        else
                        {
# stdlib.c 338
                            format ? ?1 char 100 == if
                            {
# stdlib.c 339
                                int v v args ? ? = ;

                                int b b 20 = ;

# stdlib.c 342
                                v ? 0 == if
                                {
# stdlib.c 343
                                    buffer b $ ? 1 - = + 48 =1 ;
                                }
                                else
                                {
# stdlib.c 345
# stdlib.c 346
                                    v ? 0 <s if
                                    {
# stdlib.c 346
                                        v 0 v ? - = ;
                                    }
# stdlib.c 347
                                    {
                                        do
                                        {
                                            v ? 0 >s ! if { break }
# stdlib.c 348
                                            buffer b $ ? 1 - = + 48 v ? 10 %s + =1 ;
                                            v v ? 10 /s = ;
                                        }
                                    }
# stdlib.c 349
                                    args ? ? 0 <s if
                                    {
# stdlib.c 350
                                        buffer b $ ? 1 - = + 45 =1 ;
                                    }
                                }
# stdlib.c 352
                                l 20 b ? - = ;
# stdlib.c 353
                                modifier ? 0 >s if
                                {
# stdlib.c 354
# stdlib.c 355
                                    modifier ? l ? >s if
                                    {
# stdlib.c 356
# stdlib.c 357
                                        sign ? 4294967295 == if
                                        {
# stdlib.c 358
# stdlib.c 359
                                            {
                                                int i i 20 modifier ? - = ;

                                                do
                                                {
                                                    i ? 20 <s ! if { break }
# stdlib.c 360
                                                    buffer i ? + b ? 20 <s if { buffer b $ ? 1 + = 1 - + ?1 char } else { 32 } =1 ;
                                                    i $ ? 1 + = 1 - ;
                                                }
                                            }
# stdlib.c 361
                                            b 20 modifier ? - = ;
                                        }
                                        else
                                        {
# stdlib.c 364
                                            {
                                                do
                                                {
                                                    l ? modifier ? <s ! if { break }
# stdlib.c 365
                                                    buffer b $ ? 1 - = + 32 =1 ;
                                                    l $ ? 1 + = 1 - ;
                                                }
                                            }
                                        }
                                    }
# stdlib.c 367
                                    l modifier ? = ;
                                }
# stdlib.c 369
                                s buffer b ? + = ;
# stdlib.c 370
                                args $ ? 4 + = 4 - ;
                            }
                            else
                            {
# stdlib.c 372
                                format ? ?1 char 117 == if
                                {
# stdlib.c 373
                                    int v v args $ ? 4 + = 4 - ? = ;

# stdlib.c 375
                                    v ? 0 == if
                                    {
# stdlib.c 376
                                        buffer 0 + 48 =1 ;
                                    }
                                    else
                                    {
# stdlib.c 378
# stdlib.c 379
                                        l 20 = ;
# stdlib.c 380
                                        {
                                            do
                                            {
                                                v ? 0 > ! if { break }
# stdlib.c 381
                                                buffer l $ ? 1 - = + 48 v ? 10 % + =1 ;
                                                v v ? 10 / = ;
                                            }
                                        }
# stdlib.c 382
                                        s buffer l ? + = ;
# stdlib.c 383
                                        l 20 l ? - = ;
                                    }
                                }
                                else
                                {
# stdlib.c 386
                                    format ? ?1 char 120 == || { format ? ?1 char 112 == } if
                                    {
# stdlib.c 387
                                        int v v args $ ? 4 + = 4 - ? = ;

# stdlib.c 389
                                        v ? 0 == if
                                        {
# stdlib.c 390
                                            buffer 0 + 48 =1 ;
                                        }
                                        else
                                        {
# stdlib.c 392
# stdlib.c 393
                                            l 20 = ;
# stdlib.c 394
                                            {
                                                do
                                                {
                                                    v ? 0 != ! if { break }
# stdlib.c 395
                                                    buffer l $ ? 1 - = + v ? 15 & 10 < if { 48 } else { 97 10 - } v ? 15 & + =1 ;
                                                    v $ ? 4 >> = ;
                                                }
                                            }
# stdlib.c 396
                                            s buffer l ? + = ;
# stdlib.c 397
                                            l 20 l ? - = ;
                                        }
                                    }
                                    else
                                    {
# stdlib.c 400
                                        format ? ?1 char 99 == if
                                        {
# stdlib.c 401
# stdlib.c 402
                                            buffer 0 + args $ ? 4 + = 4 - ? =1 ;
                                        }
                                        else
                                        {
# stdlib.c 405
# stdlib.c 406
                                            "__sys_printf %" stderr ? fputs () ;
# stdlib.c 407
                                            format ? ?1 char stderr ? fputc () ;
# stdlib.c 408
                                            " " stderr ? fputs () ;
# stdlib.c 409
                                            org_format ? stderr ? fputs () ;
# stdlib.c 410
                                            "\n" stderr ? fputs () ;
# stdlib.c 411
                                            1 exit () ;
                                        }
                                    }
                                }
                            }
                        }
                    }
                }
                else
                {
# stdlib.c 416
# stdlib.c 417
                    buffer 0 + format ? ?1 char =1 ;
# stdlib.c 418
                    s buffer = ;
# stdlib.c 419
                    l 1 = ;
                }
# stdlib.c 421
                format $ ? 1 + = 1 - ;
            }
        }
    }
# stdlib.c 424
    len ? 0 != && { trg ? 0 != } if
    {
# stdlib.c 425
        trg ? 0 =1 ;
    }
# stdlib.c 426
    cnt ? return
    0 return
}
void va_start ;
void va_end
{
    int ap ap =:
    0 return
}
void fprintf
{
    int __var_args __var_args =:
    int format format =:
    int stream stream =:
    int ap
# stdlib.c 435
    ap __var_args ? = ;
# stdlib.c 436
    stream ? 0 4294967295 format ? ap ? __sys_printf () return
    0 return
}
void printf
{
    int __var_args __var_args =:
    int format format =:
    int ap
# stdlib.c 442
    ap __var_args ? = ;
# stdlib.c 443
    stdout ? 0 4294967295 format ? ap ? __sys_printf () return
    0 return
}
void sprintf
{
    int __var_args __var_args =:
    int format format =:
    int str str =:
    int ap
# stdlib.c 449
    ap __var_args ? = ;
# stdlib.c 450
    0 str ? 4294967295 format ? ap ? __sys_printf () return
    0 return
}
void snprintf
{
    int __var_args __var_args =:
    int format format =:
    int size size =:
    int str str =:
    int ap
# stdlib.c 455
    ap __var_args ? = ;
# stdlib.c 456
    0 str ? size ? format ? ap ? __sys_printf () return
    0 return
}
void vsnprintf
{
    int ap ap =:
    int format format =:
    int size size =:
    int str str =:
# stdlib.c 461
    0 str ? size ? format ? ap ? __sys_printf () return
    0 return
}
void open
{
    int __var_args __var_args =:
    int flag flag =:
    int filename filename =:
    int mode mode 0 = ;

# stdlib.c 477
    flag ? 1 & 0 != if
    {
# stdlib.c 478
        int ap
# stdlib.c 480
        ap __var_args ? = ;
# stdlib.c 481
        mode ap ? 0 4 * + ? = ;
    }
# stdlib.c 483
    5 filename ? flag ? mode ? sys_int80 () return
    0 return
}
void close
{
    int fd fd =:
# stdlib.c 488
    6 fd ? 0 0 sys_int80 () return
    0 return
}
void read
{
    int count count =:
    int buf buf =:
    int fd fd =:
# stdlib.c 493
    3 fd ? buf ? count ? sys_int80 () return
    0 return
}
void lseek
{
    int whence whence =:
    int offset offset =:
    int fd fd =:
# stdlib.c 498
    19 fd ? offset ? whence ? sys_int80 () return
    0 return
}
void fopen
{
    int mode mode =:
    int pathname pathname =:
    int rw rw mode ? ?1 char =1 ;

# stdlib.c 504
    mode ? ?1 char 114 == || { mode ? ?1 char 119 == } if
    {
# stdlib.c 505
        mode $ ? 1 + = 1 - ;
    }
    int bin bin 0 = ;

# stdlib.c 507
    mode ? ?1 char 98 == if
    {
# stdlib.c 508
# stdlib.c 509
        bin 1 = ;
# stdlib.c 510
        mode $ ? 1 + = 1 - ;
    }
    int plus plus 0 = ;

# stdlib.c 513
    mode ? ?1 char 43 == if
    {
# stdlib.c 514
# stdlib.c 515
        plus 1 = ;
# stdlib.c 516
        mode $ ? 1 + = 1 - ;
    }
# stdlib.c 518
    mode ? ?1 char 0 != if
    {
# stdlib.c 519
# stdlib.c 520
        "Mode %s should be 'r/w(b)(+)', 'w', or 'wb'\n" { int 1 __var_args __var_args mode ? = ; __var_args printf () } ;
# stdlib.c 521
        0 return
    }
    int open_mode open_mode rw ?1 char 114 == if { plus ? 1 == if { 2 } else { 0 } } else { plus ? 1 == if { 2 } else { 1 } 64 | 512 | } = ;

    int fh fh 5 pathname ? open_mode ? 511 sys_int80 () = ;

# stdlib.c 528
    fh ? 0 <s if
    {
# stdlib.c 529
# stdlib.c 530
        "fopen %s %s returned %d\n" { int 3 __var_args __var_args pathname ? = ; __var_args 4 + mode ? = ; __var_args 8 + fh ? = ; __var_args printf () } ;
# stdlib.c 531
        0 return
    }
    int f f 8 malloc () = ;

# stdlib.c 534
    f ->s1_m_fh fh ? = ;
# stdlib.c 535
    f ->s1_m_at_eof 0 = ;
# stdlib.c 536
    f ? return
    0 return
}
void fdopen
{
    int mode mode =:
    int fd fd =:
    int f f 8 malloc () = ;

# stdlib.c 542
    f ->s1_m_fh fd ? = ;
# stdlib.c 543
    f ->s1_m_at_eof 0 = ;
# stdlib.c 544
    f ? return
    0 return
}
void fclose
{
    int stream stream =:
# stdlib.c 549
    6 stream ->s1_m_fh ? 0 0 sys_int80 () return
    0 return
}
void fflush
{
    int stream stream =:
# stdlib.c 555
    0 return
    0 return
}
void fseek
{
    int whence whence =:
    int offset offset =:
    int stream stream =:
# stdlib.c 560
    stream ->s1_m_fh ? offset ? whence ? lseek () return
    0 return
}
void ftell
{
    int stream stream =:
# stdlib.c 565
    stream ->s1_m_fh ? 0 1 lseek () return
    0 return
}
void fread
{
    int stream stream =:
    int nmemb nmemb =:
    int size size =:
    int ptr ptr =:
    int s s ptr ? = ;

# stdlib.c 571
    {
        int i i 0 = ;

        do
        {
            i ? nmemb ? <s ! if { break }
# stdlib.c 572
            int r r stream ->s1_m_fh ? s ? size ? read () = ;

# stdlib.c 574
            r ? size ? < if
            {
# stdlib.c 575
                i ? return
            }
# stdlib.c 576
            s $ ? size ? + = ;
            i $ ? 1 + = 1 - ;
        }
    }
# stdlib.c 578
    nmemb ? return
    0 return
}
void lseek
{
    int whence whence =:
    int offset offset =:
    int fd fd =:
# stdlib.c 587
    19 fd ? offset ? whence ? sys_int80 () return
    0 return
}
void feof
{
    int stream stream =:
# stdlib.c 592
    stream ->s1_m_at_eof ? return
    0 return
}
void fgetc
{
    int stream stream =:
# stdlib.c 597
    stream ->s1_m_at_eof ? if
    {
# stdlib.c 598
        4294967295 return
    }
    int ch
    int ret ret 3 stream ->s1_m_fh ? ch 1 sys_int80 () = ;

# stdlib.c 601
    ret ? 0 <=s if
    {
# stdlib.c 602
# stdlib.c 603
        stream ->s1_m_at_eof 1 = ;
# stdlib.c 604
        4294967295 return
    }
# stdlib.c 606
    ch ?1 return
    0 return
}
void ldexp
{
    int exp exp =:
    int x x =:
    int result result x ? = ;

# stdlib.c 613
    {
        int i i 1 = ;

        do
        {
            i ? exp ? <s ! if { break }
# stdlib.c 614
            result $ ? x ? * = ;
            i $ ? 1 + = 1 - ;
        }
    }
# stdlib.c 615
    result ? return
    0 return
}
void time
{
    int tloc tloc =:
# stdlib.c 621
    stderr ? "TODO time\n" 0 fprintf () ;
# stdlib.c 621
    1 exit () ;
    0 return
}
const s2_m_tm_sec 0
const s2_m_tm_min 4
const s2_m_tm_hour 8
const s2_m_tm_mday 12
const s2_m_tm_mon 16
const s2_m_tm_year 20
const s2_m_tm_wday 24
const s2_m_tm_yday 28
const s2_m_tm_isdst 32
void localtime
{
    int timep timep =:
# stdlib.c 638
    stderr ? "TODO localtime\n" 0 fprintf () ;
# stdlib.c 638
    1 exit () ;
    0 return
}
const s3_m_tv_sec 0
const s3_m_tv_usec 4
const s4_m_tz_minuteswest 0
const s4_m_tz_dsttime 4
void gettimeofday
{
    int tz tz =:
    int tv tv =:
# stdlib.c 651
    0 return
    0 return
}
int errno
int LINE_MACRO_OUTPUT_FORMAT_GCC
int LINE_MACRO_OUTPUT_FORMAT_NONE
int LINE_MACRO_OUTPUT_FORMAT_STD
int LINE_MACRO_OUTPUT_FORMAT_P10
void write
{
    int count count =:
    int buf buf =:
    int fd fd =:
# stdlib.c 667
    4 fd ? buf ? count ? sys_int80 () return
    0 return
}
void fileno
{
    int stream stream =:
# stdlib.c 672
    stream ->s1_m_fh ? return
    0 return
}
void getcwd
{
    int size size =:
    int buf buf =:
# stdlib.c 681
    183 buf ? size ? 0 sys_int80 () ;
# stdlib.c 682
    buf ? return
    0 return
}
int _sys_env
void getenv
{
    int name name =:
    int len len name ? strlen () = ;

# stdlib.c 690
    {
        int env env _sys_env ? = ;

        do
        {
            env ? ? 0 != ! if { break }
# stdlib.c 691
            env ? ? name ? len ? strncmp () 0 == && { env ? ? len ? + ?1 char 61 == } if
            {
# stdlib.c 692
                env ? ? len ? + 1 + return
            }
            env $ ? 4 + = 4 - ;
        }
    }
    0 return
}
void compar ;
void qsort
{
    int compar compar =:
    int size size =:
    int nmemb nmemb =:
    int base base =:
# stdlib.c 698
    {
        int go go 1 = ;

        do
        {
            go ? 1 == ! if { break }
# stdlib.c 699
# stdlib.c 700
            go 0 = ;
# stdlib.c 701
            {
                int i i 0 = ;

                do
                {
                    i ? 1 + nmemb ? <s ! if { break }
# stdlib.c 702
                    int arg1 arg1 base ? i ? size ? * + = ;

                    int arg2 arg2 base ? 1 i ? + size ? * + = ;

                    int sign sign arg1 ? arg2 ? compar ? () = ;

# stdlib.c 706
                    sign ? 0 >s if
                    {
# stdlib.c 707
# stdlib.c 708
                        go 1 = ;
# stdlib.c 709
                        {
                            int j j 0 = ;

                            do
                            {
                                j ? size ? <s ! if { break }
# stdlib.c 710
                                j ? 3 + size ? <s if
                                {
# stdlib.c 711
                                    int h h arg1 ? j ? + ? = ;

# stdlib.c 714
                                    arg1 ? j ? + arg2 ? j ? + ? = ;
# stdlib.c 715
                                    arg2 ? j ? + h ? = ;
# stdlib.c 716
                                    j $ ? 3 + = ;
                                }
                                else
                                {
# stdlib.c 719
                                    int h h arg1 ? j ? + ?1 char =1 ;

# stdlib.c 722
                                    arg1 ? j ? + arg2 ? j ? + ?1 char =1 ;
# stdlib.c 723
                                    arg2 ? j ? + h ?1 char =1 ;
                                }
                                j $ ? 1 + = 1 - ;
                            }
                        }
                    }
                    i $ ? 1 + = 1 - ;
                }
            }
        }
    }
    0 return
}
void time
{
    int tloc tloc =:
# stdlib.c 733
    stderr ? "TODO time\n" 0 fprintf () ;
# stdlib.c 733
    1 exit () ;
    0 return
}
void setjmp
{
    int env env =:
# stdlib.c 739
    stderr ? "TODO setjmp\n" 0 fprintf () ;
# stdlib.c 739
    1 exit () ;
# stdlib.c 740
    0 return
    0 return
}
void longjmp
{
    int val val =:
    int env env =:
# stdlib.c 746
    stderr ? "TODO longjmp\n" 0 fprintf () ;
# stdlib.c 746
    0 exit () ;
# stdlib.c 747
    4294967295 exit () ;
    0 return
}
void unlink
{
    int pathname pathname =:
# stdlib.c 752
    10 pathname ? 0 0 sys_int80 () return
    0 return
}
void sscanf
{
    int __var_args __var_args =:
    int format format =:
    int str str =:
    int ap
# stdlib.c 758
    ap __var_args ? = ;
    int args_parsed args_parsed 0 = ;

# stdlib.c 762
    do
    {
        format ? ?1 char 0 != ! if { break }
# stdlib.c 763
        str ? ?1 char 0 == if
        {
# stdlib.c 764
            break
        }
        else
        {
# stdlib.c 765
            format ? ?1 char 37 == if
            {
# stdlib.c 766
# stdlib.c 767
                format $ ? 1 + = 1 - ;
# stdlib.c 768
                format ? ?1 char 100 == if
                {
# stdlib.c 769
# stdlib.c 770
                    format $ ? 1 + = 1 - ;
                    int v v 0 = ;

# stdlib.c 772
                    do
                    {
                        48 str ? ?1 char <=s && { str ? ?1 char 57 <=s } ! if { break }
# stdlib.c 773
# stdlib.c 774
                        v 10 v ? * str ? ?1 char + 48 - = ;
# stdlib.c 775
                        str $ ? 1 + = 1 - ;
                    }
# stdlib.c 777
                    ap ? ? v ? = ;
# stdlib.c 778
                    ap $ ? 4 + = 4 - ;
# stdlib.c 779
                    args_parsed $ ? 1 + = 1 - ;
                }
                else
                {
# stdlib.c 782
# stdlib.c 783
                    stderr ? "sscanf: format %%%c not supported\n" { int 1 __var_args __var_args format ? ?1 char = ; __var_args fprintf () } ;
# stdlib.c 784
                    1 exit () ;
                }
            }
            else
            {
# stdlib.c 788
# stdlib.c 789
                format ? ?1 char str ? ?1 char != if
                {
# stdlib.c 790
                    break
                }
# stdlib.c 791
                format $ ? 1 + = 1 - ;
# stdlib.c 792
                str $ ? 1 + = 1 - ;
            }
        }
    }
# stdlib.c 794
    args_parsed ? return
    0 return
}
void atoi
{
    int nptr nptr =:
# stdlib.c 800
    stderr ? "TODO atoi\n" 0 fprintf () ;
# stdlib.c 800
    1 exit () ;
    0 return
}
void remove
{
    int pathname pathname =:
# stdlib.c 805
    10 pathname ? 0 0 sys_int80 () return
    0 return
}
void execvp
{
    int argv argv =:
    int file file =:
# stdlib.c 811
    stderr ? "TODO execvp\n" 0 fprintf () ;
# stdlib.c 811
    1 exit () ;
    0 return
}
void mkdir
{
    int mode mode =:
    int pathname pathname =:
# stdlib.c 816
    39 pathname ? mode ? 0 sys_int80 () return
    0 return
}
void chdir
{
    int path path =:
# stdlib.c 821
    12 path ? 0 0 sys_int80 () ;
    0 return
}
void access
{
    int mode mode =:
    int filename filename =:
# stdlib.c 826
    33 filename ? mode ? 0 sys_int80 () return
    0 return
}
void chmod
{
    int mode mode =:
    int filename filename =:
# stdlib.c 831
    15 filename ? mode ? 0 sys_int80 () return
    0 return
}
void symlink
{
    int linkpath linkpath =:
    int target target =:
# stdlib.c 836
    83 target ? linkpath ? 0 sys_int80 () return
    0 return
}
const s5_m_sysname 0
const s5_m_nodename 4
const s5_m_release 8
const s5_m_version 12
const s5_m_machine 16
void uname
{
    int buf buf =:
# stdlib.c 854
    109 buf ? 0 0 sys_int80 () return
    0 return
}
void execve
{
    int env env =:
    int argv argv =:
    int program program =:
# stdlib.c 859
    11 program ? argv ? env ? sys_int80 () return
    0 return
}
void fgets
{
    int f f =:
    int len len =:
    int str str =:
# stdlib.c 864
    f ? feof () if
    {
# stdlib.c 865
        0 return
    }
# stdlib.c 867
    {
        int i i 0 = ;

        do
        {
            i ? len ? 1 - <s ! if { break }
# stdlib.c 868
            int ch ch f ? fgetc () = ;

# stdlib.c 870
            ch ? 0 <s if
            {
# stdlib.c 871
# stdlib.c 872
                str ? i ? + 0 =1 ;
# stdlib.c 873
                break
            }
# stdlib.c 875
            str ? i ? + ch ? =1 ;
# stdlib.c 876
            ch ? 10 == if
            {
# stdlib.c 877
# stdlib.c 878
                str ? i ? 1 + + 0 =1 ;
# stdlib.c 879
                break
            }
            i $ ? 1 + = 1 - ;
        }
    }
# stdlib.c 882
    str ? return
    0 return
}
void eqstr
{
    int t t =:
    int s s =:
# tcc_cc.c 18
    s ? t ? strcmp () 0 == return
    0 return
}
void copystr
{
    int str str =:
    int len len str ? strlen () = ;

    int new_str new_str len ? 1 + malloc () = ;

# tcc_cc.c 27
    new_str ? str ? strcpy () ;
# tcc_cc.c 29
    new_str ? return
    0 return
}
void copystrlen
{
    int len len =:
    int str str =:
    int new_str new_str len ? 1 + malloc () = ;

# tcc_cc.c 35
    new_str ? str ? len ? 1 + memcpy () ;
# tcc_cc.c 37
    new_str ? return
    0 return
}
int opt_trace_parser
void char_next_p ;
const s6_m_ch 0
const s6_m_line 4
const s6_m_column 8
const s6_m_filename 12
const s6_m_next 16
const s7_m_base 0
const s7_m__f 20
void file_iterator_next
{
    int char_it char_it =:
    int it it char_it ? = ;

# tcc_cc.c 83
    it ->s7_m_base s6_m_ch + ?1 char 0 == if
    {
# tcc_cc.c 84
# tcc_cc.c 85
        0 return
    }
# tcc_cc.c 87
    it ->s7_m_base s6_m_ch + ?1 char 10 == if
    {
# tcc_cc.c 88
# tcc_cc.c 89
        it ->s7_m_base s6_m_line + it ->s7_m_base s6_m_line + ? 1 + = ;
# tcc_cc.c 90
        it ->s7_m_base s6_m_column + 0 = ;
    }
# tcc_cc.c 92
    it ->s7_m_base s6_m_column + it ->s7_m_base s6_m_column + ? 1 + = ;
# tcc_cc.c 93
    it ->s7_m__f ? 0 == if
    {
# tcc_cc.c 94
# tcc_cc.c 95
        it ->s7_m_base s6_m_ch + 0 =1 ;
# tcc_cc.c 96
        0 return
    }
# tcc_cc.c 98
    it ->s7_m_base s6_m_ch + it ->s7_m__f ? fgetc () =1 ;
# tcc_cc.c 99
    it ->s7_m__f ? feof () if
    {
# tcc_cc.c 100
# tcc_cc.c 101
        it ->s7_m_base s6_m_ch + 0 =1 ;
# tcc_cc.c 102
        it ->s7_m__f ? fclose () ;
# tcc_cc.c 103
        it ->s7_m__f 0 = ;
    }
    else
    {
# tcc_cc.c 105
        it ->s7_m_base s6_m_ch + ?1 char 13 == if
        {
# tcc_cc.c 106
# tcc_cc.c 107
            char_it ? file_iterator_next () ;
        }
    }
    0 return
}
void new_file_iterator
{
    int fn fn =:
    int it it 24 malloc () = ;

# tcc_cc.c 114
    it ->s7_m__f fn ? "r" fopen () = ;
# tcc_cc.c 115
    it ->s7_m_base s6_m_ch + 10 =1 ;
# tcc_cc.c 116
    it ->s7_m__f ? 0 == if
    {
# tcc_cc.c 117
# tcc_cc.c 118
        it ->s7_m_base s6_m_ch + 0 =1 ;
    }
# tcc_cc.c 120
    it ->s7_m_base s6_m_filename + fn ? copystr () = ;
# tcc_cc.c 121
    it ->s7_m_base s6_m_line + 0 = ;
# tcc_cc.c 122
    it ->s7_m_base s6_m_column + 0 = ;
# tcc_cc.c 123
    it ->s7_m_base s6_m_next + file_iterator_next = ;
# tcc_cc.c 124
    it ->s7_m_base file_iterator_next () ;
# tcc_cc.c 125
    it ? return
    0 return
}
const s8_m_base 0
const s8_m__source_it 20
const s8_m__a 24
void line_splice_iterator_next
{
    int char_it char_it =:
    int it it char_it ? = ;

    int _source_it_next
# tcc_cc.c 149
    _source_it_next it ->s8_m__source_it ->s6_m_next ? = ;
# tcc_cc.c 151
    it ->s8_m__a ?1 char 0 == if
    {
# tcc_cc.c 152
# tcc_cc.c 153
        it ->s8_m_base s6_m_ch + 0 =1 ;
# tcc_cc.c 154
        0 return
    }
# tcc_cc.c 156
    it ->s8_m_base s6_m_ch + it ->s8_m__a ?1 char =1 ;
# tcc_cc.c 157
    it ->s8_m_base s6_m_filename + it ->s8_m__source_it ->s6_m_filename ? = ;
# tcc_cc.c 158
    it ->s8_m_base s6_m_line + it ->s8_m__source_it ->s6_m_line ? = ;
# tcc_cc.c 159
    it ->s8_m_base s6_m_column + it ->s8_m__source_it ->s6_m_column ? = ;
# tcc_cc.c 160
    it ->s8_m__source_it ? _source_it_next ? () ;
# tcc_cc.c 161
    it ->s8_m__a it ->s8_m__source_it ->s6_m_ch ?1 char =1 ;
# tcc_cc.c 162
    do
    {
        it ->s8_m_base s6_m_ch + ?1 char 92 == && { it ->s8_m__a ?1 char 10 == } ! if { break }
# tcc_cc.c 163
# tcc_cc.c 164
        it ->s8_m__source_it ? _source_it_next ? () ;
# tcc_cc.c 165
        it ->s8_m_base s6_m_ch + it ->s8_m__source_it ->s6_m_ch ?1 char =1 ;
# tcc_cc.c 166
        it ->s8_m_base s6_m_filename + it ->s8_m__source_it ->s6_m_filename ? = ;
# tcc_cc.c 167
        it ->s8_m_base s6_m_line + it ->s8_m__source_it ->s6_m_line ? = ;
# tcc_cc.c 168
        it ->s8_m_base s6_m_column + it ->s8_m__source_it ->s6_m_column ? = ;
# tcc_cc.c 169
        it ->s8_m__source_it ? _source_it_next ? () ;
# tcc_cc.c 170
        it ->s8_m__a it ->s8_m__source_it ->s6_m_ch ?1 char =1 ;
    }
    0 return
}
void new_line_splice_iterator
{
    int source_it source_it =:
    int it it 28 malloc () = ;

# tcc_cc.c 177
    it ->s8_m__source_it source_it ? = ;
# tcc_cc.c 178
    it ->s8_m_base s6_m_filename + source_it ->s6_m_filename ? = ;
# tcc_cc.c 179
    it ->s8_m_base s6_m_next + line_splice_iterator_next = ;
# tcc_cc.c 180
    it ->s8_m__a source_it ->s6_m_ch ?1 char =1 ;
# tcc_cc.c 181
    it ->s8_m_base line_splice_iterator_next () ;
# tcc_cc.c 182
    it ? return
    0 return
}
const s9_m_base 0
const s9_m__source_it 20
const s9_m__a 24
const s9_m__state 28
void comment_strip_iterator_next
{
    int char_it char_it =:
    int it it char_it ? = ;

    int _source_it_next
# tcc_cc.c 209
    _source_it_next it ->s9_m__source_it ->s6_m_next ? = ;
# tcc_cc.c 211
    it ->s9_m__state ? do
    {
        $ 0 == if
        {
            ;
# tcc_cc.c 213
            goto s0
# tcc_cc.c 214
        }
        $ 1 == if
        {
            ;
# tcc_cc.c 214
            goto s1
# tcc_cc.c 215
        }
        $ 2 == if
        {
            ;
# tcc_cc.c 215
            goto s2
# tcc_cc.c 216
        }
        $ 3 == if
        {
            ;
# tcc_cc.c 216
            goto s3
# tcc_cc.c 217
        }
        $ 4 == if
        {
            ;
# tcc_cc.c 217
            goto s4
# tcc_cc.c 218
        }
        $ 5 == if
        {
            ;
# tcc_cc.c 218
            goto s5
# tcc_cc.c 219
        }
        $ 6 == if
        {
            ;
# tcc_cc.c 219
            goto s6
# tcc_cc.c 220
        }
        $ 7 == if
        {
            ;
# tcc_cc.c 220
            goto s7
# tcc_cc.c 221
        }
        $ 8 == if
        {
            ;
# tcc_cc.c 221
            goto s8
# tcc_cc.c 222
        }
        $ 9 == if
        {
            ;
# tcc_cc.c 222
            goto s9
# tcc_cc.c 223
        }
        0 if
        {
            :_default_case_0
# tcc_cc.c 224
            break
        }
        ; goto _default_case_0
    }
    :s0
# tcc_cc.c 226
    it ->s9_m__a ?1 char 0 == if
    {
# tcc_cc.c 227
# tcc_cc.c 228
        it ->s9_m_base s6_m_ch + 0 =1 ;
# tcc_cc.c 229
        0 return
    }
# tcc_cc.c 231
    it ->s9_m_base s6_m_ch + it ->s9_m__a ?1 char =1 ;
# tcc_cc.c 232
    it ->s9_m_base s6_m_filename + it ->s9_m__source_it ->s6_m_filename ? = ;
# tcc_cc.c 233
    it ->s9_m_base s6_m_line + it ->s9_m__source_it ->s6_m_line ? = ;
# tcc_cc.c 234
    it ->s9_m_base s6_m_column + it ->s9_m__source_it ->s6_m_column ? = ;
# tcc_cc.c 235
    it ->s9_m__source_it ? _source_it_next ? () ;
# tcc_cc.c 236
    it ->s9_m__a it ->s9_m__source_it ->s6_m_ch ?1 char =1 ;
# tcc_cc.c 237
    it ->s9_m_base s6_m_ch + ?1 char 47 == && { it ->s9_m__a ?1 char 47 == || { it ->s9_m__a ?1 char 42 == } } if
    {
# tcc_cc.c 238
# tcc_cc.c 239
        it ->s9_m__a ?1 char 47 == if
        {
# tcc_cc.c 240
# tcc_cc.c 241
            do
            {
                it ->s9_m__a ?1 char 0 != && { it ->s9_m__a ?1 char 10 != } ! if { break }
# tcc_cc.c 242
# tcc_cc.c 243
                it ->s9_m__source_it ? _source_it_next ? () ;
# tcc_cc.c 244
                it ->s9_m__a it ->s9_m__source_it ->s6_m_ch ?1 char =1 ;
            }
        }
        else
        {
# tcc_cc.c 248
# tcc_cc.c 249
            it ->s9_m_base s6_m_ch + 32 =1 ;
# tcc_cc.c 250
            it ->s9_m__state 1 = ;
# tcc_cc.c 250
            0 return
            :s1
# tcc_cc.c 251
            it ->s9_m__source_it ? _source_it_next ? () ;
# tcc_cc.c 252
            it ->s9_m_base s6_m_ch + it ->s9_m__source_it ->s6_m_ch ?1 char =1 ;
# tcc_cc.c 253
            it ->s9_m__source_it ? _source_it_next ? () ;
# tcc_cc.c 254
            it ->s9_m__a it ->s9_m__source_it ->s6_m_ch ?1 char =1 ;
# tcc_cc.c 255
            do
            {
                it ->s9_m_base s6_m_ch + ?1 char 0 != && { it ->s9_m_base s6_m_ch + ?1 char 42 != || { it ->s9_m__a ?1 char 47 != } } ! if { break }
# tcc_cc.c 256
# tcc_cc.c 257
                it ->s9_m_base s6_m_ch + it ->s9_m__a ?1 char =1 ;
# tcc_cc.c 258
                it ->s9_m__source_it ? _source_it_next ? () ;
# tcc_cc.c 259
                it ->s9_m__a it ->s9_m__source_it ->s6_m_ch ?1 char =1 ;
            }
# tcc_cc.c 261
            it ->s9_m_base s6_m_ch + ?1 char 0 != if
            {
# tcc_cc.c 262
# tcc_cc.c 263
                it ->s9_m__source_it ? _source_it_next ? () ;
# tcc_cc.c 264
                it ->s9_m__a it ->s9_m__source_it ->s6_m_ch ?1 char =1 ;
# tcc_cc.c 265
                it ->s9_m_base s6_m_line + it ->s9_m__source_it ->s6_m_line ? = ;
# tcc_cc.c 266
                it ->s9_m_base s6_m_column + it ->s9_m__source_it ->s6_m_column ? = ;
            }
        }
# tcc_cc.c 269
        it ->s9_m__state 0 = ;
# tcc_cc.c 270
        goto s0
    }
# tcc_cc.c 272
    it ->s9_m_base s6_m_ch + ?1 char 34 == if
    {
# tcc_cc.c 273
# tcc_cc.c 274
        it ->s9_m__state 2 = ;
# tcc_cc.c 274
        0 return
        :s2
# tcc_cc.c 275
        it ->s9_m_base s6_m_ch + it ->s9_m__a ?1 char =1 ;
# tcc_cc.c 276
        it ->s9_m_base s6_m_line + it ->s9_m__source_it ->s6_m_line ? = ;
# tcc_cc.c 277
        it ->s9_m_base s6_m_column + it ->s9_m__source_it ->s6_m_column ? = ;
# tcc_cc.c 279
        do
        {
            it ->s9_m_base s6_m_ch + ?1 char 0 != && { it ->s9_m_base s6_m_ch + ?1 char 34 != } ! if { break }
# tcc_cc.c 280
# tcc_cc.c 281
            it ->s9_m_base s6_m_ch + ?1 char 92 == if
            {
# tcc_cc.c 282
# tcc_cc.c 283
                it ->s9_m__state 3 = ;
# tcc_cc.c 283
                0 return
                :s3
# tcc_cc.c 284
                it ->s9_m__source_it ? _source_it_next ? () ;
# tcc_cc.c 285
                it ->s9_m_base s6_m_ch + it ->s9_m__source_it ->s6_m_ch ?1 char =1 ;
# tcc_cc.c 286
                it ->s9_m_base s6_m_line + it ->s9_m__source_it ->s6_m_line ? = ;
# tcc_cc.c 287
                it ->s9_m_base s6_m_column + it ->s9_m__source_it ->s6_m_column ? = ;
            }
# tcc_cc.c 290
            it ->s9_m__state 4 = ;
# tcc_cc.c 290
            0 return
            :s4
# tcc_cc.c 291
            it ->s9_m__source_it ? _source_it_next ? () ;
# tcc_cc.c 292
            it ->s9_m_base s6_m_ch + it ->s9_m__source_it ->s6_m_ch ?1 char =1 ;
# tcc_cc.c 293
            it ->s9_m_base s6_m_line + it ->s9_m__source_it ->s6_m_line ? = ;
# tcc_cc.c 294
            it ->s9_m_base s6_m_column + it ->s9_m__source_it ->s6_m_column ? = ;
        }
# tcc_cc.c 296
        it ->s9_m_base s6_m_ch + ?1 char 34 == if
        {
# tcc_cc.c 297
# tcc_cc.c 298
            it ->s9_m__state 5 = ;
# tcc_cc.c 298
            0 return
            :s5
# tcc_cc.c 299
            it ->s9_m__source_it ? _source_it_next ? () ;
# tcc_cc.c 300
            it ->s9_m__a it ->s9_m__source_it ->s6_m_ch ?1 char =1 ;
# tcc_cc.c 301
            it ->s9_m_base s6_m_line + it ->s9_m__source_it ->s6_m_line ? = ;
# tcc_cc.c 302
            it ->s9_m_base s6_m_column + it ->s9_m__source_it ->s6_m_column ? = ;
        }
# tcc_cc.c 304
        it ->s9_m__state 0 = ;
# tcc_cc.c 305
        goto s0
    }
# tcc_cc.c 307
    it ->s9_m_base s6_m_ch + ?1 char 39 == if
    {
# tcc_cc.c 308
# tcc_cc.c 309
        it ->s9_m__state 6 = ;
# tcc_cc.c 309
        0 return
        :s6
# tcc_cc.c 310
        it ->s9_m_base s6_m_ch + it ->s9_m__a ?1 char =1 ;
# tcc_cc.c 311
        it ->s9_m_base s6_m_line + it ->s9_m__source_it ->s6_m_line ? = ;
# tcc_cc.c 312
        it ->s9_m_base s6_m_column + it ->s9_m__source_it ->s6_m_column ? = ;
# tcc_cc.c 313
        it ->s9_m_base s6_m_ch + ?1 char 92 == if
        {
# tcc_cc.c 314
# tcc_cc.c 315
            it ->s9_m__state 7 = ;
# tcc_cc.c 315
            0 return
            :s7
# tcc_cc.c 316
            it ->s9_m__source_it ? _source_it_next ? () ;
# tcc_cc.c 317
            it ->s9_m_base s6_m_ch + it ->s9_m__source_it ->s6_m_ch ?1 char =1 ;
# tcc_cc.c 318
            it ->s9_m_base s6_m_line + it ->s9_m__source_it ->s6_m_line ? = ;
# tcc_cc.c 319
            it ->s9_m_base s6_m_column + it ->s9_m__source_it ->s6_m_column ? = ;
        }
# tcc_cc.c 321
        it ->s9_m__state 8 = ;
# tcc_cc.c 321
        0 return
        :s8
# tcc_cc.c 322
        it ->s9_m__source_it ? _source_it_next ? () ;
# tcc_cc.c 323
        it ->s9_m_base s6_m_ch + it ->s9_m__source_it ->s6_m_ch ?1 char =1 ;
# tcc_cc.c 324
        it ->s9_m_base s6_m_line + it ->s9_m__source_it ->s6_m_line ? = ;
# tcc_cc.c 325
        it ->s9_m_base s6_m_column + it ->s9_m__source_it ->s6_m_column ? = ;
# tcc_cc.c 326
        it ->s9_m__state 0 = ;
# tcc_cc.c 327
        it ->s9_m_base s6_m_ch + ?1 char 39 == if
        {
# tcc_cc.c 328
# tcc_cc.c 329
            it ->s9_m__state 9 = ;
# tcc_cc.c 329
            0 return
            :s9
# tcc_cc.c 330
            it ->s9_m__source_it ? _source_it_next ? () ;
# tcc_cc.c 331
            it ->s9_m__a it ->s9_m__source_it ->s6_m_ch ?1 char =1 ;
# tcc_cc.c 332
            it ->s9_m_base s6_m_line + it ->s9_m__source_it ->s6_m_line ? = ;
# tcc_cc.c 333
            it ->s9_m_base s6_m_column + it ->s9_m__source_it ->s6_m_column ? = ;
        }
# tcc_cc.c 335
        it ->s9_m__state 0 = ;
# tcc_cc.c 336
        goto s0
    }
    0 return
}
void new_comment_strip_iterator
{
    int source_it source_it =:
    int it it 32 malloc () = ;

# tcc_cc.c 343
    it ->s9_m__source_it source_it ? = ;
# tcc_cc.c 344
    it ->s9_m_base s6_m_filename + source_it ->s6_m_filename ? = ;
# tcc_cc.c 345
    it ->s9_m_base s6_m_next + comment_strip_iterator_next = ;
# tcc_cc.c 346
    it ->s9_m__a source_it ->s6_m_ch ?1 char =1 ;
# tcc_cc.c 347
    it ->s9_m__state 0 = ;
# tcc_cc.c 348
    it ->s9_m_base comment_strip_iterator_next () ;
# tcc_cc.c 349
    it ? return
    0 return
}
const s10_m_base 0
const s10_m__source_it 20
const s10_m__parent_source_its 24
const s10_m__nr_parents 64
void include_iterator_next
{
    int char_it char_it =:
    int it it char_it ? = ;

    int _source_it_next
# tcc_cc.c 371
    _source_it_next it ->s10_m__source_it ->s6_m_next ? = ;
# tcc_cc.c 372
    it ->s10_m__source_it ? _source_it_next ? () ;
# tcc_cc.c 373
    it ->s10_m_base s6_m_ch + it ->s10_m__source_it ->s6_m_ch ?1 char =1 ;
# tcc_cc.c 374
    it ->s10_m_base s6_m_ch + ?1 char 0 == if
    {
# tcc_cc.c 375
# tcc_cc.c 376
        it ->s10_m__nr_parents ? 0 == if
        {
# tcc_cc.c 377
# tcc_cc.c 378
            it ->s10_m_base s6_m_ch + 0 =1 ;
# tcc_cc.c 379
            0 return
        }
# tcc_cc.c 381
        it ->s10_m_base s6_m_ch + 10 =1 ;
# tcc_cc.c 382
        it ->s10_m__nr_parents it ->s10_m__nr_parents ? 1 - = ;
# tcc_cc.c 383
        it ->s10_m__source_it it ->s10_m__parent_source_its it ->s10_m__nr_parents ? 4 * + ? = ;
# tcc_cc.c 384
        it ->s10_m_base s6_m_filename + it ->s10_m__source_it ->s6_m_filename ? = ;
    }
# tcc_cc.c 386
    it ->s10_m_base s6_m_filename + it ->s10_m__source_it ->s6_m_filename ? = ;
# tcc_cc.c 387
    it ->s10_m_base s6_m_line + it ->s10_m__source_it ->s6_m_line ? = ;
# tcc_cc.c 388
    it ->s10_m_base s6_m_column + it ->s10_m__source_it ->s6_m_column ? = ;
    0 return
}
void include_iterator_add
{
    int include_it include_it =:
    int it it =:
# tcc_cc.c 393
    it ->s10_m__parent_source_its it ->s10_m__nr_parents ? 4 * + it ->s10_m__source_it ? = ;
# tcc_cc.c 394
    it ->s10_m__nr_parents it ->s10_m__nr_parents ? 1 + = ;
# tcc_cc.c 395
    it ->s10_m__source_it include_it ? = ;
# tcc_cc.c 396
    it ->s10_m_base s6_m_filename + it ->s10_m__source_it ->s6_m_filename ? = ;
# tcc_cc.c 397
    it ->s10_m_base s6_m_line + it ->s10_m__source_it ->s6_m_line ? = ;
# tcc_cc.c 398
    it ->s10_m_base s6_m_column + it ->s10_m__source_it ->s6_m_column ? = ;
# tcc_cc.c 399
    it ->s10_m_base s6_m_ch + it ->s10_m__source_it ->s6_m_ch ?1 char =1 ;
    0 return
}
void new_include_iterator
{
    int include_it include_it =:
    int it it 68 malloc () = ;

# tcc_cc.c 405
    it ->s10_m_base s6_m_filename + include_it ->s6_m_filename ? = ;
# tcc_cc.c 406
    it ->s10_m_base s6_m_line + include_it ->s6_m_line ? = ;
# tcc_cc.c 407
    it ->s10_m_base s6_m_column + include_it ->s6_m_column ? = ;
# tcc_cc.c 408
    it ->s10_m_base s6_m_ch + include_it ->s6_m_ch ?1 char =1 ;
# tcc_cc.c 409
    it ->s10_m_base s6_m_next + include_iterator_next = ;
# tcc_cc.c 410
    it ->s10_m__source_it include_it ? = ;
# tcc_cc.c 411
    it ->s10_m__nr_parents 0 = ;
# tcc_cc.c 412
    it ? return
    0 return
}
void token_next_p ;
const s11_m_kind 0
const s11_m_token 4
const s11_m_length 8
const s11_m_filename 12
const s11_m_line 16
const s11_m_column 20
const s11_m_next 24
const s12_m_base 0
const s12_m__char_iterator 28
void tokenizer_skip_white_space
{
    int skip_nl skip_nl =:
    int tokenizer tokenizer =:
    int it
# tcc_cc.c 524
    it tokenizer ->s12_m__char_iterator ? = ;
    int it_next it_next it ->s6_m_next ? = ;

    int ch ch it ->s6_m_ch ?1 char =1 ;

# tcc_cc.c 528
    do
    {
        ch ?1 char 0 != && { ch ?1 char 32 <=s } && { skip_nl ?1 char || { ch ?1 char 10 != } } ! if { break }
# tcc_cc.c 529
# tcc_cc.c 530
        it ? it_next ? () ;
# tcc_cc.c 530
        ch it ->s6_m_ch ?1 char =1 ;
    }
    0 return
}
void tokenizer_parse_char_literal
{
    int tokenizer tokenizer =:
    int it it tokenizer ->s12_m__char_iterator ? = ;

    int it_next
# tcc_cc.c 537
    it_next it ->s6_m_next ? = ;
    int ch ch it ->s6_m_ch ?1 char =1 ;

# tcc_cc.c 539
    it ? it_next ? () ;
# tcc_cc.c 540
    ch ?1 char 92 != if
    {
# tcc_cc.c 541
# tcc_cc.c 542
        ch ?1 char return
    }
# tcc_cc.c 544
    ch it ->s6_m_ch ?1 char =1 ;
# tcc_cc.c 545
    it ? it_next ? () ;
# tcc_cc.c 546
    ch ?1 char 48 == || { ch ?1 char 49 == } if
    {
# tcc_cc.c 547
        int val val ch ?1 char 48 - = ;

# tcc_cc.c 549
        ch it ->s6_m_ch ?1 char =1 ;
# tcc_cc.c 550
        48 ch ?1 char <=s && { ch ?1 char 55 <=s } if
        {
# tcc_cc.c 551
# tcc_cc.c 552
            val 8 val ? * ch ?1 char + 48 - = ;
# tcc_cc.c 553
            it ? it_next ? () ;
# tcc_cc.c 554
            ch it ->s6_m_ch ?1 char =1 ;
# tcc_cc.c 555
            48 ch ?1 char <=s && { ch ?1 char 55 <=s } if
            {
# tcc_cc.c 556
# tcc_cc.c 557
                val 8 val ? * ch ?1 char + 48 - = ;
# tcc_cc.c 558
                it ? it_next ? () ;
            }
# tcc_cc.c 560
            val ? return
        }
        else
        {
# tcc_cc.c 562
            val ? 0 == if
            {
# tcc_cc.c 563
# tcc_cc.c 564
                0 return
            }
            else
            {
# tcc_cc.c 567
# tcc_cc.c 568
                49 return
            }
        }
    }
# tcc_cc.c 571
    ch ?1 char 97 == if
    {
# tcc_cc.c 572
# tcc_cc.c 573
        ch 7 =1 ;
    }
    else
    {
# tcc_cc.c 575
        ch ?1 char 98 == if
        {
# tcc_cc.c 576
# tcc_cc.c 577
            ch 8 =1 ;
        }
        else
        {
# tcc_cc.c 579
            ch ?1 char 102 == if
            {
# tcc_cc.c 580
# tcc_cc.c 581
                ch 12 =1 ;
            }
            else
            {
# tcc_cc.c 583
                ch ?1 char 110 == if
                {
# tcc_cc.c 584
# tcc_cc.c 585
                    ch 10 =1 ;
                }
                else
                {
# tcc_cc.c 587
                    ch ?1 char 114 == if
                    {
# tcc_cc.c 588
# tcc_cc.c 589
                        ch 13 =1 ;
                    }
                    else
                    {
# tcc_cc.c 591
                        ch ?1 char 116 == if
                        {
# tcc_cc.c 592
# tcc_cc.c 593
                            ch 9 =1 ;
                        }
                        else
                        {
# tcc_cc.c 595
                            ch ?1 char 118 == if
                            {
# tcc_cc.c 596
# tcc_cc.c 597
                                ch 11 =1 ;
                            }
                            else
                            {
# tcc_cc.c 599
                                ch ?1 char 120 == if
                                {
# tcc_cc.c 600
                                    int v v 0 = ;

# tcc_cc.c 602
                                    ch it ->s6_m_ch ?1 char =1 ;
# tcc_cc.c 603
                                    48 ch ?1 char <=s && { ch ?1 char 57 <=s } if
                                    {
# tcc_cc.c 604
                                        v 16 ch ?1 char 48 - * = ;
                                    }
                                    else
                                    {
# tcc_cc.c 605
                                        65 ch ?1 char <=s && { ch ?1 char 70 <=s } if
                                        {
# tcc_cc.c 606
                                            v 16 ch ?1 char 65 - 10 + * = ;
                                        }
                                        else
                                        {
# tcc_cc.c 607
                                            97 ch ?1 char <=s && { ch ?1 char 102 <=s } if
                                            {
# tcc_cc.c 608
                                                v 16 ch ?1 char 97 - 10 + * = ;
                                            }
                                            else
                                            {
# tcc_cc.c 610
                                                "%s:%d.%d Warning: Invalid character '%c' after \\x\n" { int 4 __var_args __var_args it ->s6_m_filename ? = ; __var_args 4 + it ->s6_m_line ? = ; __var_args 8 + it ->s6_m_column ? = ; __var_args 12 + ch ?1 char = ; __var_args printf () } ;
                                            }
                                        }
                                    }
# tcc_cc.c 611
                                    it ? it_next ? () ;
# tcc_cc.c 612
                                    ch it ->s6_m_ch ?1 char =1 ;
# tcc_cc.c 613
                                    48 ch ?1 char <=s && { ch ?1 char 57 <=s } if
                                    {
# tcc_cc.c 614
                                        v $ ? ch ?1 char 48 - + = ;
                                    }
                                    else
                                    {
# tcc_cc.c 615
                                        65 ch ?1 char <=s && { ch ?1 char 70 <=s } if
                                        {
# tcc_cc.c 616
                                            v $ ? ch ?1 char 65 - 10 + + = ;
                                        }
                                        else
                                        {
# tcc_cc.c 617
                                            97 ch ?1 char <=s && { ch ?1 char 102 <=s } if
                                            {
# tcc_cc.c 618
                                                v $ ? ch ?1 char 97 - 10 + + = ;
                                            }
                                            else
                                            {
# tcc_cc.c 620
                                                "%s:%d.%d Warning: Invalid character '%c' after \\x\n" { int 4 __var_args __var_args it ->s6_m_filename ? = ; __var_args 4 + it ->s6_m_line ? = ; __var_args 8 + it ->s6_m_column ? = ; __var_args 12 + ch ?1 char = ; __var_args printf () } ;
                                            }
                                        }
                                    }
# tcc_cc.c 621
                                    ch v ? =1 ;
# tcc_cc.c 622
                                    it ? it_next ? () ;
                                }
                                else
                                {
# tcc_cc.c 624
                                    ch ?1 char 39 == || { ch ?1 char 34 == } || { ch ?1 char 92 == } if
                                    {
# tcc_cc.c 625
                                    }
                                    else
                                    {
# tcc_cc.c 627
                                        "%s:%d.%d Warning: Unknown escape sequence \\%c\n" { int 4 __var_args __var_args it ->s6_m_filename ? = ; __var_args 4 + it ->s6_m_line ? = ; __var_args 8 + it ->s6_m_column ? = ; __var_args 12 + ch ?1 char = ; __var_args printf () } ;
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
# tcc_cc.c 628
    ch ?1 char return
    0 return
}
void tokenizer_next
{
    int skip_nl skip_nl =:
    int token_it token_it =:
    int tokenizer tokenizer token_it ? = ;

# tcc_cc.c 636
    tokenizer ? skip_nl ?1 char tokenizer_skip_white_space () ;
    int it it tokenizer ->s12_m__char_iterator ? = ;

    int it_next
# tcc_cc.c 638
    it_next it ->s6_m_next ? = ;
    int i i 0 = ;

    int ch ch it ->s6_m_ch ?1 char =1 ;

# tcc_cc.c 641
    tokenizer ->s12_m_base s11_m_kind + 0 = ;
# tcc_cc.c 642
    ch ?1 char 0 == if
    {
# tcc_cc.c 643
# tcc_cc.c 644
        goto done
    }
    int at_start_of_line at_start_of_line token_it ->s11_m_filename ? tokenizer ->s12_m__char_iterator ->s6_m_filename ? != || { token_it ->s11_m_line ? tokenizer ->s12_m__char_iterator ->s6_m_line ? != } =1 ;

# tcc_cc.c 648
    token_it ->s11_m_filename it ->s6_m_filename ? = ;
# tcc_cc.c 649
    token_it ->s11_m_line it ->s6_m_line ? = ;
# tcc_cc.c 650
    token_it ->s11_m_column it ->s6_m_column ? = ;
# tcc_cc.c 651
    ch ?1 char 10 == if
    {
# tcc_cc.c 652
# tcc_cc.c 653
        token_it ->s11_m_kind 10 = ;
    }
    else
    {
# tcc_cc.c 655
        ch ?1 char 35 == && { at_start_of_line ?1 char } if
        {
# tcc_cc.c 656
# tcc_cc.c 657
            token_it ->s11_m_token ? i ? + 35 =1 ;
# tcc_cc.c 657
            i i ? 1 + = ;
# tcc_cc.c 657
            it ? it_next ? () ;
# tcc_cc.c 658
            tokenizer ? 1 tokenizer_skip_white_space () ;
# tcc_cc.c 659
            ch it ->s6_m_ch ?1 char =1 ;
# tcc_cc.c 660
            do
            {
                97 ch ?1 char <=s && { ch ?1 char 122 <=s } ! if { break }
# tcc_cc.c 661
# tcc_cc.c 662
                token_it ->s11_m_token ? i ? + ch ?1 char =1 ;
# tcc_cc.c 662
                i i ? 1 + = ;
# tcc_cc.c 662
                it ? it_next ? () ;
# tcc_cc.c 662
                ch it ->s6_m_ch ?1 char =1 ;
            }
# tcc_cc.c 664
            token_it ->s11_m_token ? i ? + 0 =1 ;
# tcc_cc.c 665
            "#else" token_it ->s11_m_token ? eqstr () if
            {
# tcc_cc.c 665
                token_it ->s11_m_kind 1029 = ;
            }
            else
            {
# tcc_cc.c 666
                "#elif" token_it ->s11_m_token ? eqstr () if
                {
# tcc_cc.c 666
                    token_it ->s11_m_kind 1030 = ;
                }
                else
                {
# tcc_cc.c 667
                    "#endif" token_it ->s11_m_token ? eqstr () if
                    {
# tcc_cc.c 667
                        token_it ->s11_m_kind 1031 = ;
                    }
                    else
                    {
# tcc_cc.c 668
                        "#define" token_it ->s11_m_token ? eqstr () if
                        {
# tcc_cc.c 668
                            token_it ->s11_m_kind 1032 = ;
                        }
                        else
                        {
# tcc_cc.c 669
                            "#if" token_it ->s11_m_token ? eqstr () if
                            {
# tcc_cc.c 669
                                token_it ->s11_m_kind 1034 = ;
                            }
                            else
                            {
# tcc_cc.c 670
                                "#ifdef" token_it ->s11_m_token ? eqstr () if
                                {
# tcc_cc.c 670
                                    token_it ->s11_m_kind 1035 = ;
                                }
                                else
                                {
# tcc_cc.c 671
                                    "#ifndef" token_it ->s11_m_token ? eqstr () if
                                    {
# tcc_cc.c 671
                                        token_it ->s11_m_kind 1036 = ;
                                    }
                                    else
                                    {
# tcc_cc.c 672
                                        "#include" token_it ->s11_m_token ? eqstr () if
                                        {
# tcc_cc.c 672
                                            token_it ->s11_m_kind 1037 = ;
                                        }
                                        else
                                        {
# tcc_cc.c 673
                                            "#undef" token_it ->s11_m_token ? eqstr () if
                                            {
# tcc_cc.c 673
                                                token_it ->s11_m_kind 1038 = ;
                                            }
                                            else
                                            {
# tcc_cc.c 674
                                                "#error" token_it ->s11_m_token ? eqstr () if
                                                {
# tcc_cc.c 674
                                                    token_it ->s11_m_kind 1039 = ;
                                                }
                                            }
                                        }
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
        else
        {
# tcc_cc.c 676
            97 ch ?1 char <=s && { ch ?1 char 122 <=s } || { 65 ch ?1 char <=s && { ch ?1 char 90 <=s } } || { ch ?1 char 95 == } if
            {
# tcc_cc.c 677
# tcc_cc.c 678
                token_it ->s11_m_kind 105 = ;
# tcc_cc.c 679
                token_it ->s11_m_token ? i ? + ch ?1 char =1 ;
# tcc_cc.c 679
                i i ? 1 + = ;
# tcc_cc.c 679
                it ? it_next ? () ;
# tcc_cc.c 679
                ch it ->s6_m_ch ?1 char =1 ;
# tcc_cc.c 680
                do
                {
                    97 ch ?1 char <=s && { ch ?1 char 122 <=s } || { 65 ch ?1 char <=s && { ch ?1 char 90 <=s } } || { 48 ch ?1 char <=s && { ch ?1 char 57 <=s } } || { ch ?1 char 95 == } ! if { break }
# tcc_cc.c 681
# tcc_cc.c 682
                    token_it ->s11_m_token ? i ? + ch ?1 char =1 ;
# tcc_cc.c 682
                    i i ? 1 + = ;
# tcc_cc.c 682
                    it ? it_next ? () ;
# tcc_cc.c 682
                    ch it ->s6_m_ch ?1 char =1 ;
                }
# tcc_cc.c 684
                token_it ->s11_m_token ? i ? + 0 =1 ;
# tcc_cc.c 685
                "break" token_it ->s11_m_token ? eqstr () if
                {
# tcc_cc.c 685
                    token_it ->s11_m_kind 1000 = ;
                }
                else
                {
# tcc_cc.c 686
                    "case" token_it ->s11_m_token ? eqstr () if
                    {
# tcc_cc.c 686
                        token_it ->s11_m_kind 1001 = ;
                    }
                    else
                    {
# tcc_cc.c 687
                        "char" token_it ->s11_m_token ? eqstr () if
                        {
# tcc_cc.c 687
                            token_it ->s11_m_kind 1002 = ;
                        }
                        else
                        {
# tcc_cc.c 688
                            "continue" token_it ->s11_m_token ? eqstr () if
                            {
# tcc_cc.c 688
                                token_it ->s11_m_kind 1004 = ;
                            }
                            else
                            {
# tcc_cc.c 689
                                "const" token_it ->s11_m_token ? eqstr () if
                                {
# tcc_cc.c 689
                                    token_it ->s11_m_kind 1003 = ;
                                }
                                else
                                {
# tcc_cc.c 690
                                    "default" token_it ->s11_m_token ? eqstr () if
                                    {
# tcc_cc.c 690
                                        token_it ->s11_m_kind 1005 = ;
                                    }
                                    else
                                    {
# tcc_cc.c 691
                                        "defined" token_it ->s11_m_token ? eqstr () if
                                        {
# tcc_cc.c 691
                                            token_it ->s11_m_kind 1033 = ;
                                        }
                                        else
                                        {
# tcc_cc.c 692
                                            "do" token_it ->s11_m_token ? eqstr () if
                                            {
# tcc_cc.c 692
                                                token_it ->s11_m_kind 1006 = ;
                                            }
                                            else
                                            {
# tcc_cc.c 693
                                                "double" token_it ->s11_m_token ? eqstr () if
                                                {
# tcc_cc.c 693
                                                    token_it ->s11_m_kind 1007 = ;
                                                }
                                                else
                                                {
# tcc_cc.c 694
                                                    "else" token_it ->s11_m_token ? eqstr () if
                                                    {
# tcc_cc.c 694
                                                        token_it ->s11_m_kind 1008 = ;
                                                    }
                                                    else
                                                    {
# tcc_cc.c 695
                                                        "enum" token_it ->s11_m_token ? eqstr () if
                                                        {
# tcc_cc.c 695
                                                            token_it ->s11_m_kind 1009 = ;
                                                        }
                                                        else
                                                        {
# tcc_cc.c 696
                                                            "extern" token_it ->s11_m_token ? eqstr () if
                                                            {
# tcc_cc.c 696
                                                                token_it ->s11_m_kind 1010 = ;
                                                            }
                                                            else
                                                            {
# tcc_cc.c 697
                                                                "float" token_it ->s11_m_token ? eqstr () if
                                                                {
# tcc_cc.c 697
                                                                    token_it ->s11_m_kind 1011 = ;
                                                                }
                                                                else
                                                                {
# tcc_cc.c 698
                                                                    "for" token_it ->s11_m_token ? eqstr () if
                                                                    {
# tcc_cc.c 698
                                                                        token_it ->s11_m_kind 1012 = ;
                                                                    }
                                                                    else
                                                                    {
# tcc_cc.c 699
                                                                        "goto" token_it ->s11_m_token ? eqstr () if
                                                                        {
# tcc_cc.c 699
                                                                            token_it ->s11_m_kind 1013 = ;
                                                                        }
                                                                        else
                                                                        {
# tcc_cc.c 700
                                                                            "if" token_it ->s11_m_token ? eqstr () if
                                                                            {
# tcc_cc.c 700
                                                                                token_it ->s11_m_kind 1014 = ;
                                                                            }
                                                                            else
                                                                            {
# tcc_cc.c 701
                                                                                "inline" token_it ->s11_m_token ? eqstr () if
                                                                                {
# tcc_cc.c 701
                                                                                    token_it ->s11_m_kind 1015 = ;
                                                                                }
                                                                                else
                                                                                {
# tcc_cc.c 702
                                                                                    "int" token_it ->s11_m_token ? eqstr () if
                                                                                    {
# tcc_cc.c 702
                                                                                        token_it ->s11_m_kind 1016 = ;
                                                                                    }
                                                                                    else
                                                                                    {
# tcc_cc.c 703
                                                                                        "long" token_it ->s11_m_token ? eqstr () if
                                                                                        {
# tcc_cc.c 703
                                                                                            token_it ->s11_m_kind 1017 = ;
                                                                                        }
                                                                                        else
                                                                                        {
# tcc_cc.c 704
                                                                                            "return" token_it ->s11_m_token ? eqstr () if
                                                                                            {
# tcc_cc.c 704
                                                                                                token_it ->s11_m_kind 1018 = ;
                                                                                            }
                                                                                            else
                                                                                            {
# tcc_cc.c 705
                                                                                                "short" token_it ->s11_m_token ? eqstr () if
                                                                                                {
# tcc_cc.c 705
                                                                                                    token_it ->s11_m_kind 1019 = ;
                                                                                                }
                                                                                                else
                                                                                                {
# tcc_cc.c 706
                                                                                                    "sizeof" token_it ->s11_m_token ? eqstr () if
                                                                                                    {
# tcc_cc.c 706
                                                                                                        token_it ->s11_m_kind 1020 = ;
                                                                                                    }
                                                                                                    else
                                                                                                    {
# tcc_cc.c 707
                                                                                                        "static" token_it ->s11_m_token ? eqstr () if
                                                                                                        {
# tcc_cc.c 707
                                                                                                            token_it ->s11_m_kind 1021 = ;
                                                                                                        }
                                                                                                        else
                                                                                                        {
# tcc_cc.c 708
                                                                                                            "struct" token_it ->s11_m_token ? eqstr () if
                                                                                                            {
# tcc_cc.c 708
                                                                                                                token_it ->s11_m_kind 1022 = ;
                                                                                                            }
                                                                                                            else
                                                                                                            {
# tcc_cc.c 709
                                                                                                                "switch" token_it ->s11_m_token ? eqstr () if
                                                                                                                {
# tcc_cc.c 709
                                                                                                                    token_it ->s11_m_kind 1023 = ;
                                                                                                                }
                                                                                                                else
                                                                                                                {
# tcc_cc.c 710
                                                                                                                    "typedef" token_it ->s11_m_token ? eqstr () if
                                                                                                                    {
# tcc_cc.c 710
                                                                                                                        token_it ->s11_m_kind 1024 = ;
                                                                                                                    }
                                                                                                                    else
                                                                                                                    {
# tcc_cc.c 711
                                                                                                                        "union" token_it ->s11_m_token ? eqstr () if
                                                                                                                        {
# tcc_cc.c 711
                                                                                                                            token_it ->s11_m_kind 1025 = ;
                                                                                                                        }
                                                                                                                        else
                                                                                                                        {
# tcc_cc.c 712
                                                                                                                            "unsigned" token_it ->s11_m_token ? eqstr () if
                                                                                                                            {
# tcc_cc.c 712
                                                                                                                                token_it ->s11_m_kind 1026 = ;
                                                                                                                            }
                                                                                                                            else
                                                                                                                            {
# tcc_cc.c 713
                                                                                                                                "void" token_it ->s11_m_token ? eqstr () if
                                                                                                                                {
# tcc_cc.c 713
                                                                                                                                    token_it ->s11_m_kind 1027 = ;
                                                                                                                                }
                                                                                                                                else
                                                                                                                                {
# tcc_cc.c 714
                                                                                                                                    "while" token_it ->s11_m_token ? eqstr () if
                                                                                                                                    {
# tcc_cc.c 714
                                                                                                                                        token_it ->s11_m_kind 1028 = ;
                                                                                                                                    }
                                                                                                                                }
                                                                                                                            }
                                                                                                                        }
                                                                                                                    }
                                                                                                                }
                                                                                                            }
                                                                                                        }
                                                                                                    }
                                                                                                }
                                                                                            }
                                                                                        }
                                                                                    }
                                                                                }
                                                                            }
                                                                        }
                                                                    }
                                                                }
                                                            }
                                                        }
                                                    }
                                                }
                                            }
                                        }
                                    }
                                }
                            }
                        }
                    }
                }
            }
            else
            {
# tcc_cc.c 716
                48 ch ?1 char <=s && { ch ?1 char 57 <=s } if
                {
# tcc_cc.c 717
# tcc_cc.c 718
                    token_it ->s11_m_kind 48 = ;
# tcc_cc.c 719
                    ch ?1 char 48 == if
                    {
# tcc_cc.c 720
# tcc_cc.c 721
                        token_it ->s11_m_token ? i ? + ch ?1 char =1 ;
# tcc_cc.c 721
                        i i ? 1 + = ;
# tcc_cc.c 721
                        it ? it_next ? () ;
# tcc_cc.c 721
                        ch it ->s6_m_ch ?1 char =1 ;
# tcc_cc.c 722
                        ch ?1 char 120 == if
                        {
# tcc_cc.c 723
# tcc_cc.c 724
                            token_it ->s11_m_token ? i ? + ch ?1 char =1 ;
# tcc_cc.c 724
                            i i ? 1 + = ;
# tcc_cc.c 724
                            it ? it_next ? () ;
# tcc_cc.c 724
                            ch it ->s6_m_ch ?1 char =1 ;
# tcc_cc.c 725
                            do
                            {
                                48 ch ?1 char <=s && { ch ?1 char 57 <=s } || { 97 ch ?1 char <=s && { ch ?1 char 102 <=s } } || { 65 ch ?1 char <=s && { ch ?1 char 70 <=s } } ! if { break }
# tcc_cc.c 726
# tcc_cc.c 727
                                token_it ->s11_m_token ? i ? + ch ?1 char =1 ;
# tcc_cc.c 727
                                i i ? 1 + = ;
# tcc_cc.c 727
                                it ? it_next ? () ;
# tcc_cc.c 727
                                ch it ->s6_m_ch ?1 char =1 ;
                            }
                        }
                        else
                        {
# tcc_cc.c 731
# tcc_cc.c 732
                            do
                            {
                                48 ch ?1 char <=s && { ch ?1 char 55 <=s } ! if { break }
# tcc_cc.c 733
# tcc_cc.c 734
                                token_it ->s11_m_token ? i ? + ch ?1 char =1 ;
# tcc_cc.c 734
                                i i ? 1 + = ;
# tcc_cc.c 734
                                it ? it_next ? () ;
# tcc_cc.c 734
                                ch it ->s6_m_ch ?1 char =1 ;
                            }
                        }
                    }
                    else
                    {
# tcc_cc.c 739
# tcc_cc.c 740
                        do
                        {
                            48 ch ?1 char <=s && { ch ?1 char 57 <=s } ! if { break }
# tcc_cc.c 741
# tcc_cc.c 742
                            token_it ->s11_m_token ? i ? + ch ?1 char =1 ;
# tcc_cc.c 742
                            i i ? 1 + = ;
# tcc_cc.c 742
                            it ? it_next ? () ;
# tcc_cc.c 742
                            ch it ->s6_m_ch ?1 char =1 ;
                        }
                    }
# tcc_cc.c 745
                    ch ?1 char 85 == if
                    {
# tcc_cc.c 746
# tcc_cc.c 747
                        token_it ->s11_m_token ? i ? + ch ?1 char =1 ;
# tcc_cc.c 747
                        i i ? 1 + = ;
# tcc_cc.c 747
                        it ? it_next ? () ;
# tcc_cc.c 747
                        ch it ->s6_m_ch ?1 char =1 ;
                    }
# tcc_cc.c 749
                    do
                    {
                        ch ?1 char 76 == ! if { break }
# tcc_cc.c 750
# tcc_cc.c 751
                        token_it ->s11_m_token ? i ? + ch ?1 char =1 ;
# tcc_cc.c 751
                        i i ? 1 + = ;
# tcc_cc.c 751
                        it ? it_next ? () ;
# tcc_cc.c 751
                        ch it ->s6_m_ch ?1 char =1 ;
                    }
                }
                else
                {
# tcc_cc.c 754
                    ch ?1 char 39 == if
                    {
# tcc_cc.c 755
# tcc_cc.c 756
                        token_it ->s11_m_kind ch ?1 char = ;
# tcc_cc.c 757
                        it ? it_next ? () ;
# tcc_cc.c 758
                        token_it ->s11_m_token ? 0 + tokenizer ? tokenizer_parse_char_literal () =1 ;
# tcc_cc.c 759
                        i 1 = ;
# tcc_cc.c 760
                        it ->s6_m_ch ?1 char 39 == if
                        {
# tcc_cc.c 761
# tcc_cc.c 762
                            it ? it_next ? () ;
                        }
                    }
                    else
                    {
# tcc_cc.c 765
                        ch ?1 char 34 == if
                        {
# tcc_cc.c 766
# tcc_cc.c 767
                            token_it ->s11_m_kind ch ?1 char = ;
# tcc_cc.c 767
                            it ? it_next ? () ;
# tcc_cc.c 767
                            ch it ->s6_m_ch ?1 char =1 ;
# tcc_cc.c 768
                            do
                            {
                                ch ?1 char 0 != && { ch ?1 char 10 != } && { ch ?1 char 34 != } ! if { break }
# tcc_cc.c 769
# tcc_cc.c 770
                                i ? 6000 == if
                                {
# tcc_cc.c 771
# tcc_cc.c 772
                                    stderr ? "MAX_TOKEN_LEN %d exceeded\n" { int 1 __var_args __var_args i ? = ; __var_args fprintf () } ;
# tcc_cc.c 773
                                    4294967295 exit () ;
                                }
# tcc_cc.c 775
                                token_it ->s11_m_token ? i ? + tokenizer ? tokenizer_parse_char_literal () =1 ;
# tcc_cc.c 776
                                i $ ? 1 + = 1 - ;
# tcc_cc.c 777
                                ch it ->s6_m_ch ?1 char =1 ;
                            }
# tcc_cc.c 779
                            ch ?1 char 34 == if
                            {
# tcc_cc.c 780
# tcc_cc.c 781
                                it ? it_next ? () ;
                            }
                        }
                        else
                        {
# tcc_cc.c 785
# tcc_cc.c 786
                            token_it ->s11_m_kind ch ?1 char = ;
# tcc_cc.c 787
                            token_it ->s11_m_token ? 0 + ch ?1 char =1 ;
# tcc_cc.c 788
                            i 1 = ;
# tcc_cc.c 789
                            ch ?1 char 35 == if
                            {
# tcc_cc.c 790
# tcc_cc.c 791
                                it ? it_next ? () ;
# tcc_cc.c 792
                                it ->s6_m_ch ?1 char 35 == if
                                {
# tcc_cc.c 793
# tcc_cc.c 794
                                    it ? it_next ? () ;
# tcc_cc.c 795
                                    token_it ->s11_m_kind 500 = ;
# tcc_cc.c 796
                                    token_it ->s11_m_token ? 1 + 35 =1 ;
# tcc_cc.c 797
                                    i 2 = ;
                                }
                            }
                            else
                            {
# tcc_cc.c 800
                                ch ?1 char 61 == if
                                {
# tcc_cc.c 801
# tcc_cc.c 802
                                    it ? it_next ? () ;
# tcc_cc.c 803
                                    it ->s6_m_ch ?1 char 61 == if
                                    {
# tcc_cc.c 804
# tcc_cc.c 805
                                        it ? it_next ? () ;
# tcc_cc.c 806
                                        token_it ->s11_m_kind 501 = ;
# tcc_cc.c 807
                                        token_it ->s11_m_token ? 1 + 61 =1 ;
# tcc_cc.c 808
                                        i 2 = ;
                                    }
                                }
                                else
                                {
# tcc_cc.c 811
                                    ch ?1 char 42 == || { ch ?1 char 47 == } || { ch ?1 char 37 == } || { ch ?1 char 94 == } if
                                    {
# tcc_cc.c 812
# tcc_cc.c 813
                                        it ? it_next ? () ;
# tcc_cc.c 814
                                        it ->s6_m_ch ?1 char 61 == if
                                        {
# tcc_cc.c 815
# tcc_cc.c 816
                                            it ? it_next ? () ;
# tcc_cc.c 817
                                            token_it ->s11_m_kind 600 ch ?1 char + = ;
# tcc_cc.c 818
                                            token_it ->s11_m_token ? 1 + 61 =1 ;
# tcc_cc.c 819
                                            i 2 = ;
                                        }
                                    }
                                    else
                                    {
# tcc_cc.c 822
                                        ch ?1 char 45 == if
                                        {
# tcc_cc.c 823
# tcc_cc.c 824
                                            it ? it_next ? () ;
# tcc_cc.c 824
                                            ch it ->s6_m_ch ?1 char =1 ;
# tcc_cc.c 825
                                            ch ?1 char 45 == if
                                            {
# tcc_cc.c 826
# tcc_cc.c 827
                                                it ? it_next ? () ;
# tcc_cc.c 828
                                                token_it ->s11_m_kind 506 = ;
# tcc_cc.c 829
                                                token_it ->s11_m_token ? 1 + ch ?1 char =1 ;
# tcc_cc.c 830
                                                i 2 = ;
                                            }
                                            else
                                            {
# tcc_cc.c 832
                                                ch ?1 char 61 == if
                                                {
# tcc_cc.c 833
# tcc_cc.c 834
                                                    it ? it_next ? () ;
# tcc_cc.c 835
                                                    token_it ->s11_m_kind 600 45 + = ;
# tcc_cc.c 836
                                                    token_it ->s11_m_token ? 1 + ch ?1 char =1 ;
# tcc_cc.c 837
                                                    i 2 = ;
                                                }
                                                else
                                                {
# tcc_cc.c 839
                                                    ch ?1 char 62 == if
                                                    {
# tcc_cc.c 840
# tcc_cc.c 841
                                                        it ? it_next ? () ;
# tcc_cc.c 842
                                                        token_it ->s11_m_kind 507 = ;
# tcc_cc.c 843
                                                        token_it ->s11_m_token ? 1 + ch ?1 char =1 ;
# tcc_cc.c 844
                                                        i 2 = ;
                                                    }
                                                }
                                            }
                                        }
                                        else
                                        {
# tcc_cc.c 847
                                            ch ?1 char 43 == || { ch ?1 char 45 == } if
                                            {
# tcc_cc.c 848
# tcc_cc.c 849
                                                it ? it_next ? () ;
# tcc_cc.c 850
                                                ch it ->s6_m_ch ?1 char =1 ;
# tcc_cc.c 851
                                                ch ?1 char token_it ->s11_m_token ? 0 + ?1 char == || { ch ?1 char 61 == } if
                                                {
# tcc_cc.c 852
# tcc_cc.c 853
                                                    it ? it_next ? () ;
# tcc_cc.c 854
                                                    token_it ->s11_m_token ? 1 + ch ?1 char =1 ;
# tcc_cc.c 855
                                                    ch ?1 char 43 == if
                                                    {
# tcc_cc.c 856
# tcc_cc.c 857
                                                        token_it ->s11_m_kind 505 = ;
                                                    }
                                                    else
                                                    {
# tcc_cc.c 859
                                                        ch ?1 char 45 == if
                                                        {
# tcc_cc.c 860
# tcc_cc.c 861
                                                            token_it ->s11_m_kind 506 = ;
                                                        }
                                                        else
                                                        {
# tcc_cc.c 864
# tcc_cc.c 865
                                                            token_it ->s11_m_kind 600 token_it ->s11_m_token ? 0 + ?1 char + = ;
                                                        }
                                                    }
# tcc_cc.c 867
                                                    i 2 = ;
                                                }
                                            }
                                            else
                                            {
# tcc_cc.c 870
                                                ch ?1 char 60 == || { ch ?1 char 62 == } || { ch ?1 char 124 == } || { ch ?1 char 38 == } if
                                                {
# tcc_cc.c 871
# tcc_cc.c 872
                                                    it ? it_next ? () ;
# tcc_cc.c 873
                                                    it ->s6_m_ch ?1 char ch ?1 char == if
                                                    {
# tcc_cc.c 874
# tcc_cc.c 875
                                                        it ? it_next ? () ;
# tcc_cc.c 876
                                                        token_it ->s11_m_kind 800 ch ?1 char + = ;
# tcc_cc.c 877
                                                        token_it ->s11_m_token ? 1 + ch ?1 char =1 ;
# tcc_cc.c 878
                                                        i 2 = ;
                                                    }
# tcc_cc.c 880
                                                    it ->s6_m_ch ?1 char 61 == && { ch ?1 char 60 == || { ch ?1 char 62 == } || { ch ?1 char 38 == } || { ch ?1 char 124 == } } if
                                                    {
# tcc_cc.c 881
# tcc_cc.c 882
                                                        it ? it_next ? () ;
# tcc_cc.c 883
                                                        i ? 2 == if
                                                        {
# tcc_cc.c 884
# tcc_cc.c 885
                                                            token_it ->s11_m_kind 600 ch ?1 char + = ;
                                                        }
                                                        else
                                                        {
# tcc_cc.c 887
                                                            ch ?1 char 38 == if
                                                            {
# tcc_cc.c 888
# tcc_cc.c 889
                                                                token_it ->s11_m_kind 600 38 + = ;
                                                            }
                                                            else
                                                            {
# tcc_cc.c 891
                                                                ch ?1 char 124 == if
                                                                {
# tcc_cc.c 892
# tcc_cc.c 893
                                                                    token_it ->s11_m_kind 600 124 + = ;
                                                                }
                                                                else
                                                                {
# tcc_cc.c 895
                                                                    ch ?1 char 60 == if
                                                                    {
# tcc_cc.c 896
# tcc_cc.c 897
                                                                        token_it ->s11_m_kind 503 = ;
                                                                    }
                                                                    else
                                                                    {
# tcc_cc.c 900
# tcc_cc.c 901
                                                                        token_it ->s11_m_kind 504 = ;
                                                                    }
                                                                }
                                                            }
                                                        }
# tcc_cc.c 903
                                                        token_it ->s11_m_token ? i ? + 61 =1 ;
# tcc_cc.c 904
                                                        i i ? 1 + = ;
                                                    }
                                                }
                                                else
                                                {
# tcc_cc.c 907
                                                    ch ?1 char 33 == if
                                                    {
# tcc_cc.c 908
# tcc_cc.c 909
                                                        it ? it_next ? () ;
# tcc_cc.c 910
                                                        it ->s6_m_ch ?1 char 61 == if
                                                        {
# tcc_cc.c 911
# tcc_cc.c 912
                                                            it ? it_next ? () ;
# tcc_cc.c 913
                                                            token_it ->s11_m_kind 502 = ;
# tcc_cc.c 914
                                                            token_it ->s11_m_token ? 1 + 61 =1 ;
# tcc_cc.c 915
                                                            i 2 = ;
                                                        }
                                                    }
                                                    else
                                                    {
# tcc_cc.c 918
                                                        ch ?1 char 46 == if
                                                        {
# tcc_cc.c 919
# tcc_cc.c 920
                                                            it ? it_next ? () ;
# tcc_cc.c 921
                                                            it ->s6_m_ch ?1 char 46 == if
                                                            {
# tcc_cc.c 922
# tcc_cc.c 923
                                                                it ? it_next ? () ;
# tcc_cc.c 924
                                                                token_it ->s11_m_kind 508 = ;
# tcc_cc.c 925
                                                                token_it ->s11_m_token ? 1 + 46 =1 ;
# tcc_cc.c 926
                                                                i 2 = ;
# tcc_cc.c 927
                                                                it ->s6_m_ch ?1 char 46 == if
                                                                {
# tcc_cc.c 928
# tcc_cc.c 929
                                                                    it ? it_next ? () ;
# tcc_cc.c 930
                                                                    token_it ->s11_m_kind 509 = ;
# tcc_cc.c 931
                                                                    token_it ->s11_m_token ? 2 + 46 =1 ;
# tcc_cc.c 932
                                                                    i 3 = ;
                                                                }
                                                            }
                                                        }
                                                        else
                                                        {
# tcc_cc.c 937
# tcc_cc.c 938
                                                            it ? it_next ? () ;
                                                        }
                                                    }
                                                }
                                            }
                                        }
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
    :done
# tcc_cc.c 942
    token_it ->s11_m_token ? i ? + 0 =1 ;
# tcc_cc.c 943
    token_it ->s11_m_length i ? = ;
# tcc_cc.c 944
    opt_trace_parser ?1 char if
    {
# tcc_cc.c 945
        "tokenizer_next %d: %d '%s'\n" { int 3 __var_args __var_args token_it ->s11_m_line ? = ; __var_args 4 + token_it ->s11_m_kind ? = ; __var_args 8 + token_it ->s11_m_token ? = ; __var_args printf () } ;
    }
# tcc_cc.c 946
    token_it ? return
    0 return
}
void string_int_value
{
    int s s =:
    int int_value int_value 0 = ;

# tcc_cc.c 952
    s ? ?1 char 48 == if
    {
# tcc_cc.c 953
# tcc_cc.c 954
        s $ ? 1 + = 1 - ;
# tcc_cc.c 955
        s ? ?1 char 120 == if
        {
# tcc_cc.c 956
# tcc_cc.c 957
            s $ ? 1 + = 1 - ;
# tcc_cc.c 958
            do
            {
                1 ! if { break }
# tcc_cc.c 959
# tcc_cc.c 960
                48 s ? ?1 char <=s && { s ? ?1 char 57 <=s } if
                {
# tcc_cc.c 961
                    int_value 16 int_value ? * s ? ?1 char + 48 - = ;
                }
                else
                {
# tcc_cc.c 962
                    97 s ? ?1 char <=s && { s ? ?1 char 102 <=s } if
                    {
# tcc_cc.c 963
                        int_value 16 int_value ? * s ? ?1 char + 97 - 10 + = ;
                    }
                    else
                    {
# tcc_cc.c 964
                        65 s ? ?1 char <=s && { s ? ?1 char 70 <=s } if
                        {
# tcc_cc.c 965
                            int_value 16 int_value ? * s ? ?1 char + 65 - 10 + = ;
                        }
                        else
                        {
# tcc_cc.c 967
                            break
                        }
                    }
                }
# tcc_cc.c 968
                s $ ? 1 + = 1 - ;
            }
        }
        else
        {
# tcc_cc.c 972
# tcc_cc.c 973
            do
            {
                48 s ? ?1 char <=s && { s ? ?1 char 55 <=s } ! if { break }
# tcc_cc.c 974
# tcc_cc.c 975
                int_value 8 int_value ? * s ? ?1 char + 48 - = ;
# tcc_cc.c 976
                s $ ? 1 + = 1 - ;
            }
        }
    }
    else
    {
# tcc_cc.c 981
# tcc_cc.c 982
        do
        {
            48 s ? ?1 char <=s && { s ? ?1 char 57 <=s } ! if { break }
# tcc_cc.c 983
# tcc_cc.c 984
            int_value 10 int_value ? * s ? ?1 char + 48 - = ;
# tcc_cc.c 985
            s $ ? 1 + = 1 - ;
        }
    }
# tcc_cc.c 988
    s ? ?1 char 85 == if
    {
# tcc_cc.c 989
# tcc_cc.c 990
        s $ ? 1 + = 1 - ;
    }
# tcc_cc.c 992
    do
    {
        s ? ?1 char 76 == ! if { break }
# tcc_cc.c 993
# tcc_cc.c 994
        s $ ? 1 + = 1 - ;
    }
# tcc_cc.c 996
    int_value ? return
    0 return
}
void token_it_int_value
{
    int it it =:
# tcc_cc.c 1001
    it ->s11_m_token ? string_int_value () return
    0 return
}
void new_tokenizer
{
    int char_iterator char_iterator =:
    int tokenizer tokenizer 32 malloc () = ;

# tcc_cc.c 1007
    tokenizer ->s12_m__char_iterator char_iterator ? = ;
# tcc_cc.c 1008
    tokenizer ->s12_m_base s11_m_token + 6000 malloc () = ;
# tcc_cc.c 1009
    tokenizer ->s12_m_base s11_m_filename + 0 = ;
# tcc_cc.c 1010
    tokenizer ->s12_m_base s11_m_next + tokenizer_next = ;
# tcc_cc.c 1011
    tokenizer ? return
    0 return
}
const s13_m_kind 0
const s13_m_token 4
const s13_m_length 8
const s13_m_filename 12
const s13_m_line 16
const s13_m_column 20
const s13_m_next 24
void new_token
{
    int kind kind =:
    int token token 28 malloc () = ;

# tcc_cc.c 1031
    token ->s13_m_kind kind ? = ;
# tcc_cc.c 1032
    token ->s13_m_token 0 = ;
# tcc_cc.c 1033
    token ->s13_m_length 0 = ;
# tcc_cc.c 1034
    token ->s13_m_filename "<env>" = ;
# tcc_cc.c 1035
    token ->s13_m_line 0 = ;
# tcc_cc.c 1036
    token ->s13_m_column 0 = ;
# tcc_cc.c 1037
    token ->s13_m_next 0 = ;
# tcc_cc.c 1038
    token ? return
    0 return
}
void new_int_token
{
    int str str =:
    int token token 48 new_token () = ;

# tcc_cc.c 1043
    token ->s13_m_token str ? copystr () = ;
# tcc_cc.c 1044
    token ? return
    0 return
}
void new_str_token
{
    int str str =:
    int token token 34 new_token () = ;

# tcc_cc.c 1049
    token ->s13_m_token str ? copystr () = ;
# tcc_cc.c 1050
    token ->s13_m_length str ? strlen () = ;
# tcc_cc.c 1051
    token ? return
    0 return
}
void new_token_from_it
{
    int it it =:
    int token token it ->s11_m_kind ? new_token () = ;

# tcc_cc.c 1056
    token ->s13_m_token it ->s11_m_token ? it ->s11_m_length ? copystrlen () = ;
# tcc_cc.c 1057
    token ->s13_m_length it ->s11_m_length ? = ;
# tcc_cc.c 1058
    token ->s13_m_filename it ->s11_m_filename ? = ;
# tcc_cc.c 1059
    token ->s13_m_line it ->s11_m_line ? = ;
# tcc_cc.c 1060
    token ->s13_m_column it ->s11_m_column ? = ;
# tcc_cc.c 1061
    token ? return
    0 return
}
const s14_m_name 0
const s14_m_nr_args 4
const s14_m_args 8
const s14_m_tokens 48
const s14_m_next 52
int environment
void get_env
{
    int create create =:
    int name name =:
    int prev_env prev_env 0 = ;

    int env env environment ? = ;

# tcc_cc.c 1082
    do
    {
        env ? 0 != ! if { break }
# tcc_cc.c 1083
# tcc_cc.c 1084
        env ->s14_m_name ? name ? eqstr () if
        {
# tcc_cc.c 1085
            env ? return
        }
# tcc_cc.c 1086
        prev_env env ? = ;
# tcc_cc.c 1087
        env env ->s14_m_next ? = ;
    }
# tcc_cc.c 1089
    create ?1 char ! if
    {
# tcc_cc.c 1090
        0 return
    }
# tcc_cc.c 1091
    env 56 malloc () = ;
# tcc_cc.c 1092
    env ->s14_m_name name ? copystr () = ;
# tcc_cc.c 1093
    env ->s14_m_nr_args 0 = ;
# tcc_cc.c 1094
    env ->s14_m_tokens 0 = ;
# tcc_cc.c 1095
    env ->s14_m_next 0 = ;
# tcc_cc.c 1096
    prev_env ? 0 == if
    {
# tcc_cc.c 1097
# tcc_cc.c 1098
        environment env ? = ;
    }
    else
    {
# tcc_cc.c 1101
# tcc_cc.c 1102
        prev_env ->s14_m_next env ? = ;
    }
# tcc_cc.c 1104
    env ? return
    0 return
}
void del_env
{
    int name name =:
    int prev_env prev_env 0 = ;

    int env env environment ? = ;

# tcc_cc.c 1111
    do
    {
        env ? 0 != ! if { break }
# tcc_cc.c 1112
# tcc_cc.c 1113
        env ->s14_m_name ? name ? eqstr () if
        {
# tcc_cc.c 1114
# tcc_cc.c 1115
            prev_env ? 0 == if
            {
# tcc_cc.c 1116
# tcc_cc.c 1117
                environment environment ->s14_m_next ? = ;
            }
            else
            {
# tcc_cc.c 1120
# tcc_cc.c 1121
                prev_env ->s14_m_next env ->s14_m_next ? = ;
            }
# tcc_cc.c 1123
            0 return
        }
# tcc_cc.c 1125
        prev_env env ? = ;
# tcc_cc.c 1126
        env env ->s14_m_next ? = ;
    }
    0 return
}
void parse_expr_function_p ;
const s15_m_base 0
const s15_m__source_it 28
const s15_m__token_it 32
const s15_m__parse_or_expr 36
const s15_m__skip_level 40
const s15_m__if_done 44
const s15_m__if_level 84
void conditional_iterator_parse_primary
{
    int it it =:
    int token_it_next token_it_next it ->s15_m__token_it ->s11_m_next ? = ;

    int result result 0 = ;

# tcc_cc.c 1164
    it ->s15_m__token_it ->s11_m_kind ? 40 == if
    {
# tcc_cc.c 1165
# tcc_cc.c 1166
        it ->s15_m__token_it ? 0 token_it_next ? () ;
        int parse_or_expr parse_or_expr it ->s15_m__parse_or_expr ? = ;

# tcc_cc.c 1168
        result it ? parse_or_expr ? () = ;
# tcc_cc.c 1169
        it ->s15_m__token_it ->s11_m_kind ? 41 == if
        {
# tcc_cc.c 1170
# tcc_cc.c 1171
            it ->s15_m__token_it ? 0 token_it_next ? () ;
        }
    }
    else
    {
# tcc_cc.c 1174
        it ->s15_m__token_it ->s11_m_kind ? 1033 == if
        {
# tcc_cc.c 1175
# tcc_cc.c 1176
            it ->s15_m__token_it ? 0 token_it_next ? () ;
# tcc_cc.c 1177
            it ->s15_m__token_it ->s11_m_kind ? 40 == if
            {
# tcc_cc.c 1178
# tcc_cc.c 1179
                it ->s15_m__token_it ? 0 token_it_next ? () ;
# tcc_cc.c 1181
                it ->s15_m__token_it ->s11_m_token ? 0 get_env () 0 != if
                {
# tcc_cc.c 1182
# tcc_cc.c 1183
                    result 1 = ;
                }
# tcc_cc.c 1185
                it ->s15_m__token_it ? 0 token_it_next ? () ;
# tcc_cc.c 1186
                it ->s15_m__token_it ->s11_m_kind ? 41 == if
                {
# tcc_cc.c 1187
# tcc_cc.c 1188
                    it ->s15_m__token_it ? 0 token_it_next ? () ;
                }
            }
            else
            {
# tcc_cc.c 1192
# tcc_cc.c 1193
                it ->s15_m__token_it ->s11_m_token ? 0 get_env () 0 != if
                {
# tcc_cc.c 1194
# tcc_cc.c 1195
                    result 1 = ;
                }
# tcc_cc.c 1197
                it ->s15_m__token_it ? 0 token_it_next ? () ;
            }
        }
        else
        {
# tcc_cc.c 1200
            it ->s15_m__token_it ->s11_m_kind ? 48 == if
            {
# tcc_cc.c 1201
# tcc_cc.c 1202
                result it ->s15_m__token_it ? token_it_int_value () = ;
# tcc_cc.c 1203
                it ->s15_m__token_it ? 0 token_it_next ? () ;
            }
            else
            {
# tcc_cc.c 1205
                it ->s15_m__token_it ->s11_m_kind ? 105 == if
                {
# tcc_cc.c 1206
                    int env env it ->s15_m__token_it ->s11_m_token ? 0 get_env () = ;

# tcc_cc.c 1208
                    env ? 0 != && { env ->s14_m_tokens ? 0 != } && { env ->s14_m_tokens ->s13_m_kind ? 48 == } if
                    {
# tcc_cc.c 1209
# tcc_cc.c 1210
                        result env ->s14_m_tokens ->s13_m_token ? string_int_value () = ;
                    }
# tcc_cc.c 1212
                    it ->s15_m__token_it ? 0 token_it_next ? () ;
                }
            }
        }
    }
# tcc_cc.c 1214
    result ? return
    0 return
}
void conditional_iterator_parse_unary_expr
{
    int it it =:
    int token_it_next token_it_next it ->s15_m__token_it ->s11_m_next ? = ;

# tcc_cc.c 1227
    it ->s15_m__token_it ->s11_m_kind ? 33 == if
    {
# tcc_cc.c 1228
# tcc_cc.c 1229
        it ->s15_m__token_it ? 0 token_it_next ? () ;
        int result result it ? conditional_iterator_parse_primary () = ;

# tcc_cc.c 1231
        result ? ! return
    }
# tcc_cc.c 1233
    it ? conditional_iterator_parse_primary () return
    0 return
}
void conditional_iterator_parse_compare_expr
{
    int it it =:
    int token_it_next token_it_next it ->s15_m__token_it ->s11_m_next ? = ;

    int value value it ? conditional_iterator_parse_unary_expr () = ;

# tcc_cc.c 1248
    it ->s15_m__token_it ->s11_m_kind ? 501 == if
    {
# tcc_cc.c 1249
# tcc_cc.c 1250
        it ->s15_m__token_it ? 0 token_it_next ? () ;
# tcc_cc.c 1251
        value ? it ? conditional_iterator_parse_unary_expr () == return
    }
# tcc_cc.c 1253
    it ->s15_m__token_it ->s11_m_kind ? 502 == if
    {
# tcc_cc.c 1254
# tcc_cc.c 1255
        it ->s15_m__token_it ? 0 token_it_next ? () ;
# tcc_cc.c 1256
        value ? it ? conditional_iterator_parse_unary_expr () != return
    }
# tcc_cc.c 1258
    value ? return
    0 return
}
void conditional_iterator_parse_and_expr
{
    int it it =:
    int token_it_next token_it_next it ->s15_m__token_it ->s11_m_next ? = ;

    int value value it ? conditional_iterator_parse_compare_expr () = ;

# tcc_cc.c 1269
    do
    {
        it ->s15_m__token_it ->s11_m_kind ? 800 38 + == ! if { break }
# tcc_cc.c 1270
# tcc_cc.c 1271
        it ->s15_m__token_it ? 0 token_it_next ? () ;
        int value2 value2 it ? conditional_iterator_parse_compare_expr () = ;

# tcc_cc.c 1273
        value value ? && { value2 ? } = ;
    }
# tcc_cc.c 1275
    value ? return
    0 return
}
void conditional_iterator_parse_or_expr
{
    int it it =:
    int token_it_next token_it_next it ->s15_m__token_it ->s11_m_next ? = ;

    int value value it ? conditional_iterator_parse_and_expr () = ;

# tcc_cc.c 1286
    do
    {
        it ->s15_m__token_it ->s11_m_kind ? 800 124 + == ! if { break }
# tcc_cc.c 1287
# tcc_cc.c 1288
        it ->s15_m__token_it ? 0 token_it_next ? () ;
        int value2 value2 it ? conditional_iterator_parse_and_expr () = ;

# tcc_cc.c 1290
        value value ? || { value2 ? } = ;
    }
# tcc_cc.c 1292
    value ? return
    0 return
}
int include_path
int end_include_prefix
void conditional_iterator_next
{
    int dummy dummy =:
    int token_it token_it =:
    int it it token_it ? = ;

    int token_it_next token_it_next it ->s15_m__token_it ->s11_m_next ? = ;

    int kind
    int value value 0 = ;

    int prev_token
    int env
    int token
    int input_it
    int splice_it
    int comment_it
# tcc_cc.c 1312
    it ->s15_m__token_it ? 1 token_it_next ? () ;
# tcc_cc.c 1313
    do
    {
        1 ! if { break }
# tcc_cc.c 1314
# tcc_cc.c 1317
        kind it ->s15_m__token_it ->s11_m_kind ? = ;
# tcc_cc.c 1318
        it ->s15_m__skip_level ?1 char 0 >s if
        {
# tcc_cc.c 1319
# tcc_cc.c 1320
            kind ? 1034 == || { kind ? 1035 == } || { kind ? 1036 == } if
            {
# tcc_cc.c 1321
# tcc_cc.c 1322
                it ->s15_m__skip_level it ->s15_m__skip_level ?1 char 1 + =1 ;
            }
            else
            {
# tcc_cc.c 1324
                kind ? 1031 == if
                {
# tcc_cc.c 1325
# tcc_cc.c 1326
                    it ->s15_m__skip_level it ->s15_m__skip_level ?1 char 1 - =1 ;
# tcc_cc.c 1327
                    it ->s15_m__skip_level ?1 char 0 == if
                    {
# tcc_cc.c 1328
# tcc_cc.c 1329
                        it ->s15_m__if_level it ->s15_m__if_level ? 1 - = ;
                    }
                }
                else
                {
# tcc_cc.c 1332
                    kind ? 1029 == if
                    {
# tcc_cc.c 1333
# tcc_cc.c 1334
                        it ->s15_m__skip_level ?1 char 1 == if
                        {
# tcc_cc.c 1335
# tcc_cc.c 1336
                            it ->s15_m__if_done it ->s15_m__if_level ? + ?1 char 0 == if
                            {
# tcc_cc.c 1337
# tcc_cc.c 1338
                                it ->s15_m__skip_level 0 =1 ;
                            }
                        }
                    }
                    else
                    {
# tcc_cc.c 1342
                        kind ? 1030 == if
                        {
# tcc_cc.c 1343
# tcc_cc.c 1344
                            it ->s15_m__token_it ? 0 token_it_next ? () ;
# tcc_cc.c 1345
                            value it ? conditional_iterator_parse_or_expr () = ;
# tcc_cc.c 1346
                            it ->s15_m__skip_level ?1 char 1 == if
                            {
# tcc_cc.c 1347
# tcc_cc.c 1348
                                it ->s15_m__if_done it ->s15_m__if_level ? + ?1 char 0 == if
                                {
# tcc_cc.c 1349
# tcc_cc.c 1350
                                    it ->s15_m__token_it ? 0 token_it_next ? () ;
# tcc_cc.c 1351
                                    value ? if
                                    {
# tcc_cc.c 1352
# tcc_cc.c 1353
                                        it ->s15_m__skip_level 0 =1 ;
# tcc_cc.c 1354
                                        it ->s15_m__if_done it ->s15_m__if_level ? + 1 =1 ;
                                    }
                                }
                            }
                        }
                    }
                }
            }
# tcc_cc.c 1359
            it ->s15_m__token_it ? 1 token_it_next ? () ;
        }
        else
        {
# tcc_cc.c 1361
            kind ? 1035 == || { kind ? 1036 == } if
            {
# tcc_cc.c 1362
# tcc_cc.c 1363
                it ->s15_m__token_it ? 1 token_it_next ? () ;
# tcc_cc.c 1364
                it ->s15_m__if_level it ->s15_m__if_level ? 1 + = ;
# tcc_cc.c 1365
                it ->s15_m__token_it ->s11_m_kind ? 105 == if
                {
# tcc_cc.c 1366
# tcc_cc.c 1369
                    it ->s15_m__token_it ->s11_m_token ? 0 get_env () 0 != kind ? 1035 == == if
                    {
# tcc_cc.c 1370
# tcc_cc.c 1371
                        it ->s15_m__if_done it ->s15_m__if_level ? + 1 =1 ;
                    }
                    else
                    {
# tcc_cc.c 1374
# tcc_cc.c 1375
                        it ->s15_m__if_done it ->s15_m__if_level ? + 0 =1 ;
# tcc_cc.c 1376
                        it ->s15_m__skip_level 1 =1 ;
                    }
# tcc_cc.c 1378
                    it ->s15_m__token_it ? 1 token_it_next ? () ;
                }
            }
            else
            {
# tcc_cc.c 1381
                kind ? 1034 == if
                {
# tcc_cc.c 1382
# tcc_cc.c 1383
                    it ->s15_m__token_it ? 1 token_it_next ? () ;
# tcc_cc.c 1384
                    it ->s15_m__if_level it ->s15_m__if_level ? 1 + = ;
# tcc_cc.c 1385
                    it ? conditional_iterator_parse_or_expr () if
                    {
# tcc_cc.c 1386
# tcc_cc.c 1387
                        it ->s15_m__if_done it ->s15_m__if_level ? + 1 =1 ;
                    }
                    else
                    {
# tcc_cc.c 1390
# tcc_cc.c 1391
                        it ->s15_m__if_done it ->s15_m__if_level ? + 0 =1 ;
# tcc_cc.c 1392
                        it ->s15_m__skip_level 1 =1 ;
                    }
# tcc_cc.c 1394
                    it ->s15_m__token_it ? 1 token_it_next ? () ;
                }
                else
                {
# tcc_cc.c 1396
                    kind ? 1029 == || { kind ? 1030 == } if
                    {
# tcc_cc.c 1397
# tcc_cc.c 1398
                        it ->s15_m__skip_level 1 =1 ;
# tcc_cc.c 1399
                        do
                        {
                            it ->s15_m__token_it ->s11_m_kind ? 10 == ! if { break }
# tcc_cc.c 1400
# tcc_cc.c 1401
                            it ->s15_m__token_it ? 0 token_it_next ? () ;
                        }
# tcc_cc.c 1403
                        it ->s15_m__token_it ? 1 token_it_next ? () ;
                    }
                    else
                    {
# tcc_cc.c 1405
                        kind ? 1031 == if
                        {
# tcc_cc.c 1406
# tcc_cc.c 1407
                            it ->s15_m__if_level it ->s15_m__if_level ? 1 - = ;
# tcc_cc.c 1408
                            it ->s15_m__token_it ? 1 token_it_next ? () ;
                        }
                        else
                        {
# tcc_cc.c 1410
                            kind ? 1032 == if
                            {
# tcc_cc.c 1411
# tcc_cc.c 1412
                                prev_token 0 = ;
# tcc_cc.c 1413
                                it ->s15_m__token_it ? 0 token_it_next ? () ;
# tcc_cc.c 1414
                                env it ->s15_m__token_it ->s11_m_token ? 1 get_env () = ;
# tcc_cc.c 1415
                                it ->s15_m__source_it ->s10_m_base s6_m_ch + ?1 char 40 == if
                                {
# tcc_cc.c 1416
# tcc_cc.c 1417
                                    it ->s15_m__token_it ? 0 token_it_next ? () ;
# tcc_cc.c 1418
                                    do
                                    {
                                        1 ! if { break }
# tcc_cc.c 1419
# tcc_cc.c 1420
                                        it ->s15_m__token_it ? 0 token_it_next ? () ;
# tcc_cc.c 1421
                                        env ->s14_m_args env ->s14_m_nr_args ? 4 * + it ->s15_m__token_it ->s11_m_token ? copystr () = ;
# tcc_cc.c 1422
                                        env ->s14_m_nr_args env ->s14_m_nr_args ? 1 + = ;
# tcc_cc.c 1423
                                        it ->s15_m__token_it ? 0 token_it_next ? () ;
# tcc_cc.c 1424
                                        it ->s15_m__token_it ->s11_m_kind ? 44 != if
                                        {
# tcc_cc.c 1425
# tcc_cc.c 1426
                                            break
                                        }
                                    }
# tcc_cc.c 1429
                                    it ->s15_m__token_it ->s11_m_kind ? 41 == if
                                    {
# tcc_cc.c 1430
# tcc_cc.c 1431
                                        it ->s15_m__token_it ? 0 token_it_next ? () ;
                                    }
                                }
                                else
                                {
# tcc_cc.c 1435
# tcc_cc.c 1436
                                    it ->s15_m__token_it ? 0 token_it_next ? () ;
                                }
# tcc_cc.c 1438
                                do
                                {
                                    it ->s15_m__token_it ->s11_m_kind ? 10 != ! if { break }
# tcc_cc.c 1439
# tcc_cc.c 1440
                                    token it ->s15_m__token_it ? new_token_from_it () = ;
# tcc_cc.c 1441
                                    prev_token ? 0 == if
                                    {
# tcc_cc.c 1442
# tcc_cc.c 1443
                                        env ->s14_m_tokens token ? = ;
                                    }
                                    else
                                    {
# tcc_cc.c 1446
# tcc_cc.c 1447
                                        prev_token ->s13_m_next token ? = ;
                                    }
# tcc_cc.c 1449
                                    prev_token token ? = ;
# tcc_cc.c 1450
                                    it ->s15_m__token_it ? 0 token_it_next ? () ;
                                }
# tcc_cc.c 1452
                                it ->s15_m__token_it ? 1 token_it_next ? () ;
                            }
                            else
                            {
# tcc_cc.c 1454
                                kind ? 1038 == if
                                {
# tcc_cc.c 1455
# tcc_cc.c 1456
                                    it ->s15_m__token_it ? 1 token_it_next ? () ;
# tcc_cc.c 1457
                                    it ->s15_m__token_it ->s11_m_token ? del_env () ;
# tcc_cc.c 1458
                                    it ->s15_m__token_it ? 1 token_it_next ? () ;
                                }
                                else
                                {
# tcc_cc.c 1460
                                    kind ? 1037 == if
                                    {
# tcc_cc.c 1461
# tcc_cc.c 1462
                                        it ->s15_m__token_it ? 1 token_it_next ? () ;
# tcc_cc.c 1463
                                        it ->s15_m__token_it ->s11_m_kind ? 34 == if
                                        {
# tcc_cc.c 1464
# tcc_cc.c 1465
                                            end_include_prefix ? it ->s15_m__token_it ->s11_m_token ? strcpy () ;
# tcc_cc.c 1466
                                            do
                                            {
                                                it ->s15_m__token_it ->s11_m_kind ? 10 != ! if { break }
# tcc_cc.c 1467
# tcc_cc.c 1468
                                                it ->s15_m__token_it ? 0 token_it_next ? () ;
                                            }
# tcc_cc.c 1471
                                            input_it include_path ? new_file_iterator () = ;
# tcc_cc.c 1472
                                            input_it ->s7_m_base s6_m_ch + ?1 char 0 != if
                                            {
# tcc_cc.c 1473
# tcc_cc.c 1474
                                                splice_it input_it ->s7_m_base new_line_splice_iterator () = ;
# tcc_cc.c 1475
                                                comment_it splice_it ->s8_m_base new_comment_strip_iterator () = ;
# tcc_cc.c 1476
                                                it ->s15_m__source_it ? comment_it ->s9_m_base include_iterator_add () ;
# tcc_cc.c 1477
                                                it ->s15_m__token_it ? 1 token_it_next ? () ;
                                            }
                                            else
                                            {
# tcc_cc.c 1480
# tcc_cc.c 1481
                                                it ->s15_m__token_it ? 1 token_it_next ? () ;
                                            }
                                        }
                                        else
                                        {
# tcc_cc.c 1485
# tcc_cc.c 1486
                                            do
                                            {
                                                it ->s15_m__token_it ->s11_m_kind ? 10 != ! if { break }
# tcc_cc.c 1487
# tcc_cc.c 1488
                                                it ->s15_m__token_it ? 0 token_it_next ? () ;
                                            }
# tcc_cc.c 1490
                                            it ->s15_m__token_it ? 1 token_it_next ? () ;
                                        }
                                    }
                                    else
                                    {
# tcc_cc.c 1493
                                        kind ? 1039 == if
                                        {
# tcc_cc.c 1494
# tcc_cc.c 1495
                                            it ->s15_m_base s11_m_kind + it ->s15_m__token_it ->s11_m_kind ? = ;
# tcc_cc.c 1496
                                            it ->s15_m_base s11_m_token + it ->s15_m__token_it ->s11_m_token ? = ;
# tcc_cc.c 1497
                                            it ->s15_m_base s11_m_length + it ->s15_m__token_it ->s11_m_length ? = ;
# tcc_cc.c 1498
                                            it ->s15_m_base s11_m_filename + it ->s15_m__token_it ->s11_m_filename ? = ;
# tcc_cc.c 1499
                                            it ->s15_m_base s11_m_line + it ->s15_m__token_it ->s11_m_line ? = ;
# tcc_cc.c 1500
                                            it ->s15_m_base s11_m_column + it ->s15_m__token_it ->s11_m_column ? = ;
# tcc_cc.c 1501
                                            token_it ? return
                                        }
                                        else
                                        {
# tcc_cc.c 1504
# tcc_cc.c 1505
                                            it ->s15_m_base s11_m_kind + it ->s15_m__token_it ->s11_m_kind ? = ;
# tcc_cc.c 1506
                                            it ->s15_m_base s11_m_token + it ->s15_m__token_it ->s11_m_token ? = ;
# tcc_cc.c 1507
                                            it ->s15_m_base s11_m_length + it ->s15_m__token_it ->s11_m_length ? = ;
# tcc_cc.c 1508
                                            it ->s15_m_base s11_m_filename + it ->s15_m__token_it ->s11_m_filename ? = ;
# tcc_cc.c 1509
                                            it ->s15_m_base s11_m_line + it ->s15_m__token_it ->s11_m_line ? = ;
# tcc_cc.c 1510
                                            it ->s15_m_base s11_m_column + it ->s15_m__token_it ->s11_m_column ? = ;
# tcc_cc.c 1511
                                            token_it ? return
                                        }
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
# tcc_cc.c 1514
    token_it ? return
    0 return
}
void new_conditional_iterator
{
    int token_it token_it =:
    int source_it source_it =:
    int it it 88 malloc () = ;

# tcc_cc.c 1520
    it ->s15_m__source_it source_it ? = ;
# tcc_cc.c 1521
    it ->s15_m__token_it token_it ? = ;
# tcc_cc.c 1522
    it ->s15_m__parse_or_expr conditional_iterator_parse_or_expr = ;
# tcc_cc.c 1523
    it ->s15_m__skip_level 0 =1 ;
# tcc_cc.c 1524
    it ->s15_m__if_level 0 = ;
# tcc_cc.c 1525
    it ->s15_m_base s11_m_next + conditional_iterator_next = ;
# tcc_cc.c 1526
    it ? return
    0 return
}
const s16_m_base 0
const s16_m_param_tokens 28
const s16_m_tokens 32
const s16_m__rest_it 36
const s16_m_stringify 40
const s16_m_appended_token 44
const s16_m__macro 96
const s16_m_args 100
void expand_macro_iterator_next
{
    int dummy dummy =:
    int token_it token_it =:
    int it it token_it ? = ;

# tcc_cc.c 1555
    it ->s16_m_param_tokens ? 0 != if
    {
# tcc_cc.c 1556
# tcc_cc.c 1557
        token_it ->s11_m_kind it ->s16_m_stringify ?1 char if { 34 } else { it ->s16_m_param_tokens ->s13_m_kind ? } = ;
# tcc_cc.c 1558
        token_it ->s11_m_token it ->s16_m_param_tokens ->s13_m_token ? = ;
# tcc_cc.c 1559
        token_it ->s11_m_length it ->s16_m_param_tokens ->s13_m_length ? = ;
# tcc_cc.c 1560
        token_it ->s11_m_filename it ->s16_m_param_tokens ->s13_m_filename ? = ;
# tcc_cc.c 1561
        token_it ->s11_m_line it ->s16_m_param_tokens ->s13_m_line ? = ;
# tcc_cc.c 1562
        token_it ->s11_m_column it ->s16_m_param_tokens ->s13_m_column ? = ;
# tcc_cc.c 1563
        opt_trace_parser ?1 char if
        {
# tcc_cc.c 1564
            "token from arg %d %s\n" { int 2 __var_args __var_args token_it ->s11_m_kind ? = ; __var_args 4 + token_it ->s11_m_token ? 0 == if { "?" } else { token_it ->s11_m_token ? } = ; __var_args printf () } ;
        }
# tcc_cc.c 1565
        it ->s16_m_param_tokens it ->s16_m_param_tokens ->s13_m_next ? = ;
# tcc_cc.c 1566
        token_it ? return
    }
# tcc_cc.c 1569
    {
        do
        {
# tcc_cc.c 1570
            int token token it ->s16_m_tokens ? = ;

# tcc_cc.c 1572
            token ? 0 == if
            {
# tcc_cc.c 1573
                int rest_it rest_it it ->s16_m__rest_it ? = ;

# tcc_cc.c 1575
                it ? free () ;
# tcc_cc.c 1576
                rest_it ? dummy ?1 char rest_it ->s11_m_next ? () return
            }
# tcc_cc.c 1579
            opt_trace_parser ?1 char if
            {
# tcc_cc.c 1580
                "token from macro %d %s\n" { int 2 __var_args __var_args token ->s13_m_kind ? = ; __var_args 4 + token ->s13_m_token ? 0 == if { "?" } else { token ->s13_m_token ? } = ; __var_args printf () } ;
            }
# tcc_cc.c 1581
            it ->s16_m_tokens token ->s13_m_next ? = ;
# tcc_cc.c 1582
            it ->s16_m_stringify 0 =1 ;
# tcc_cc.c 1584
            token ->s13_m_next ? 0 != && { token ->s13_m_next ->s13_m_kind ? 500 == } if
            {
# tcc_cc.c 1585
# tcc_cc.c 1586
                token_it ->s11_m_kind 105 = ;
# tcc_cc.c 1587
                token_it ->s11_m_filename token ->s13_m_filename ? = ;
# tcc_cc.c 1588
                token_it ->s11_m_line token ->s13_m_line ? = ;
# tcc_cc.c 1589
                token_it ->s11_m_column token ->s13_m_column ? = ;
                int p p 0 = ;

# tcc_cc.c 1591
                {
                    do
                    {
# tcc_cc.c 1592
                        int s s token ->s13_m_token ? = ;

# tcc_cc.c 1594
                        token ->s13_m_kind ? 105 == if
                        {
# tcc_cc.c 1595
                            int nr_args nr_args it ->s16_m__macro ->s14_m_nr_args ? = ;

                            int i i 0 = ;

# tcc_cc.c 1598
                            {
                                do
                                {
                                    i ? nr_args ? <s ! if { break }
# tcc_cc.c 1599
                                    token ->s13_m_token ? it ->s16_m__macro ->s14_m_args i ? 4 * + ? strcmp () 0 == if
                                    {
# tcc_cc.c 1600
                                        break
                                    }
                                    i $ ? 1 + = 1 - ;
                                }
                            }
# tcc_cc.c 1601
                            i ? nr_args ? <s if
                            {
# tcc_cc.c 1602
                                int tokens tokens it ->s16_m_args i ? 4 * + ? = ;

# tcc_cc.c 1604
                                tokens ? 0 == if
                                {
# tcc_cc.c 1605
# tcc_cc.c 1606
                                    opt_trace_parser ?1 char if
                                    {
# tcc_cc.c 1607
                                        "INFO: append arg no value\n" 0 printf () ;
                                    }
# tcc_cc.c 1608
                                    s "" = ;
                                }
                                else
                                {
# tcc_cc.c 1610
                                    tokens ->s13_m_next ? 0 != if
                                    {
# tcc_cc.c 1611
# tcc_cc.c 1612
                                        "ERROR: append arg more than one value\n" 0 printf () ;
# tcc_cc.c 1613
                                        s "" = ;
                                    }
                                    else
                                    {
# tcc_cc.c 1616
                                        s tokens ->s13_m_token ? = ;
                                    }
                                }
                            }
                        }
# tcc_cc.c 1619
                        {
                            do
                            {
                                s ? ?1 char 0 != ! if { break }
# tcc_cc.c 1620
                                p ? 50 1 - <s if
                                {
# tcc_cc.c 1621
                                    it ->s16_m_appended_token p $ ? 1 + = 1 - + s ? ?1 char =1 ;
                                }
                                s $ ? 1 + = 1 - ;
                            }
                        }
# tcc_cc.c 1622
                        token token ->s13_m_next ? = ;
# tcc_cc.c 1623
                        token ? 0 == || { token ->s13_m_kind ? 500 != } if
                        {
# tcc_cc.c 1624
                            break
                        }
# tcc_cc.c 1625
                        token token ->s13_m_next ? = ;
                    }
                }
# tcc_cc.c 1627
                it ->s16_m_tokens token ? = ;
# tcc_cc.c 1628
                it ->s16_m_appended_token p ? + 0 =1 ;
# tcc_cc.c 1629
                opt_trace_parser ?1 char if
                {
# tcc_cc.c 1630
                    "INFO: Appended token '%s'\n" { int 1 __var_args __var_args it ->s16_m_appended_token = ; __var_args printf () } ;
                }
# tcc_cc.c 1631
                token_it ->s11_m_token it ->s16_m_appended_token = ;
# tcc_cc.c 1632
                token_it ->s11_m_length p ? = ;
# tcc_cc.c 1634
                token_it ? return
            }
            else
            {
# tcc_cc.c 1637
# tcc_cc.c 1638
                token ->s13_m_kind ? 35 == if
                {
# tcc_cc.c 1639
# tcc_cc.c 1640
                    it ->s16_m_stringify 1 =1 ;
# tcc_cc.c 1641
                    it ->s16_m_tokens token token ->s13_m_next ? = = ;
# tcc_cc.c 1642
                    it ->s16_m_tokens ? 0 == if
                    {
# tcc_cc.c 1643
                        it ->s16_m__rest_it ? dummy ?1 char it ->s16_m__rest_it ->s11_m_next ? () return
                    }
                }
# tcc_cc.c 1646
                token ->s13_m_kind ? 105 == if
                {
# tcc_cc.c 1647
                    int nr_args nr_args it ->s16_m__macro ->s14_m_nr_args ? = ;

                    int i i 0 = ;

# tcc_cc.c 1650
                    {
                        do
                        {
                            i ? nr_args ? <s ! if { break }
# tcc_cc.c 1651
                            token ->s13_m_token ? it ->s16_m__macro ->s14_m_args i ? 4 * + ? strcmp () 0 == if
                            {
# tcc_cc.c 1652
                                break
                            }
                            i $ ? 1 + = 1 - ;
                        }
                    }
# tcc_cc.c 1653
                    i ? nr_args ? <s if
                    {
# tcc_cc.c 1654
                        int tokens tokens it ->s16_m_args i ? 4 * + ? = ;

# tcc_cc.c 1656
                        tokens ? 0 == if
                        {
# tcc_cc.c 1657
                            continue
                        }
# tcc_cc.c 1658
                        token_it ->s11_m_kind it ->s16_m_stringify ?1 char if { 34 } else { tokens ->s13_m_kind ? } = ;
# tcc_cc.c 1659
                        token_it ->s11_m_token tokens ->s13_m_token ? = ;
# tcc_cc.c 1660
                        token_it ->s11_m_length tokens ->s13_m_length ? = ;
# tcc_cc.c 1661
                        token_it ->s11_m_filename tokens ->s13_m_filename ? = ;
# tcc_cc.c 1662
                        token_it ->s11_m_line tokens ->s13_m_line ? = ;
# tcc_cc.c 1663
                        token_it ->s11_m_column token ->s13_m_column ? = ;
# tcc_cc.c 1664
                        it ->s16_m_param_tokens tokens ->s13_m_next ? = ;
# tcc_cc.c 1665
                        it ->s16_m_tokens token ->s13_m_next ? = ;
# tcc_cc.c 1666
                        token_it ? return
                    }
                }
# tcc_cc.c 1669
                token_it ->s11_m_kind it ->s16_m_stringify ?1 char if { 34 } else { token ->s13_m_kind ? } = ;
# tcc_cc.c 1670
                token_it ->s11_m_token token ->s13_m_token ? = ;
# tcc_cc.c 1671
                token_it ->s11_m_length token ->s13_m_length ? = ;
# tcc_cc.c 1672
                token_it ->s11_m_filename token ->s13_m_filename ? = ;
# tcc_cc.c 1673
                token_it ->s11_m_line token ->s13_m_line ? = ;
# tcc_cc.c 1674
                token_it ->s11_m_column token ->s13_m_column ? = ;
# tcc_cc.c 1676
                token_it ? return
            }
        }
    }
    0 return
}
void new_exapnd_macro_iterator
{
    int rest_it rest_it =:
    int args args =:
    int macro macro =:
    int it it 140 malloc () = ;

# tcc_cc.c 1684
    it ->s16_m_base s11_m_next + expand_macro_iterator_next = ;
# tcc_cc.c 1685
    it ->s16_m_param_tokens 0 = ;
# tcc_cc.c 1686
    it ->s16_m_tokens macro ->s14_m_tokens ? = ;
# tcc_cc.c 1687
    it ->s16_m__rest_it rest_it ? = ;
# tcc_cc.c 1688
    it ->s16_m__macro macro ? = ;
# tcc_cc.c 1689
    {
        int arg_nr arg_nr 0 = ;

        do
        {
            arg_nr ? macro ->s14_m_nr_args ? <s ! if { break }
# tcc_cc.c 1690
            it ->s16_m_args arg_nr ? 4 * + args ? arg_nr ? 4 * + ? = ;
            arg_nr $ ? 1 + = 1 - ;
        }
    }
# tcc_cc.c 1691
    it ->s16_m_base 0 expand_macro_iterator_next () return
    0 return
}
const s17_m_base 0
const s17_m__source_it 28
void expand_iterator_next
{
    int dummy dummy =:
    int token_it token_it =:
    int it it token_it ? = ;

    int source_it source_it it ->s17_m__source_it ? = ;

# tcc_cc.c 1711
    source_it source_it ? dummy ?1 char source_it ->s11_m_next ? () = ;
# tcc_cc.c 1713
    {
        int go go 1 =1 ;

        do
        {
            go ?1 char ! if { break }
# tcc_cc.c 1714
# tcc_cc.c 1715
            go 0 =1 ;
# tcc_cc.c 1716
            source_it ->s11_m_kind ? 105 == if
            {
# tcc_cc.c 1717
                int macro macro source_it ->s11_m_token ? 0 get_env () = ;

# tcc_cc.c 1719
                macro ? 0 != if
                {
# tcc_cc.c 1720
# tcc_cc.c 1721
                    go 1 =1 ;
# tcc_cc.c 1722
                    opt_trace_parser ?1 char if
                    {
# tcc_cc.c 1723
                        "Expand token %s %d: " { int 2 __var_args __var_args source_it ->s11_m_token ? = ; __var_args 4 + macro ->s14_m_nr_args ? = ; __var_args printf () } ;
                    }
                    int 10 args
                    int nr_args nr_args 0 = ;

# tcc_cc.c 1726
                    macro ->s14_m_nr_args ? 0 >s if
                    {
# tcc_cc.c 1727
# tcc_cc.c 1728
                        source_it source_it ? dummy ?1 char source_it ->s11_m_next ? () = ;
# tcc_cc.c 1729
                        source_it ->s11_m_kind ? 40 != if
                        {
# tcc_cc.c 1730
# tcc_cc.c 1731
                            "ERROR: No arguments for %s when parameters (%d) are expected\n" { int 2 __var_args __var_args macro ->s14_m_name ? = ; __var_args 4 + macro ->s14_m_nr_args ? = ; __var_args printf () } ;
# tcc_cc.c 1732
                            continue
                        }
# tcc_cc.c 1734
                        do
                        {
# tcc_cc.c 1735
# tcc_cc.c 1736
                            source_it source_it ? dummy ?1 char source_it ->s11_m_next ? () = ;
# tcc_cc.c 1737
                            args nr_args ? 4 * + 0 = ;
                            int ref_tokens ref_tokens args nr_args ? 4 * + = ;

# tcc_cc.c 1739
                            nr_args $ ? 1 + = 1 - ;
                            int 5 stack
                            int stack_depth stack_depth 0 = ;

# tcc_cc.c 1742
                            do
                            {
                                stack_depth ? 0 >s || { source_it ->s11_m_kind ? 0 != && { source_it ->s11_m_kind ? 44 != } && { source_it ->s11_m_kind ? 41 != } } ! if { break }
# tcc_cc.c 1743
# tcc_cc.c 1744
                                ref_tokens ? source_it ? new_token_from_it () = ;
# tcc_cc.c 1745
                                ref_tokens ref_tokens ? ->s13_m_next = ;
# tcc_cc.c 1746
                                source_it ->s11_m_kind ? 40 == if
                                {
# tcc_cc.c 1747
                                    stack stack_depth $ ? 1 + = 1 - + 41 =1 ;
                                }
                                else
                                {
# tcc_cc.c 1748
                                    source_it ->s11_m_kind ? 123 == if
                                    {
# tcc_cc.c 1749
                                        stack stack_depth $ ? 1 + = 1 - + 125 =1 ;
                                    }
                                    else
                                    {
# tcc_cc.c 1750
                                        source_it ->s11_m_kind ? 91 == if
                                        {
# tcc_cc.c 1751
                                            stack stack_depth $ ? 1 + = 1 - + 93 =1 ;
                                        }
                                        else
                                        {
# tcc_cc.c 1752
                                            stack_depth ? 0 >s && { source_it ->s11_m_kind ? stack stack_depth ? 1 - + ?1 char == } if
                                            {
# tcc_cc.c 1753
                                                stack_depth $ ? 1 - = 1 + ;
                                            }
                                        }
                                    }
                                }
# tcc_cc.c 1754
                                source_it source_it ? dummy ?1 char source_it ->s11_m_next ? () = ;
                            }
                            source_it ->s11_m_kind ? 44 == ! if { break }
                        }
                    }
# tcc_cc.c 1759
                    macro ->s14_m_nr_args ? nr_args ? != if
                    {
# tcc_cc.c 1760
# tcc_cc.c 1761
                        "ERROR: Number arguments (%d) for %s does not match parameters (%d)\n" { int 3 __var_args __var_args nr_args ? = ; __var_args 4 + macro ->s14_m_name ? = ; __var_args 8 + macro ->s14_m_nr_args ? = ; __var_args printf () } ;
# tcc_cc.c 1762
                        source_it source_it ? dummy ?1 char source_it ->s11_m_next ? () = ;
                    }
                    else
                    {
# tcc_cc.c 1764
                        macro ->s14_m_tokens ? 0 == if
                        {
# tcc_cc.c 1765
                            source_it source_it ? dummy ?1 char source_it ->s11_m_next ? () = ;
                        }
                        else
                        {
# tcc_cc.c 1767
                            source_it macro ? args source_it ? new_exapnd_macro_iterator () = ;
                        }
                    }
                }
            }
# tcc_cc.c 1770
            it ->s17_m__source_it source_it ? = ;
        }
    }
# tcc_cc.c 1773
    token_it ->s11_m_kind source_it ->s11_m_kind ? = ;
# tcc_cc.c 1774
    token_it ->s11_m_token source_it ->s11_m_token ? = ;
# tcc_cc.c 1775
    token_it ->s11_m_length source_it ->s11_m_length ? = ;
# tcc_cc.c 1776
    token_it ->s11_m_filename source_it ->s11_m_filename ? = ;
# tcc_cc.c 1777
    token_it ->s11_m_line source_it ->s11_m_line ? = ;
# tcc_cc.c 1778
    token_it ->s11_m_column source_it ->s11_m_column ? = ;
# tcc_cc.c 1780
    token_it ? return
    0 return
}
void new_expand_iterator
{
    int source_it source_it =:
    int it it 32 malloc () = ;

# tcc_cc.c 1786
    it ->s17_m__source_it source_it ? = ;
# tcc_cc.c 1787
    it ->s17_m_base s11_m_next + expand_iterator_next = ;
# tcc_cc.c 1788
    it ? return
    0 return
}
int token_it
void output_preprocessor
{
    int filename filename =:
    int fout fout filename ? "w" fopen () = ;

# tcc_cc.c 1798
    fout ? 0 == if
    {
# tcc_cc.c 1799
        0 return
    }
# tcc_cc.c 1800
    token_it token_it ? 1 token_it ->s11_m_next ? () = ;
    int prev_file prev_file 0 = ;

    int prev_line prev_line 0 = ;

# tcc_cc.c 1804
    do
    {
        token_it ->s11_m_kind ? 0 != ! if { break }
# tcc_cc.c 1805
# tcc_cc.c 1806
        token_it ->s11_m_filename ? prev_file ? != || { token_it ->s11_m_line ? prev_line ? != } if
        {
# tcc_cc.c 1807
# tcc_cc.c 1808
            fout ? "\n%s: %d" { int 2 __var_args __var_args token_it ->s11_m_filename ? = ; __var_args 4 + token_it ->s11_m_line ? = ; __var_args fprintf () } ;
# tcc_cc.c 1809
            {
                int i i 0 = ;

                do
                {
                    i ? token_it ->s11_m_column ? <s ! if { break }
# tcc_cc.c 1810
                    32 fout ? fputc () ;
                    i $ ? 1 + = 1 - ;
                }
            }
# tcc_cc.c 1811
            prev_file token_it ->s11_m_filename ? = ;
# tcc_cc.c 1812
            prev_line token_it ->s11_m_line ? = ;
        }
# tcc_cc.c 1814
        32 fout ? fputc () ;
# tcc_cc.c 1815
        token_it ->s11_m_kind ? 105 == if
        {
# tcc_cc.c 1816
# tcc_cc.c 1817
            token_it ->s11_m_token ? fout ? fputs () ;
        }
        else
        {
# tcc_cc.c 1819
            token_it ->s11_m_kind ? 34 == || { token_it ->s11_m_kind ? 39 == } if
            {
# tcc_cc.c 1820
                int strsep strsep token_it ->s11_m_kind ? =1 ;

# tcc_cc.c 1822
                strsep ?1 char fout ? fputc () ;
# tcc_cc.c 1823
                {
                    int i i 0 = ;

                    do
                    {
                        i ? token_it ->s11_m_length ? <s ! if { break }
# tcc_cc.c 1824
                        int ch ch token_it ->s11_m_token ? i ? + ?1 char =1 ;

# tcc_cc.c 1826
                        ch ?1 char 10 == if
                        {
# tcc_cc.c 1827
                            "\\n" fout ? fputs () ;
                        }
                        else
                        {
# tcc_cc.c 1828
                            ch ?1 char 13 == if
                            {
# tcc_cc.c 1829
                                "\\r" fout ? fputs () ;
                            }
                            else
                            {
# tcc_cc.c 1830
                                ch ?1 char 9 == if
                                {
# tcc_cc.c 1831
                                    "\\t" fout ? fputs () ;
                                }
                                else
                                {
# tcc_cc.c 1832
                                    ch ?1 char 0 == if
                                    {
# tcc_cc.c 1833
                                        "\\0" fout ? fputs () ;
                                    }
                                    else
                                    {
# tcc_cc.c 1834
                                        32 ch ?1 char <=s && { ch ?1 char 127 <s } if
                                        {
# tcc_cc.c 1835
                                            ch ?1 char fout ? fputc () ;
                                        }
                                        else
                                        {
# tcc_cc.c 1837
# tcc_cc.c 1838
                                            "\\" fout ? fputs () ;
# tcc_cc.c 1839
                                            ch ?1 char fout ? fputc () ;
                                        }
                                    }
                                }
                            }
                        }
                        i i ? 1 + = ;
                    }
                }
# tcc_cc.c 1842
                strsep ?1 char fout ? fputc () ;
            }
            else
            {
# tcc_cc.c 1844
                token_it ->s11_m_kind ? 48 == if
                {
# tcc_cc.c 1845
# tcc_cc.c 1846
                    token_it ->s11_m_token ? fout ? fputs () ;
                }
                else
                {
# tcc_cc.c 1848
                    token_it ->s11_m_kind ? 127 <s if
                    {
# tcc_cc.c 1849
# tcc_cc.c 1850
                        token_it ->s11_m_kind ? fout ? fputc () ;
                    }
                    else
                    {
# tcc_cc.c 1852
                        token_it ->s11_m_kind ? 1000 >=s if
                        {
# tcc_cc.c 1853
                            token_it ->s11_m_token ? fout ? fputs () ;
                        }
                        else
                        {
# tcc_cc.c 1854
                            token_it ->s11_m_kind ? 500 == if
                            {
# tcc_cc.c 1854
                                "##" fout ? fputs () ;
                            }
                            else
                            {
# tcc_cc.c 1855
                                token_it ->s11_m_kind ? 501 == if
                                {
# tcc_cc.c 1855
                                    "==" fout ? fputs () ;
                                }
                                else
                                {
# tcc_cc.c 1856
                                    token_it ->s11_m_kind ? 502 == if
                                    {
# tcc_cc.c 1856
                                        "!=" fout ? fputs () ;
                                    }
                                    else
                                    {
# tcc_cc.c 1857
                                        token_it ->s11_m_kind ? 503 == if
                                        {
# tcc_cc.c 1857
                                            "<=" fout ? fputs () ;
                                        }
                                        else
                                        {
# tcc_cc.c 1858
                                            token_it ->s11_m_kind ? 504 == if
                                            {
# tcc_cc.c 1858
                                                ">=" fout ? fputs () ;
                                            }
                                            else
                                            {
# tcc_cc.c 1859
                                                token_it ->s11_m_kind ? 505 == if
                                                {
# tcc_cc.c 1859
                                                    "++" fout ? fputs () ;
                                                }
                                                else
                                                {
# tcc_cc.c 1860
                                                    token_it ->s11_m_kind ? 506 == if
                                                    {
# tcc_cc.c 1860
                                                        "--" fout ? fputs () ;
                                                    }
                                                    else
                                                    {
# tcc_cc.c 1861
                                                        token_it ->s11_m_kind ? 507 == if
                                                        {
# tcc_cc.c 1861
                                                            "->" fout ? fputs () ;
                                                        }
                                                        else
                                                        {
# tcc_cc.c 1862
                                                            token_it ->s11_m_kind ? 600 42 + == if
                                                            {
# tcc_cc.c 1862
                                                                "*=" fout ? fputs () ;
                                                            }
                                                            else
                                                            {
# tcc_cc.c 1863
                                                                token_it ->s11_m_kind ? 600 47 + == if
                                                                {
# tcc_cc.c 1863
                                                                    "/=" fout ? fputs () ;
                                                                }
                                                                else
                                                                {
# tcc_cc.c 1864
                                                                    token_it ->s11_m_kind ? 600 37 + == if
                                                                    {
# tcc_cc.c 1864
                                                                        "%%=" fout ? fputs () ;
                                                                    }
                                                                    else
                                                                    {
# tcc_cc.c 1865
                                                                        token_it ->s11_m_kind ? 600 43 + == if
                                                                        {
# tcc_cc.c 1865
                                                                            "+=" fout ? fputs () ;
                                                                        }
                                                                        else
                                                                        {
# tcc_cc.c 1866
                                                                            token_it ->s11_m_kind ? 600 45 + == if
                                                                            {
# tcc_cc.c 1866
                                                                                "-=" fout ? fputs () ;
                                                                            }
                                                                            else
                                                                            {
# tcc_cc.c 1867
                                                                                token_it ->s11_m_kind ? 600 60 + == if
                                                                                {
# tcc_cc.c 1867
                                                                                    "<<=" fout ? fputs () ;
                                                                                }
                                                                                else
                                                                                {
# tcc_cc.c 1868
                                                                                    token_it ->s11_m_kind ? 600 62 + == if
                                                                                    {
# tcc_cc.c 1868
                                                                                        ">>=" fout ? fputs () ;
                                                                                    }
                                                                                    else
                                                                                    {
# tcc_cc.c 1869
                                                                                        token_it ->s11_m_kind ? 600 94 + == if
                                                                                        {
# tcc_cc.c 1869
                                                                                            "^=" fout ? fputs () ;
                                                                                        }
                                                                                        else
                                                                                        {
# tcc_cc.c 1870
                                                                                            token_it ->s11_m_kind ? 600 38 + == if
                                                                                            {
# tcc_cc.c 1870
                                                                                                "&=" fout ? fputs () ;
                                                                                            }
                                                                                            else
                                                                                            {
# tcc_cc.c 1871
                                                                                                token_it ->s11_m_kind ? 600 124 + == if
                                                                                                {
# tcc_cc.c 1871
                                                                                                    "|=" fout ? fputs () ;
                                                                                                }
                                                                                                else
                                                                                                {
# tcc_cc.c 1872
                                                                                                    token_it ->s11_m_kind ? 800 60 + == if
                                                                                                    {
# tcc_cc.c 1872
                                                                                                        "<<" fout ? fputs () ;
                                                                                                    }
                                                                                                    else
                                                                                                    {
# tcc_cc.c 1873
                                                                                                        token_it ->s11_m_kind ? 800 62 + == if
                                                                                                        {
# tcc_cc.c 1873
                                                                                                            ">>" fout ? fputs () ;
                                                                                                        }
                                                                                                        else
                                                                                                        {
# tcc_cc.c 1874
                                                                                                            token_it ->s11_m_kind ? 800 38 + == if
                                                                                                            {
# tcc_cc.c 1874
                                                                                                                "&&" fout ? fputs () ;
                                                                                                            }
                                                                                                            else
                                                                                                            {
# tcc_cc.c 1875
                                                                                                                token_it ->s11_m_kind ? 800 124 + == if
                                                                                                                {
# tcc_cc.c 1875
                                                                                                                    "||" fout ? fputs () ;
                                                                                                                }
                                                                                                                else
                                                                                                                {
# tcc_cc.c 1876
                                                                                                                    "????" fout ? fputs () ;
                                                                                                                }
                                                                                                            }
                                                                                                        }
                                                                                                    }
                                                                                                }
                                                                                            }
                                                                                        }
                                                                                    }
                                                                                }
                                                                            }
                                                                        }
                                                                    }
                                                                }
                                                            }
                                                        }
                                                    }
                                                }
                                            }
                                        }
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
# tcc_cc.c 1878
        token_it token_it ? 1 token_it ->s11_m_next ? () = ;
    }
# tcc_cc.c 1881
    fout ? "\n\nDone\n" 0 fprintf () ;
# tcc_cc.c 1882
    fout ? fclose () ;
    0 return
}
int BT_VOID
int BT_S8
int BT_U8
int BT_S16
int BT_U16
int BT_S32
int BT_U32
int BT_S64
int BT_U64
int BT_F
int BT_DF
int BT_JMP_BUF
int BT_FILE
int BT_TIME_T
int TYPE_KIND_BASE
int TYPE_KIND_STRUCT
int TYPE_KIND_UNION
int TYPE_KIND_POINTER
int TYPE_KIND_ARRAY
int TYPE_KIND_FUNCTION
const s18_m_kind 0
const s18_m_base_type 4
const s18_m_size 8
const s18_m_nr_members 12
const s18_m_members 16
const s18_m_nr_decls 20
const s18_m_decls 24
const s18_m_nr_elems 28
const s18_m_typedef_decl 32
void new_type
{
    int nr_members nr_members =:
    int size size =:
    int kind kind =:
    int type type 36 malloc () = ;

# tcc_cc.c 1939
    type ->s18_m_kind kind ? = ;
# tcc_cc.c 1940
    type ->s18_m_base_type 0 = ;
# tcc_cc.c 1941
    type ->s18_m_size size ? = ;
# tcc_cc.c 1942
    type ->s18_m_nr_members nr_members ? = ;
# tcc_cc.c 1943
    nr_members ? 0 >s if
    {
# tcc_cc.c 1944
# tcc_cc.c 1945
        type ->s18_m_members nr_members ? 4 * malloc () = ;
# tcc_cc.c 1946
        {
            int i i 0 = ;

            do
            {
                i ? nr_members ? <s ! if { break }
# tcc_cc.c 1947
                type ->s18_m_members ? i ? 4 * + 0 = ;
                i $ ? 1 + = 1 - ;
            }
        }
    }
    else
    {
# tcc_cc.c 1950
        type ->s18_m_members 0 = ;
    }
# tcc_cc.c 1951
    type ->s18_m_nr_decls 0 = ;
# tcc_cc.c 1952
    type ->s18_m_decls 0 = ;
# tcc_cc.c 1953
    type ->s18_m_nr_elems 0 = ;
# tcc_cc.c 1954
    type ->s18_m_typedef_decl 0 = ;
# tcc_cc.c 1955
    type ? return
    0 return
}
void type_is_integer
{
    int type type =:
# tcc_cc.c 1960
    type ? 0 != && { type ->s18_m_kind ? TYPE_KIND_BASE ? == } && { type ->s18_m_base_type ? 1 & 1 == } return
    0 return
}
void type_is_signed_integer
{
    int type type =:
# tcc_cc.c 1965
    type ? 0 != && { type ->s18_m_kind ? TYPE_KIND_BASE ? == } && { type ->s18_m_base_type ? 3 & 3 == } return
    0 return
}
void type_is_pointer
{
    int type type =:
# tcc_cc.c 1970
    type ? 0 != && { type ->s18_m_kind ? TYPE_KIND_POINTER ? == || { type ->s18_m_kind ? TYPE_KIND_ARRAY ? == } } return
    0 return
}
void type_set_decls
{
    int decls decls =:
    int nr_decls nr_decls =:
    int type type =:
# tcc_cc.c 1975
    nr_decls ? type ->s18_m_nr_decls ? >=s if
    {
# tcc_cc.c 1976
# tcc_cc.c 1977
        type ->s18_m_nr_decls nr_decls ? = ;
# tcc_cc.c 1978
        type ->s18_m_decls nr_decls ? 4 * malloc () = ;
    }
# tcc_cc.c 1980
    {
        int i i 0 = ;

        do
        {
            i ? nr_decls ? <s ! if { break }
# tcc_cc.c 1981
            type ->s18_m_decls ? i ? 4 * + decls ? i ? 4 * + ? = ;
            i $ ? 1 + = 1 - ;
        }
    }
    0 return
}
int base_type_void
int base_type_S8
int base_type_U8
int base_type_S16
int base_type_U16
int base_type_S32
int base_type_U32
int base_type_S64
int base_type_U64
int base_type_float
int base_type_double
int base_type_jmp_buf
int base_type_file
int base_type_time_t
int base_type_bool
int type_char_ptr
void new_base_type
{
    int base base =:
    int size size 4 = ;

# tcc_cc.c 2004
    base ? 2 >> do
    {
        $ 1 == if
        {
            ;
# tcc_cc.c 2006
            size 1 = ;
# tcc_cc.c 2006
            break
# tcc_cc.c 2007
        }
        $ 2 == if
        {
            ;
# tcc_cc.c 2007
            size 2 = ;
# tcc_cc.c 2007
            break
# tcc_cc.c 2008
        }
        $ 3 == if
        {
            ;
# tcc_cc.c 2008
            size 4 = ;
# tcc_cc.c 2008
            break
# tcc_cc.c 2009
        }
        $ 4 == if
        {
            ;
# tcc_cc.c 2009
            size 4 = ;
# tcc_cc.c 2009
            break
# tcc_cc.c 2010
        }
        $ 5 == if
        {
            ;
# tcc_cc.c 2010
            size 4 = ;
# tcc_cc.c 2010
            break
# tcc_cc.c 2011
        }
        $ 6 == if
        {
            ;
# tcc_cc.c 2011
            size 4 = ;
# tcc_cc.c 2011
            break
# tcc_cc.c 2012
        }
        ; break
    }
    int type type TYPE_KIND_BASE ? size ? 0 new_type () = ;

# tcc_cc.c 2014
    type ->s18_m_base_type base ? = ;
# tcc_cc.c 2015
    type ? return
    0 return
}
void define_base_types
{
# tcc_cc.c 2020
    base_type_void BT_VOID ? new_base_type () = ;
# tcc_cc.c 2021
    base_type_S8 BT_S8 ? new_base_type () = ;
# tcc_cc.c 2022
    base_type_U8 BT_U8 ? new_base_type () = ;
# tcc_cc.c 2023
    base_type_S16 BT_S16 ? new_base_type () = ;
# tcc_cc.c 2024
    base_type_U16 BT_U16 ? new_base_type () = ;
# tcc_cc.c 2025
    base_type_S32 BT_S32 ? new_base_type () = ;
# tcc_cc.c 2026
    base_type_U32 BT_U32 ? new_base_type () = ;
# tcc_cc.c 2027
    base_type_S64 BT_S64 ? new_base_type () = ;
# tcc_cc.c 2028
    base_type_U64 BT_U64 ? new_base_type () = ;
# tcc_cc.c 2029
    base_type_float BT_F ? new_base_type () = ;
# tcc_cc.c 2030
    base_type_double BT_DF ? new_base_type () = ;
# tcc_cc.c 2031
    base_type_jmp_buf BT_JMP_BUF ? new_base_type () = ;
# tcc_cc.c 2032
    base_type_file BT_FILE ? new_base_type () = ;
# tcc_cc.c 2033
    base_type_time_t BT_TIME_T ? new_base_type () = ;
# tcc_cc.c 2034
    base_type_bool BT_U32 ? new_base_type () = ;
# tcc_cc.c 2035
    type_char_ptr TYPE_KIND_POINTER ? 4 1 new_type () = ;
# tcc_cc.c 2036
    type_char_ptr ->s18_m_members ? 0 4 * + base_type_S8 ? = ;
    0 return
}
void base_signed_type
{
    int int_type int_type =:
# tcc_cc.c 2041
    int_type ? base_type_U8 ? == if
    {
# tcc_cc.c 2042
        base_type_S8 ? return
    }
# tcc_cc.c 2043
    int_type ? base_type_U16 ? == if
    {
# tcc_cc.c 2044
        base_type_S16 ? return
    }
# tcc_cc.c 2045
    int_type ? base_type_U32 ? == if
    {
# tcc_cc.c 2046
        base_type_S32 ? return
    }
# tcc_cc.c 2047
    int_type ? base_type_U64 ? == if
    {
# tcc_cc.c 2048
        base_type_S64 ? return
    }
# tcc_cc.c 2049
    int_type ? return
    0 return
}
const s19_m_kind 0
const s19_m_int_val 4
const s19_m_str_val 8
const s19_m_type 12
const s19_m_filename 16
const s19_m_line 20
const s19_m_column 24
const s19_m_nr_children 28
const s19_m_children 32
int 26 token_it_pos_buffer
void token_it_pos
{
# tcc_cc.c 2087
    token_it_pos_buffer 100 "%s: %d.%d" { int 3 __var_args __var_args token_it ->s11_m_filename ? = ; __var_args 4 + token_it ->s11_m_line ? = ; __var_args 8 + token_it ->s11_m_column ? = ; __var_args snprintf () } ;
# tcc_cc.c 2088
    token_it_pos_buffer 100 + 0 =1 ;
# tcc_cc.c 2089
    token_it_pos_buffer return
    0 return
}
int filename_for_expr
int line_for_expr
int column_for_expr
void store_pos_for_expr
{
# tcc_cc.c 2099
    filename_for_expr token_it ->s11_m_filename ? = ;
# tcc_cc.c 2100
    line_for_expr token_it ->s11_m_line ? = ;
# tcc_cc.c 2101
    column_for_expr token_it ->s11_m_column ? = ;
    0 return
}
int 26 expr_pos_buffer
void expr_pos
{
    int expr expr =:
# tcc_cc.c 2108
    expr ->s19_m_kind ? 32 >s && { expr ->s19_m_kind ? 127 <s } if
    {
# tcc_cc.c 2109
        expr_pos_buffer 100 "%s: %d.%d expr '%c " { int 4 __var_args __var_args expr ->s19_m_filename ? = ; __var_args 4 + expr ->s19_m_line ? = ; __var_args 8 + expr ->s19_m_column ? = ; __var_args 12 + expr ->s19_m_kind ? = ; __var_args snprintf () } ;
    }
    else
    {
# tcc_cc.c 2111
        expr_pos_buffer 100 "%s: %d.%d expr %d " { int 4 __var_args __var_args expr ->s19_m_filename ? = ; __var_args 4 + expr ->s19_m_line ? = ; __var_args 8 + expr ->s19_m_column ? = ; __var_args 12 + expr ->s19_m_kind ? = ; __var_args snprintf () } ;
    }
# tcc_cc.c 2112
    expr_pos_buffer 100 + 0 =1 ;
# tcc_cc.c 2113
    expr_pos_buffer return
    0 return
}
void new_expr
{
    int nr_children nr_children =:
    int kind kind =:
    int expr expr 32 nr_children ? 4 * + malloc () = ;

# tcc_cc.c 2131
    expr ->s19_m_kind kind ? = ;
# tcc_cc.c 2132
    expr ->s19_m_int_val 0 = ;
# tcc_cc.c 2133
    expr ->s19_m_str_val 0 = ;
# tcc_cc.c 2134
    expr ->s19_m_nr_children nr_children ? = ;
# tcc_cc.c 2135
    {
        int i i 0 = ;

        do
        {
            i ? nr_children ? <s ! if { break }
# tcc_cc.c 2136
            expr ->s19_m_children i ? 4 * + 0 = ;
            i $ ? 1 + = 1 - ;
        }
    }
# tcc_cc.c 2137
    expr ->s19_m_type 0 = ;
# tcc_cc.c 2139
    expr ->s19_m_filename filename_for_expr ? = ;
# tcc_cc.c 2140
    expr ->s19_m_line line_for_expr ? = ;
# tcc_cc.c 2141
    expr ->s19_m_column column_for_expr ? = ;
# tcc_cc.c 2143
    expr ? return
    0 return
}
void new_expr_int_value
{
    int value value =:
    int expr expr 48 0 new_expr () = ;

# tcc_cc.c 2149
    expr ->s19_m_int_val value ? = ;
# tcc_cc.c 2150
    expr ->s19_m_type base_type_S32 ? = ;
# tcc_cc.c 2151
    expr ? return
    0 return
}
void expr_is_pointer_size_gt_1
{
    int expr expr =:
# tcc_cc.c 2156
    expr ->s19_m_type ? type_is_pointer () && { expr ->s19_m_type ->s18_m_members ? 0 4 * + ->s18_m_size ? 1 >s } return
    0 return
}
void expr_inc_dec_value
{
    int expr expr =:
# tcc_cc.c 2161
    expr ->s19_m_type ? type_is_pointer () if { expr ->s19_m_type ->s18_m_members ? 0 4 * + ->s18_m_size ? } else { 1 } return
    0 return
}
void expr_print
{
    int expr expr =:
    int f f =:
# tcc_cc.c 2166
    expr ? 0 == if
    {
# tcc_cc.c 2167
# tcc_cc.c 2168
        f ? "NULL" 0 fprintf () ;
# tcc_cc.c 2169
        0 return
    }
# tcc_cc.c 2171
    32 expr ->s19_m_kind ? <s && { expr ->s19_m_kind ? 127 <s } if
    {
# tcc_cc.c 2172
        f ? "%c(" { int 1 __var_args __var_args expr ->s19_m_kind ? = ; __var_args fprintf () } ;
    }
    else
    {
# tcc_cc.c 2174
        f ? "%d(" { int 1 __var_args __var_args expr ->s19_m_kind ? = ; __var_args fprintf () } ;
    }
# tcc_cc.c 2175
    {
        int i i 0 = ;

        do
        {
            i ? expr ->s19_m_nr_children ? <s ! if { break }
# tcc_cc.c 2176
# tcc_cc.c 2177
            i ? 0 >s if
            {
# tcc_cc.c 2178
                f ? ", " 0 fprintf () ;
            }
# tcc_cc.c 2179
            f ? expr ->s19_m_children i ? 4 * + ? expr_print () ;
            i $ ? 1 + = 1 - ;
        }
    }
# tcc_cc.c 2181
    f ? ")" 0 fprintf () ;
    0 return
}
int DK_IDENT
int DK_STRUCT
int DK_UNION
int DK_ENUM
int ST_NONE
int ST_STATIC
int ST_TYPEDEF
int ST_CONST
const s20_m_kind 0
const s20_m_name 4
const s20_m_type 8
const s20_m_storage_type 12
const s20_m_value 16
const s20_m_pos 20
const s20_m_su_nr 24
const s20_m_prev 28
int trace_decls
int cur_ident_decls
int cur_decls
void add_decl
{
    int type type =:
    int name name =:
    int kind kind =:
# tcc_cc.c 2219
    trace_decls ?1 char if
    {
# tcc_cc.c 2220
# tcc_cc.c 2221
        "add_decl '%s' %d" { int 2 __var_args __var_args name ? = ; __var_args 4 + kind ? = ; __var_args printf () } ;
# tcc_cc.c 2222
        type ? 0 != if
        {
# tcc_cc.c 2223
            " Type %d" { int 1 __var_args __var_args type ->s18_m_kind ? = ; __var_args printf () } ;
        }
# tcc_cc.c 2224
        "\n" 0 printf () ;
    }
    int decl decl 32 malloc () = ;

# tcc_cc.c 2227
    decl ->s20_m_kind kind ? = ;
# tcc_cc.c 2228
    decl ->s20_m_name name ? copystr () = ;
# tcc_cc.c 2229
    decl ->s20_m_type type ? = ;
# tcc_cc.c 2230
    decl ->s20_m_storage_type ST_NONE ? = ;
# tcc_cc.c 2231
    decl ->s20_m_value 0 = ;
# tcc_cc.c 2232
    decl ->s20_m_pos 0 = ;
# tcc_cc.c 2233
    decl ->s20_m_su_nr 0 = ;
# tcc_cc.c 2234
    kind ? DK_IDENT ? == if
    {
# tcc_cc.c 2235
# tcc_cc.c 2236
        decl ->s20_m_prev cur_ident_decls ? = ;
# tcc_cc.c 2237
        cur_ident_decls decl ? = ;
    }
    else
    {
# tcc_cc.c 2240
# tcc_cc.c 2241
        decl ->s20_m_prev cur_decls ? = ;
# tcc_cc.c 2242
        cur_decls decl ? = ;
    }
# tcc_cc.c 2244
    decl ? return
    0 return
}
void remove_decl
{
    int decl decl =:
# tcc_cc.c 2249
    {
        int ref_decl ref_decl cur_decls = ;

        do
        {
            ref_decl ? ? 0 != ! if { break }
# tcc_cc.c 2250
            ref_decl ? ? decl ? == if
            {
# tcc_cc.c 2251
# tcc_cc.c 2252
                ref_decl ? ref_decl ? ->s20_m_prev ? = ;
# tcc_cc.c 2253
                break
            }
            ref_decl ref_decl ? ->s20_m_prev = ;
        }
    }
    0 return
}
void add_decl_clone
{
    int decl decl =:
    int decl_clone decl_clone decl ->s20_m_kind ? decl ->s20_m_name ? decl ->s20_m_type ? add_decl () = ;

# tcc_cc.c 2260
    decl_clone ->s20_m_storage_type decl ->s20_m_storage_type ? = ;
    0 return
}
void find_decl
{
    int name name =:
    int kind kind =:
# tcc_cc.c 2265
    {
        int decls decls kind ? DK_IDENT ? == if { cur_ident_decls ? } else { cur_decls ? } = ;

        do
        {
            decls ? 0 != ! if { break }
# tcc_cc.c 2266
            decls ->s20_m_name ? name ? strcmp () 0 == if
            {
# tcc_cc.c 2267
                decls ? return
            }
            decls decls ->s20_m_prev ? = ;
        }
    }
# tcc_cc.c 2268
    0 return
    0 return
}
void find_or_add_decl
{
    int name name =:
    int kind kind =:
    int decl decl kind ? name ? find_decl () = ;

# tcc_cc.c 2274
    decl ? 0 != if
    {
# tcc_cc.c 2275
        decl ? return
    }
# tcc_cc.c 2276
    kind ? name ? 0 add_decl () return
    0 return
}
const s21_m_name 0
const s21_m_next 4
int cur_labels
void find_label
{
    int name name =:
# tcc_cc.c 2292
    {
        int label label cur_labels ? = ;

        do
        {
            label ? 0 != ! if { break }
# tcc_cc.c 2293
            label ->s21_m_name ? name ? strcmp () 0 == if
            {
# tcc_cc.c 2294
                label ? return
            }
            label label ->s21_m_next ? = ;
        }
    }
# tcc_cc.c 2295
    0 return
    0 return
}
void find_or_add_label
{
    int name name =:
    int label label name ? find_label () = ;

# tcc_cc.c 2301
    label ? 0 != if
    {
# tcc_cc.c 2302
        label ? return
    }
# tcc_cc.c 2303
    label 8 malloc () = ;
# tcc_cc.c 2304
    label ->s21_m_name name ? copystr () = ;
# tcc_cc.c 2305
    label ->s21_m_next cur_labels ? = ;
# tcc_cc.c 2306
    cur_labels label ? = ;
# tcc_cc.c 2307
    label ? return
    0 return
}
void expr_eval
{
    int expr expr =:
# tcc_cc.c 2314
    expr ->s19_m_kind ? do
    {
        $ 48 == if
        {
            ;
# tcc_cc.c 2316
            expr ->s19_m_int_val ? return
# tcc_cc.c 2317
        }
        $ 43 == if
        {
            ;
# tcc_cc.c 2317
            expr ->s19_m_children 0 4 * + ? expr_eval () expr ->s19_m_children 1 4 * + ? expr_eval () + return
# tcc_cc.c 2318
        }
        $ 45 == if
        {
            ;
# tcc_cc.c 2318
            expr ->s19_m_children 0 4 * + ? expr_eval () expr ->s19_m_children 1 4 * + ? expr_eval () - return
# tcc_cc.c 2319
        }
        $ 47 == if
        {
            ;
# tcc_cc.c 2319
            expr ->s19_m_children 0 4 * + ? expr_eval () expr ->s19_m_children 1 4 * + ? expr_eval () /s return
# tcc_cc.c 2320
        }
        $ 124 == if
        {
            ;
# tcc_cc.c 2320
            expr ->s19_m_children 0 4 * + ? expr_eval () expr ->s19_m_children 1 4 * + ? expr_eval () | return
# tcc_cc.c 2321
        }
        $ 2005 == if
        {
            ;
# tcc_cc.c 2321
            0 expr ->s19_m_children 0 4 * + ? expr_eval () - return
# tcc_cc.c 2322
        }
        $ 860 == if
        {
            ;
# tcc_cc.c 2322
            expr ->s19_m_children 0 4 * + ? expr_eval () expr ->s19_m_children 1 4 * + ? expr_eval () << return
# tcc_cc.c 2323
        }
        $ 105 == if
        {
            ;
# tcc_cc.c 2324
            {
                int expr_decl expr_decl DK_IDENT ? expr ->s19_m_str_val ? find_decl () = ;

# tcc_cc.c 2326
                expr_decl ->s20_m_storage_type ? ST_CONST ? == && { expr_decl ->s20_m_value ->s19_m_type ? type_is_integer () } if
                {
# tcc_cc.c 2328
                    expr_decl ->s20_m_value ->s19_m_int_val ? return
                }
# tcc_cc.c 2329
                "Error: storage type of %s = %d\n" { int 2 __var_args __var_args expr ->s19_m_str_val ? = ; __var_args 4 + expr_decl ->s20_m_storage_type ? = ; __var_args printf () } ;
# tcc_cc.c 2330
                break
            }
# tcc_cc.c 2332
            break
        }
        ; break
    }
# tcc_cc.c 2333
    "%s Error: expr_eval\n" { int 1 __var_args __var_args expr ? expr_pos () = ; __var_args printf () } ;
# tcc_cc.c 2334
    1 exit () ;
# tcc_cc.c 2335
    0 return
    0 return
}
void expr_type_member
{
    int nr nr =:
    int expr expr =:
# tcc_cc.c 2342
    expr ->s19_m_type ? 0 != && { nr ? expr ->s19_m_type ->s18_m_nr_members ? <s } if
    {
# tcc_cc.c 2343
        expr ->s19_m_type ->s18_m_members ? nr ? 4 * + ? return
    }
# tcc_cc.c 2344
    expr ->s19_m_kind ? 105 == if
    {
# tcc_cc.c 2345
        "%s: Error identifier '%s': " { int 2 __var_args __var_args expr ? expr_pos () = ; __var_args 4 + expr ->s19_m_str_val ? = ; __var_args printf () } ;
    }
    else
    {
# tcc_cc.c 2347
        "%s: Error expression: " { int 1 __var_args __var_args expr ? expr_pos () = ; __var_args printf () } ;
    }
# tcc_cc.c 2348
    expr ->s19_m_type ? 0 == if
    {
# tcc_cc.c 2349
        "Has no type\n" 0 printf () ;
    }
    else
    {
# tcc_cc.c 2351
        "Type has no member %d (%d)\n" { int 2 __var_args __var_args nr ? = ; __var_args 4 + expr ->s19_m_type ->s18_m_nr_members ? = ; __var_args printf () } ;
    }
# tcc_cc.c 2352
    0 return
    0 return
}
void type_decl
{
    int name name =:
    int type type =:
# tcc_cc.c 2357
    {
        int i i 0 = ;

        do
        {
            i ? type ->s18_m_nr_decls ? <s ! if { break }
# tcc_cc.c 2358
            type ->s18_m_decls ? i ? 4 * + ? 0 != && { type ->s18_m_decls ? i ? 4 * + ->s20_m_name ? name ? strcmp () 0 == } if
            {
# tcc_cc.c 2359
                type ->s18_m_decls ? i ? 4 * + ? return
            }
            i $ ? 1 + = 1 - ;
        }
    }
# tcc_cc.c 2360
    stderr ? "%s: Error Type %p has no field %s\n" { int 3 __var_args __var_args token_it_pos () = ; __var_args 4 + type ? = ; __var_args 8 + name ? = ; __var_args fprintf () } ;
# tcc_cc.c 2361
    0 return
    0 return
}
void expr_type_decl
{
    int name name =:
    int expr expr =:
# tcc_cc.c 2366
    expr ->s19_m_type ? 0 != if
    {
# tcc_cc.c 2367
        int decl decl expr ->s19_m_type ? name ? type_decl () = ;

# tcc_cc.c 2369
        decl ? 0 != if
        {
# tcc_cc.c 2370
            decl ? return
        }
    }
# tcc_cc.c 2372
    "%s: Error expression: " { int 1 __var_args __var_args expr ? expr_pos () = ; __var_args printf () } ;
# tcc_cc.c 2373
    expr ->s19_m_type ? 0 == if
    {
# tcc_cc.c 2374
        "Has no type\n" 0 printf () ;
    }
    else
    {
# tcc_cc.c 2376
# tcc_cc.c 2377
        "Type %p has no field %s\n" { int 2 __var_args __var_args expr ->s19_m_type ? = ; __var_args 4 + name ? = ; __var_args printf () } ;
    }
# tcc_cc.c 2379
    0 return
    0 return
}
void gen_start_struct_or_union ;
void gen_struct_or_union_member ;
void gen_variable_decl ;
void gen_function_start ;
void gen_function_end ;
void gen_stats_open ;
void gen_stats_close ;
void gen_stat_expr ;
void gen_expr ;
void gen_indent ;
int fcode
void next_token
{
# tcc_cc.c 2401
    store_pos_for_expr () ;
# tcc_cc.c 2402
    token_it token_it ? 0 token_it ->s11_m_next ? () = ;
    0 return
}
void accept_term
{
    int kind kind =:
# tcc_cc.c 2407
    token_it ->s11_m_kind ? kind ? == if
    {
# tcc_cc.c 2408
# tcc_cc.c 2409
        next_token () ;
# tcc_cc.c 2410
        1 return
    }
# tcc_cc.c 2412
    0 return
    0 return
}
void parse_expr ;
void parse_type_specifier ;
void parse_unary_expr ;
int 2000 strbuf
void parse_primary_expr
{
# tcc_cc.c 2438
    token_it ->s11_m_kind ? 105 == if
    {
# tcc_cc.c 2439
        int decl decl DK_IDENT ? token_it ->s11_m_token ? find_decl () = ;

# tcc_cc.c 2441
        decl ? 0 != && { decl ->s20_m_storage_type ? ST_TYPEDEF ? != } if
        {
# tcc_cc.c 2442
# tcc_cc.c 2443
            store_pos_for_expr () ;
            int expr expr 105 0 new_expr () = ;

# tcc_cc.c 2445
            expr ->s19_m_str_val token_it ->s11_m_token ? copystr () = ;
# tcc_cc.c 2446
            expr ->s19_m_type decl ->s20_m_type ? = ;
# tcc_cc.c 2447
            decl ->s20_m_type ? 0 == if
            {
# tcc_cc.c 2448
                "Identifier %s has no type\n" { int 1 __var_args __var_args expr ->s19_m_str_val ? = ; __var_args printf () } ;
            }
# tcc_cc.c 2449
            next_token () ;
# tcc_cc.c 2450
            expr ? return
        }
    }
# tcc_cc.c 2453
    token_it ->s11_m_kind ? 48 == if
    {
# tcc_cc.c 2454
# tcc_cc.c 2455
        store_pos_for_expr () ;
        int expr expr token_it ? token_it_int_value () new_expr_int_value () = ;

        int nr_L nr_L 0 = ;

# tcc_cc.c 2458
        {
            int s s token_it ->s11_m_token ? = ;

            do
            {
                s ? ?1 char 0 != ! if { break }
# tcc_cc.c 2459
                s ? ?1 char 76 == if
                {
# tcc_cc.c 2460
                    nr_L $ ? 1 + = 1 - ;
                }
                s $ ? 1 + = 1 - ;
            }
        }
# tcc_cc.c 2461
        expr ->s19_m_type nr_L ? 1 >s if { base_type_U64 ? } else { base_type_U32 ? } = ;
# tcc_cc.c 2462
        next_token () ;
# tcc_cc.c 2463
        expr ? return
    }
# tcc_cc.c 2465
    token_it ->s11_m_kind ? 39 == if
    {
# tcc_cc.c 2466
# tcc_cc.c 2467
        store_pos_for_expr () ;
        int expr expr token_it ->s11_m_token ? 0 + ?1 char new_expr_int_value () = ;

# tcc_cc.c 2469
        expr ->s19_m_type base_type_S8 ? = ;
# tcc_cc.c 2470
        next_token () ;
# tcc_cc.c 2471
        expr ? return
    }
# tcc_cc.c 2473
    token_it ->s11_m_kind ? 34 == if
    {
# tcc_cc.c 2474
# tcc_cc.c 2475
        store_pos_for_expr () ;
        int len len 0 = ;

# tcc_cc.c 2477
        do
        {
            token_it ->s11_m_kind ? 34 == ! if { break }
# tcc_cc.c 2478
# tcc_cc.c 2479
            len ? token_it ->s11_m_length ? + 8000 1 - <s if
            {
# tcc_cc.c 2480
                strbuf len ? + token_it ->s11_m_token ? token_it ->s11_m_length ? memcpy () ;
            }
# tcc_cc.c 2481
            len $ ? token_it ->s11_m_length ? + = ;
# tcc_cc.c 2482
            next_token () ;
        }
# tcc_cc.c 2484
        len ? 8000 1 - >=s if
        {
# tcc_cc.c 2485
# tcc_cc.c 2486
            "MAX_CONST_STRLEN < %d\n" { int 1 __var_args __var_args len ? 1 + = ; __var_args printf () } ;
# tcc_cc.c 2487
            1 exit () ;
        }
# tcc_cc.c 2489
        strbuf len ? + 0 =1 ;
        int expr expr 34 0 new_expr () = ;

# tcc_cc.c 2491
        expr ->s19_m_str_val len ? 1 + malloc () = ;
# tcc_cc.c 2492
        expr ->s19_m_type type_char_ptr ? = ;
# tcc_cc.c 2493
        expr ->s19_m_str_val ? strbuf len ? 1 + memcpy () ;
# tcc_cc.c 2494
        expr ->s19_m_int_val len ? = ;
# tcc_cc.c 2495
        expr ? return
    }
# tcc_cc.c 2497
    40 accept_term () if
    {
# tcc_cc.c 2498
        int type type 0 parse_type_specifier () = ;

# tcc_cc.c 2500
        type ? 0 != if
        {
# tcc_cc.c 2501
# tcc_cc.c 2502
            opt_trace_parser ?1 char if
            {
# tcc_cc.c 2503
                "Cast expr\n" 0 printf () ;
            }
# tcc_cc.c 2504
            do
            {
                42 accept_term () ! if { break }
# tcc_cc.c 2505
                int ptr_type ptr_type TYPE_KIND_POINTER ? 4 1 new_type () = ;

# tcc_cc.c 2507
                ptr_type ->s18_m_members ? 0 4 * + type ? = ;
# tcc_cc.c 2508
                type ptr_type ? = ;
            }
# tcc_cc.c 2510
            41 accept_term () ! if
            {
# tcc_cc.c 2416
# tcc_cc.c 2416
                opt_trace_parser ?1 char if
                {
# tcc_cc.c 2416
                    stderr ? "Fail in %s at %d\n" { int 2 __var_args __var_args "" = ; __var_args 4 + 0 = ; __var_args fprintf () } ;
                }
# tcc_cc.c 2416
                0 return
            }
            int subj_expr subj_expr parse_unary_expr () = ;

# tcc_cc.c 2513
            subj_expr ? 0 == if
            {
# tcc_cc.c 2416
# tcc_cc.c 2416
                opt_trace_parser ?1 char if
                {
# tcc_cc.c 2416
                    stderr ? "Fail in %s at %d\n" { int 2 __var_args __var_args "" = ; __var_args 4 + 0 = ; __var_args fprintf () } ;
                }
# tcc_cc.c 2416
                0 return
            }
# tcc_cc.c 2514
            int expr expr 99 1 new_expr () = ;

# tcc_cc.c 2516
            expr ->s19_m_children 0 4 * + subj_expr ? = ;
# tcc_cc.c 2517
            expr ->s19_m_type type ? = ;
# tcc_cc.c 2518
            expr ? return
        }
        int expr expr parse_expr () = ;

# tcc_cc.c 2521
        expr ? 0 == if
        {
# tcc_cc.c 2416
# tcc_cc.c 2416
            opt_trace_parser ?1 char if
            {
# tcc_cc.c 2416
                stderr ? "Fail in %s at %d\n" { int 2 __var_args __var_args "" = ; __var_args 4 + 0 = ; __var_args fprintf () } ;
            }
# tcc_cc.c 2416
            0 return
        }
# tcc_cc.c 2523
        41 accept_term () ! if
        {
# tcc_cc.c 2416
# tcc_cc.c 2416
            opt_trace_parser ?1 char if
            {
# tcc_cc.c 2416
                stderr ? "Fail in %s at %d\n" { int 2 __var_args __var_args "" = ; __var_args 4 + 0 = ; __var_args fprintf () } ;
            }
# tcc_cc.c 2416
            0 return
        }
# tcc_cc.c 2525
        expr ? return
    }
# tcc_cc.c 2416
    {
# tcc_cc.c 2416
        opt_trace_parser ?1 char if
        {
# tcc_cc.c 2416
            stderr ? "Fail in %s at %d\n" { int 2 __var_args __var_args "" = ; __var_args 4 + 0 = ; __var_args fprintf () } ;
        }
# tcc_cc.c 2416
        0 return
    }
    0 return
}
void parse_assignment_expr ;
void parse_postfix_expr
{
    int expr expr parse_primary_expr () = ;

# tcc_cc.c 2547
    expr ? 0 == if
    {
# tcc_cc.c 2416
# tcc_cc.c 2416
        opt_trace_parser ?1 char if
        {
# tcc_cc.c 2416
            stderr ? "Fail in %s at %d\n" { int 2 __var_args __var_args "" = ; __var_args 4 + 0 = ; __var_args fprintf () } ;
        }
# tcc_cc.c 2416
        0 return
    }
# tcc_cc.c 2549
    {
        do
        {
# tcc_cc.c 2550
            int subj_expr subj_expr expr ? = ;

# tcc_cc.c 2552
            91 accept_term () if
            {
# tcc_cc.c 2553
                int index_expr index_expr parse_expr () = ;

# tcc_cc.c 2555
                index_expr ? 0 == if
                {
# tcc_cc.c 2416
# tcc_cc.c 2416
                    opt_trace_parser ?1 char if
                    {
# tcc_cc.c 2416
                        stderr ? "Fail in %s at %d\n" { int 2 __var_args __var_args "" = ; __var_args 4 + 0 = ; __var_args fprintf () } ;
                    }
# tcc_cc.c 2416
                    0 return
                }
# tcc_cc.c 2557
                93 accept_term () ! if
                {
# tcc_cc.c 2416
# tcc_cc.c 2416
                    opt_trace_parser ?1 char if
                    {
# tcc_cc.c 2416
                        stderr ? "Fail in %s at %d\n" { int 2 __var_args __var_args "" = ; __var_args 4 + 0 = ; __var_args fprintf () } ;
                    }
# tcc_cc.c 2416
                    0 return
                }
# tcc_cc.c 2559
                expr 91 2 new_expr () = ;
# tcc_cc.c 2560
                expr ->s19_m_children 0 4 * + subj_expr ? = ;
# tcc_cc.c 2561
                expr ->s19_m_children 1 4 * + index_expr ? = ;
# tcc_cc.c 2562
                expr ->s19_m_type subj_expr ? 0 expr_type_member () = ;
            }
            else
            {
# tcc_cc.c 2564
                40 accept_term () if
                {
# tcc_cc.c 2565
                    int nr_children nr_children 1 = ;

                    int 20 children
# tcc_cc.c 2568
                    children 0 4 * + expr ? = ;
# tcc_cc.c 2569
                    token_it ->s11_m_kind ? 41 != if
                    {
# tcc_cc.c 2570
# tcc_cc.c 2571
                        do
                        {
# tcc_cc.c 2572
                            int child child parse_assignment_expr () = ;

# tcc_cc.c 2574
                            child ? 0 == if
                            {
# tcc_cc.c 2416
# tcc_cc.c 2416
                                opt_trace_parser ?1 char if
                                {
# tcc_cc.c 2416
                                    stderr ? "Fail in %s at %d\n" { int 2 __var_args __var_args "" = ; __var_args 4 + 0 = ; __var_args fprintf () } ;
                                }
# tcc_cc.c 2416
                                0 return
                            }
# tcc_cc.c 2576
                            children nr_children $ ? 1 + = 1 - 4 * + child ? = ;
                            44 accept_term () ! if { break }
                        }
                    }
# tcc_cc.c 2579
                    41 accept_term () ! if
                    {
# tcc_cc.c 2416
# tcc_cc.c 2416
                        opt_trace_parser ?1 char if
                        {
# tcc_cc.c 2416
                            stderr ? "Fail in %s at %d\n" { int 2 __var_args __var_args "" = ; __var_args 4 + 0 = ; __var_args fprintf () } ;
                        }
# tcc_cc.c 2416
                        0 return
                    }
# tcc_cc.c 2581
                    expr 40 nr_children ? new_expr () = ;
# tcc_cc.c 2582
                    {
                        int i i 0 = ;

                        do
                        {
                            i ? nr_children ? <s ! if { break }
# tcc_cc.c 2583
                            expr ->s19_m_children i ? 4 * + children i ? 4 * + ? = ;
                            i $ ? 1 + = 1 - ;
                        }
                    }
# tcc_cc.c 2584
                    expr ->s19_m_type subj_expr ? 0 expr_type_member () = ;
                }
                else
                {
# tcc_cc.c 2586
                    46 accept_term () if
                    {
# tcc_cc.c 2587
# tcc_cc.c 2588
                        token_it ->s11_m_kind ? 105 != if
                        {
# tcc_cc.c 2416
# tcc_cc.c 2416
                            opt_trace_parser ?1 char if
                            {
# tcc_cc.c 2416
                                stderr ? "Fail in %s at %d\n" { int 2 __var_args __var_args "" = ; __var_args 4 + 0 = ; __var_args fprintf () } ;
                            }
# tcc_cc.c 2416
                            0 return
                        }
# tcc_cc.c 2590
                        expr 46 1 new_expr () = ;
# tcc_cc.c 2591
                        expr ->s19_m_str_val token_it ->s11_m_token ? copystr () = ;
# tcc_cc.c 2592
                        expr ->s19_m_children 0 4 * + subj_expr ? = ;
                        int mem_decl mem_decl subj_expr ? token_it ->s11_m_token ? expr_type_decl () = ;

# tcc_cc.c 2594
                        mem_decl ? 0 != if
                        {
# tcc_cc.c 2595
# tcc_cc.c 2596
                            expr ->s19_m_type mem_decl ->s20_m_type ? = ;
# tcc_cc.c 2597
                            expr ->s19_m_int_val mem_decl ->s20_m_su_nr ? = ;
                        }
# tcc_cc.c 2599
                        next_token () ;
                    }
                    else
                    {
# tcc_cc.c 2601
                        507 accept_term () if
                        {
# tcc_cc.c 2602
# tcc_cc.c 2603
                            token_it ->s11_m_kind ? 105 != if
                            {
# tcc_cc.c 2416
# tcc_cc.c 2416
                                opt_trace_parser ?1 char if
                                {
# tcc_cc.c 2416
                                    stderr ? "Fail in %s at %d\n" { int 2 __var_args __var_args "" = ; __var_args 4 + 0 = ; __var_args fprintf () } ;
                                }
# tcc_cc.c 2416
                                0 return
                            }
# tcc_cc.c 2605
                            expr 507 1 new_expr () = ;
# tcc_cc.c 2606
                            expr ->s19_m_str_val token_it ->s11_m_token ? copystr () = ;
# tcc_cc.c 2607
                            expr ->s19_m_children 0 4 * + subj_expr ? = ;
# tcc_cc.c 2608
                            subj_expr ->s19_m_type ? 0 != && { subj_expr ->s19_m_type ->s18_m_kind ? TYPE_KIND_POINTER ? == } if
                            {
# tcc_cc.c 2609
                                int mem_decl mem_decl subj_expr ->s19_m_type ->s18_m_members ? 0 4 * + ? token_it ->s11_m_token ? type_decl () = ;

# tcc_cc.c 2611
                                mem_decl ? 0 != if
                                {
# tcc_cc.c 2612
# tcc_cc.c 2613
                                    expr ->s19_m_type mem_decl ->s20_m_type ? = ;
# tcc_cc.c 2614
                                    expr ->s19_m_int_val mem_decl ->s20_m_su_nr ? = ;
                                }
                            }
                            else
                            {
# tcc_cc.c 2618
                                "-> does not have pointer type\n" 0 printf () ;
                            }
# tcc_cc.c 2619
                            next_token () ;
                        }
                        else
                        {
# tcc_cc.c 2621
                            505 accept_term () if
                            {
# tcc_cc.c 2622
# tcc_cc.c 2623
                                expr 2000 1 new_expr () = ;
# tcc_cc.c 2624
                                expr ->s19_m_children 0 4 * + subj_expr ? = ;
# tcc_cc.c 2625
                                expr ->s19_m_type subj_expr ->s19_m_type ? = ;
                            }
                            else
                            {
# tcc_cc.c 2627
                                506 accept_term () if
                                {
# tcc_cc.c 2628
# tcc_cc.c 2629
                                    expr 2001 1 new_expr () = ;
# tcc_cc.c 2630
                                    expr ->s19_m_children 0 4 * + subj_expr ? = ;
# tcc_cc.c 2631
                                    expr ->s19_m_type subj_expr ->s19_m_type ? = ;
                                }
                                else
                                {
# tcc_cc.c 2634
                                    break
                                }
                            }
                        }
                    }
                }
            }
        }
    }
# tcc_cc.c 2636
    expr ->s19_m_type ? 0 == if
    {
# tcc_cc.c 2636
        "parse_postfix_expr has no type\n" 0 printf () ;
    }
# tcc_cc.c 2637
    expr ? return
    0 return
}
void parse_sizeof_type ;
void parse_unary_expr
{
# tcc_cc.c 2660
    505 accept_term () if
    {
# tcc_cc.c 2661
        int expr expr parse_unary_expr () = ;

# tcc_cc.c 2663
        expr ? 0 == if
        {
# tcc_cc.c 2416
# tcc_cc.c 2416
            opt_trace_parser ?1 char if
            {
# tcc_cc.c 2416
                stderr ? "Fail in %s at %d\n" { int 2 __var_args __var_args "" = ; __var_args 4 + 0 = ; __var_args fprintf () } ;
            }
# tcc_cc.c 2416
            0 return
        }
        int pre_oper_expr pre_oper_expr 2002 1 new_expr () = ;

# tcc_cc.c 2666
        pre_oper_expr ->s19_m_children 0 4 * + expr ? = ;
# tcc_cc.c 2667
        pre_oper_expr ->s19_m_type expr ->s19_m_type ? = ;
# tcc_cc.c 2668
        pre_oper_expr ? return
    }
# tcc_cc.c 2670
    506 accept_term () if
    {
# tcc_cc.c 2671
        int expr expr parse_unary_expr () = ;

# tcc_cc.c 2673
        expr ? 0 == if
        {
# tcc_cc.c 2416
# tcc_cc.c 2416
            opt_trace_parser ?1 char if
            {
# tcc_cc.c 2416
                stderr ? "Fail in %s at %d\n" { int 2 __var_args __var_args "" = ; __var_args 4 + 0 = ; __var_args fprintf () } ;
            }
# tcc_cc.c 2416
            0 return
        }
        int pre_oper_expr pre_oper_expr 2003 1 new_expr () = ;

# tcc_cc.c 2676
        pre_oper_expr ->s19_m_children 0 4 * + expr ? = ;
# tcc_cc.c 2677
        pre_oper_expr ->s19_m_type expr ->s19_m_type ? = ;
# tcc_cc.c 2678
        pre_oper_expr ? return
    }
# tcc_cc.c 2680
    38 accept_term () if
    {
# tcc_cc.c 2681
        int expr expr parse_unary_expr () = ;

# tcc_cc.c 2683
        expr ? 0 == if
        {
# tcc_cc.c 2416
# tcc_cc.c 2416
            opt_trace_parser ?1 char if
            {
# tcc_cc.c 2416
                stderr ? "Fail in %s at %d\n" { int 2 __var_args __var_args "" = ; __var_args 4 + 0 = ; __var_args fprintf () } ;
            }
# tcc_cc.c 2416
            0 return
        }
        int pre_oper_expr pre_oper_expr 2007 1 new_expr () = ;

# tcc_cc.c 2686
        pre_oper_expr ->s19_m_children 0 4 * + expr ? = ;
# tcc_cc.c 2687
        pre_oper_expr ->s19_m_type TYPE_KIND_POINTER ? 4 1 new_type () = ;
# tcc_cc.c 2688
        pre_oper_expr ->s19_m_type ->s18_m_members ? 0 4 * + expr ->s19_m_type ? = ;
# tcc_cc.c 2689
        pre_oper_expr ? return
    }
# tcc_cc.c 2691
    42 accept_term () if
    {
# tcc_cc.c 2692
        int expr expr parse_unary_expr () = ;

# tcc_cc.c 2694
        expr ? 0 == if
        {
# tcc_cc.c 2416
# tcc_cc.c 2416
            opt_trace_parser ?1 char if
            {
# tcc_cc.c 2416
                stderr ? "Fail in %s at %d\n" { int 2 __var_args __var_args "" = ; __var_args 4 + 0 = ; __var_args fprintf () } ;
            }
# tcc_cc.c 2416
            0 return
        }
        int pre_oper_expr pre_oper_expr 2006 1 new_expr () = ;

# tcc_cc.c 2697
        pre_oper_expr ->s19_m_children 0 4 * + expr ? = ;
# tcc_cc.c 2698
        pre_oper_expr ->s19_m_type expr ? 0 expr_type_member () = ;
# tcc_cc.c 2699
        pre_oper_expr ? return
    }
# tcc_cc.c 2701
    43 accept_term () if
    {
# tcc_cc.c 2702
        int expr expr parse_unary_expr () = ;

# tcc_cc.c 2704
        expr ? 0 == if
        {
# tcc_cc.c 2416
# tcc_cc.c 2416
            opt_trace_parser ?1 char if
            {
# tcc_cc.c 2416
                stderr ? "Fail in %s at %d\n" { int 2 __var_args __var_args "" = ; __var_args 4 + 0 = ; __var_args fprintf () } ;
            }
# tcc_cc.c 2416
            0 return
        }
        int pre_oper_expr pre_oper_expr 2004 1 new_expr () = ;

# tcc_cc.c 2707
        pre_oper_expr ->s19_m_children 0 4 * + expr ? = ;
# tcc_cc.c 2708
        pre_oper_expr ->s19_m_type expr ->s19_m_type ? = ;
# tcc_cc.c 2709
        pre_oper_expr ? return
    }
# tcc_cc.c 2711
    45 accept_term () if
    {
# tcc_cc.c 2712
        int expr expr parse_unary_expr () = ;

# tcc_cc.c 2714
        expr ? 0 == if
        {
# tcc_cc.c 2416
# tcc_cc.c 2416
            opt_trace_parser ?1 char if
            {
# tcc_cc.c 2416
                stderr ? "Fail in %s at %d\n" { int 2 __var_args __var_args "" = ; __var_args 4 + 0 = ; __var_args fprintf () } ;
            }
# tcc_cc.c 2416
            0 return
        }
# tcc_cc.c 2716
        expr ->s19_m_kind ? 48 == if
        {
# tcc_cc.c 2717
            int neg_num neg_num 0 expr ->s19_m_int_val ? - new_expr_int_value () = ;

# tcc_cc.c 2719
            neg_num ->s19_m_type expr ->s19_m_type ? base_signed_type () = ;
# tcc_cc.c 2720
            neg_num ? return
        }
        int pre_oper_expr pre_oper_expr 2005 1 new_expr () = ;

# tcc_cc.c 2723
        pre_oper_expr ->s19_m_children 0 4 * + expr ? = ;
# tcc_cc.c 2724
        pre_oper_expr ->s19_m_type expr ->s19_m_type ? = ;
# tcc_cc.c 2725
        pre_oper_expr ? return
    }
# tcc_cc.c 2727
    126 accept_term () if
    {
# tcc_cc.c 2728
        int expr expr parse_unary_expr () = ;

# tcc_cc.c 2730
        expr ? 0 == if
        {
# tcc_cc.c 2416
# tcc_cc.c 2416
            opt_trace_parser ?1 char if
            {
# tcc_cc.c 2416
                stderr ? "Fail in %s at %d\n" { int 2 __var_args __var_args "" = ; __var_args 4 + 0 = ; __var_args fprintf () } ;
            }
# tcc_cc.c 2416
            0 return
        }
        int pre_oper_expr pre_oper_expr 126 1 new_expr () = ;

# tcc_cc.c 2733
        pre_oper_expr ->s19_m_children 0 4 * + expr ? = ;
# tcc_cc.c 2734
        pre_oper_expr ->s19_m_type expr ->s19_m_type ? = ;
# tcc_cc.c 2735
        pre_oper_expr ? return
    }
# tcc_cc.c 2737
    33 accept_term () if
    {
# tcc_cc.c 2738
        int expr expr parse_unary_expr () = ;

# tcc_cc.c 2740
        expr ? 0 == if
        {
# tcc_cc.c 2416
# tcc_cc.c 2416
            opt_trace_parser ?1 char if
            {
# tcc_cc.c 2416
                stderr ? "Fail in %s at %d\n" { int 2 __var_args __var_args "" = ; __var_args 4 + 0 = ; __var_args fprintf () } ;
            }
# tcc_cc.c 2416
            0 return
        }
        int pre_oper_expr pre_oper_expr 33 1 new_expr () = ;

# tcc_cc.c 2743
        pre_oper_expr ->s19_m_children 0 4 * + expr ? = ;
# tcc_cc.c 2744
        pre_oper_expr ->s19_m_type base_type_bool ? = ;
# tcc_cc.c 2745
        pre_oper_expr ? return
    }
# tcc_cc.c 2747
    1020 accept_term () if
    {
# tcc_cc.c 2748
        int type type 0 = ;

# tcc_cc.c 2750
        40 accept_term () if
        {
# tcc_cc.c 2751
# tcc_cc.c 2752
            type parse_sizeof_type () = ;
# tcc_cc.c 2753
            type ? 0 == if
            {
# tcc_cc.c 2754
                int sizeof_expr sizeof_expr parse_expr () = ;

# tcc_cc.c 2756
                sizeof_expr ? 0 == if
                {
# tcc_cc.c 2416
# tcc_cc.c 2416
                    opt_trace_parser ?1 char if
                    {
# tcc_cc.c 2416
                        stderr ? "Fail in %s at %d\n" { int 2 __var_args __var_args "" = ; __var_args 4 + 0 = ; __var_args fprintf () } ;
                    }
# tcc_cc.c 2416
                    0 return
                }
# tcc_cc.c 2758
                type sizeof_expr ->s19_m_type ? = ;
            }
# tcc_cc.c 2760
            41 accept_term () ! if
            {
# tcc_cc.c 2416
# tcc_cc.c 2416
                opt_trace_parser ?1 char if
                {
# tcc_cc.c 2416
                    stderr ? "Fail in %s at %d\n" { int 2 __var_args __var_args "" = ; __var_args 4 + 0 = ; __var_args fprintf () } ;
                }
# tcc_cc.c 2416
                0 return
            }
        }
        else
        {
# tcc_cc.c 2764
            int sizeof_expr sizeof_expr parse_unary_expr () = ;

# tcc_cc.c 2766
            sizeof_expr ? 0 == if
            {
# tcc_cc.c 2416
# tcc_cc.c 2416
                opt_trace_parser ?1 char if
                {
# tcc_cc.c 2416
                    stderr ? "Fail in %s at %d\n" { int 2 __var_args __var_args "" = ; __var_args 4 + 0 = ; __var_args fprintf () } ;
                }
# tcc_cc.c 2416
                0 return
            }
# tcc_cc.c 2768
            type sizeof_expr ->s19_m_type ? = ;
        }
        int size size 0 = ;

# tcc_cc.c 2771
        type ? 0 == if
        {
# tcc_cc.c 2772
            "%s Error: sizeof expression has not size\n" { int 1 __var_args __var_args token_it_pos () = ; __var_args printf () } ;
        }
        else
        {
# tcc_cc.c 2774
            size type ->s18_m_size ? = ;
        }
# tcc_cc.c 2775
        size ? new_expr_int_value () return
    }
# tcc_cc.c 2778
    parse_postfix_expr () return
    0 return
}
void parse_sizeof_type
{
    int type type 0 = ;

# tcc_cc.c 2797
    1002 accept_term () if
    {
# tcc_cc.c 2798
        type base_type_S8 ? = ;
    }
    else
    {
# tcc_cc.c 2799
        1016 accept_term () if
        {
# tcc_cc.c 2800
            type base_type_S32 ? = ;
        }
        else
        {
# tcc_cc.c 2801
            1026 accept_term () if
            {
# tcc_cc.c 2802
# tcc_cc.c 2803
                1016 accept_term () if
                {
# tcc_cc.c 2804
                    type base_type_U32 ? = ;
                }
# tcc_cc.c 2805
                type base_type_U32 ? = ;
            }
            else
            {
# tcc_cc.c 2807
                1007 accept_term () if
                {
# tcc_cc.c 2808
                    type base_type_double ? = ;
                }
                else
                {
# tcc_cc.c 2809
                    1027 accept_term () if
                    {
# tcc_cc.c 2810
# tcc_cc.c 2811
                        42 accept_term () if
                        {
# tcc_cc.c 2812
                            type type_char_ptr ? = ;
                        }
                    }
                    else
                    {
# tcc_cc.c 2814
                        1022 accept_term () if
                        {
# tcc_cc.c 2815
# tcc_cc.c 2816
                            token_it ->s11_m_kind ? 105 == if
                            {
# tcc_cc.c 2817
                                int decl decl DK_STRUCT ? token_it ->s11_m_token ? find_decl () = ;

# tcc_cc.c 2819
                                decl ? 0 != && { decl ->s20_m_type ? 0 != } if
                                {
# tcc_cc.c 2820
# tcc_cc.c 2821
                                    type decl ->s20_m_type ? = ;
# tcc_cc.c 2822
                                    next_token () ;
                                }
                            }
                        }
                        else
                        {
# tcc_cc.c 2826
                            token_it ->s11_m_kind ? 105 == if
                            {
# tcc_cc.c 2827
                                int decl decl DK_IDENT ? token_it ->s11_m_token ? find_decl () = ;

# tcc_cc.c 2829
                                decl ? 0 != && { decl ->s20_m_type ? 0 != } && { decl ->s20_m_storage_type ? ST_TYPEDEF ? == } if
                                {
# tcc_cc.c 2830
# tcc_cc.c 2831
                                    type decl ->s20_m_type ? = ;
# tcc_cc.c 2832
                                    next_token () ;
                                }
                            }
                        }
                    }
                }
            }
        }
    }
# tcc_cc.c 2835
    type ? 0 == if
    {
# tcc_cc.c 2836
        0 return
    }
# tcc_cc.c 2837
    do
    {
        42 accept_term () ! if { break }
# tcc_cc.c 2838
        type type_char_ptr ? = ;
    }
# tcc_cc.c 2839
    type ? return
    0 return
}
void expr_dioper_set_type
{
    int expr expr =:
    int type_lhs type_lhs expr ->s19_m_children 0 4 * + ->s19_m_type ? = ;

    int type_rhs type_rhs expr ->s19_m_children 1 4 * + ->s19_m_type ? = ;

# tcc_cc.c 2853
    type_lhs ? type_is_integer () && { type_rhs ? type_is_integer () } if
    {
# tcc_cc.c 2854
        int size size type_lhs ->s18_m_size ? type_rhs ->s18_m_size ? >s if { type_lhs ->s18_m_size ? } else { type_rhs ->s18_m_size ? } = ;

        int signed_int signed_int type_lhs ->s18_m_base_type ? type_lhs ->s18_m_base_type ? | 2 & 2 == =1 ;

# tcc_cc.c 2857
        size ? 8 == if
        {
# tcc_cc.c 2858
            expr ->s19_m_type signed_int ?1 char if { base_type_S64 ? } else { base_type_U64 ? } = ;
        }
        else
        {
# tcc_cc.c 2859
            size ? 4 == if
            {
# tcc_cc.c 2860
                expr ->s19_m_type signed_int ?1 char if { base_type_S32 ? } else { base_type_U32 ? } = ;
            }
            else
            {
# tcc_cc.c 2861
                size ? 2 == if
                {
# tcc_cc.c 2862
                    expr ->s19_m_type signed_int ?1 char if { base_type_S16 ? } else { base_type_U16 ? } = ;
                }
                else
                {
# tcc_cc.c 2864
                    expr ->s19_m_type signed_int ?1 char if { base_type_S8 ? } else { base_type_U8 ? } = ;
                }
            }
        }
    }
    else
    {
# tcc_cc.c 2866
        type_lhs ? type_is_pointer () && { type_rhs ? type_is_integer () } if
        {
# tcc_cc.c 2867
            expr ->s19_m_type type_lhs ? = ;
        }
        else
        {
# tcc_cc.c 2868
            type_lhs ? type_is_integer () && { type_rhs ? type_is_pointer () } if
            {
# tcc_cc.c 2869
                expr ->s19_m_type type_rhs ? = ;
            }
            else
            {
# tcc_cc.c 2870
                expr ->s19_m_kind ? 45 == && { type_lhs ? type_is_pointer () } && { type_rhs ? type_is_pointer () } if
                {
# tcc_cc.c 2871
                    expr ->s19_m_type base_type_S32 ? = ;
                }
            }
        }
    }
# tcc_cc.c 2872
    expr ->s19_m_type ? 0 == if
    {
# tcc_cc.c 2873
# tcc_cc.c 2874
        "%s: Error dioper expression: Has no type." { int 1 __var_args __var_args expr ? expr_pos () = ; __var_args printf () } ;
# tcc_cc.c 2875
        type_lhs ? type_is_integer () ! if
        {
# tcc_cc.c 2875
            " LHS not an integer %d" { int 1 __var_args __var_args type_lhs ? 0 == if { 4294967295 } else { type_lhs ->s18_m_kind ? } = ; __var_args printf () } ;
        }
# tcc_cc.c 2876
        type_rhs ? type_is_integer () ! if
        {
# tcc_cc.c 2876
            " RHS not an integer %d" { int 1 __var_args __var_args type_rhs ? 0 == if { 4294967295 } else { type_rhs ->s18_m_kind ? } = ; __var_args printf () } ;
        }
# tcc_cc.c 2877
        "\n" 0 printf () ;
    }
    0 return
}
void parse_expr1
{
    int expr expr parse_unary_expr () = ;

# tcc_cc.c 2888
    {
        do
        {
# tcc_cc.c 2889
            int kind kind token_it ->s11_m_kind ? = ;

# tcc_cc.c 2891
            42 accept_term () || { 47 accept_term () } || { 37 accept_term () } if
            {
# tcc_cc.c 2892
                int lhs lhs expr ? = ;

                int rhs rhs parse_unary_expr () = ;

# tcc_cc.c 2895
                rhs ? 0 == if
                {
# tcc_cc.c 2416
# tcc_cc.c 2416
                    opt_trace_parser ?1 char if
                    {
# tcc_cc.c 2416
                        stderr ? "Fail in %s at %d\n" { int 2 __var_args __var_args "" = ; __var_args 4 + 0 = ; __var_args fprintf () } ;
                    }
# tcc_cc.c 2416
                    0 return
                }
# tcc_cc.c 2897
                expr kind ? 2 new_expr () = ;
# tcc_cc.c 2898
                expr ->s19_m_children 0 4 * + lhs ? = ;
# tcc_cc.c 2899
                expr ->s19_m_children 1 4 * + rhs ? = ;
# tcc_cc.c 2900
                expr ? expr_dioper_set_type () ;
            }
            else
            {
# tcc_cc.c 2903
                break
            }
        }
    }
# tcc_cc.c 2906
    expr ? 0 != && { expr ->s19_m_type ? 0 == } if
    {
# tcc_cc.c 2906
        "parse_expr1 has no type\n" 0 printf () ;
    }
# tcc_cc.c 2907
    expr ? return
    0 return
}
void parse_expr2
{
    int expr expr parse_expr1 () = ;

# tcc_cc.c 2917
    {
        do
        {
# tcc_cc.c 2918
            int kind kind token_it ->s11_m_kind ? = ;

# tcc_cc.c 2920
            43 accept_term () || { 45 accept_term () } if
            {
# tcc_cc.c 2921
                int lhs lhs expr ? = ;

                int rhs rhs parse_expr1 () = ;

# tcc_cc.c 2924
                rhs ? 0 == if
                {
# tcc_cc.c 2416
# tcc_cc.c 2416
                    opt_trace_parser ?1 char if
                    {
# tcc_cc.c 2416
                        stderr ? "Fail in %s at %d\n" { int 2 __var_args __var_args "" = ; __var_args 4 + 0 = ; __var_args fprintf () } ;
                    }
# tcc_cc.c 2416
                    0 return
                }
# tcc_cc.c 2926
                expr kind ? 2 new_expr () = ;
# tcc_cc.c 2927
                expr ->s19_m_children 0 4 * + lhs ? = ;
# tcc_cc.c 2928
                expr ->s19_m_children 1 4 * + rhs ? = ;
# tcc_cc.c 2929
                expr ? expr_dioper_set_type () ;
            }
            else
            {
# tcc_cc.c 2932
                break
            }
        }
    }
# tcc_cc.c 2935
    expr ? return
    0 return
}
void parse_expr3
{
    int expr expr parse_expr2 () = ;

# tcc_cc.c 2945
    {
        do
        {
# tcc_cc.c 2946
            int kind kind token_it ->s11_m_kind ? = ;

# tcc_cc.c 2948
            800 60 + accept_term () || { 800 62 + accept_term () } if
            {
# tcc_cc.c 2949
                int lhs lhs expr ? = ;

                int rhs rhs parse_expr2 () = ;

# tcc_cc.c 2952
                rhs ? 0 == if
                {
# tcc_cc.c 2416
# tcc_cc.c 2416
                    opt_trace_parser ?1 char if
                    {
# tcc_cc.c 2416
                        stderr ? "Fail in %s at %d\n" { int 2 __var_args __var_args "" = ; __var_args 4 + 0 = ; __var_args fprintf () } ;
                    }
# tcc_cc.c 2416
                    0 return
                }
# tcc_cc.c 2954
                expr kind ? 2 new_expr () = ;
# tcc_cc.c 2955
                expr ->s19_m_children 0 4 * + lhs ? = ;
# tcc_cc.c 2956
                expr ->s19_m_children 1 4 * + rhs ? = ;
# tcc_cc.c 2957
                expr ->s19_m_type expr ->s19_m_children 0 4 * + ->s19_m_type ? = ;
            }
            else
            {
# tcc_cc.c 2960
                break
            }
        }
    }
# tcc_cc.c 2963
    expr ? return
    0 return
}
void parse_expr4
{
    int expr expr parse_expr3 () = ;

# tcc_cc.c 2973
    {
        do
        {
# tcc_cc.c 2974
            int kind kind token_it ->s11_m_kind ? = ;

# tcc_cc.c 2976
            501 accept_term () || { 502 accept_term () } || { 503 accept_term () } || { 504 accept_term () } || { 60 accept_term () } || { 62 accept_term () } if
            {
# tcc_cc.c 2979
                int lhs lhs expr ? = ;

                int rhs rhs parse_expr3 () = ;

# tcc_cc.c 2982
                rhs ? 0 == if
                {
# tcc_cc.c 2416
# tcc_cc.c 2416
                    opt_trace_parser ?1 char if
                    {
# tcc_cc.c 2416
                        stderr ? "Fail in %s at %d\n" { int 2 __var_args __var_args "" = ; __var_args 4 + 0 = ; __var_args fprintf () } ;
                    }
# tcc_cc.c 2416
                    0 return
                }
# tcc_cc.c 2984
                expr kind ? 2 new_expr () = ;
# tcc_cc.c 2985
                expr ->s19_m_children 0 4 * + lhs ? = ;
# tcc_cc.c 2986
                expr ->s19_m_children 1 4 * + rhs ? = ;
# tcc_cc.c 2987
                expr ->s19_m_type base_type_bool ? = ;
            }
            else
            {
# tcc_cc.c 2990
                break
            }
        }
    }
# tcc_cc.c 2993
    expr ? return
    0 return
}
void parse_expr5
{
    int expr expr parse_expr4 () = ;

# tcc_cc.c 3003
    do
    {
        94 accept_term () ! if { break }
# tcc_cc.c 3004
        int lhs lhs expr ? = ;

        int rhs rhs parse_expr4 () = ;

# tcc_cc.c 3007
        rhs ? 0 == if
        {
# tcc_cc.c 2416
# tcc_cc.c 2416
            opt_trace_parser ?1 char if
            {
# tcc_cc.c 2416
                stderr ? "Fail in %s at %d\n" { int 2 __var_args __var_args "" = ; __var_args 4 + 0 = ; __var_args fprintf () } ;
            }
# tcc_cc.c 2416
            0 return
        }
# tcc_cc.c 3009
        expr 94 2 new_expr () = ;
# tcc_cc.c 3010
        expr ->s19_m_children 0 4 * + lhs ? = ;
# tcc_cc.c 3011
        expr ->s19_m_children 1 4 * + rhs ? = ;
# tcc_cc.c 3012
        expr ? expr_dioper_set_type () ;
    }
# tcc_cc.c 3015
    expr ? return
    0 return
}
void parse_expr6
{
    int expr expr parse_expr5 () = ;

# tcc_cc.c 3025
    do
    {
        38 accept_term () ! if { break }
# tcc_cc.c 3026
        int lhs lhs expr ? = ;

        int rhs rhs parse_expr5 () = ;

# tcc_cc.c 3029
        rhs ? 0 == if
        {
# tcc_cc.c 2416
# tcc_cc.c 2416
            opt_trace_parser ?1 char if
            {
# tcc_cc.c 2416
                stderr ? "Fail in %s at %d\n" { int 2 __var_args __var_args "" = ; __var_args 4 + 0 = ; __var_args fprintf () } ;
            }
# tcc_cc.c 2416
            0 return
        }
# tcc_cc.c 3031
        expr 38 2 new_expr () = ;
# tcc_cc.c 3032
        expr ->s19_m_children 0 4 * + lhs ? = ;
# tcc_cc.c 3033
        expr ->s19_m_children 1 4 * + rhs ? = ;
# tcc_cc.c 3034
        expr ? expr_dioper_set_type () ;
    }
# tcc_cc.c 3037
    expr ? return
    0 return
}
void parse_expr7
{
    int expr expr parse_expr6 () = ;

# tcc_cc.c 3047
    do
    {
        124 accept_term () ! if { break }
# tcc_cc.c 3048
        int lhs lhs expr ? = ;

        int rhs rhs parse_expr6 () = ;

# tcc_cc.c 3051
        rhs ? 0 == if
        {
# tcc_cc.c 2416
# tcc_cc.c 2416
            opt_trace_parser ?1 char if
            {
# tcc_cc.c 2416
                stderr ? "Fail in %s at %d\n" { int 2 __var_args __var_args "" = ; __var_args 4 + 0 = ; __var_args fprintf () } ;
            }
# tcc_cc.c 2416
            0 return
        }
# tcc_cc.c 3053
        expr 124 2 new_expr () = ;
# tcc_cc.c 3054
        expr ->s19_m_children 0 4 * + lhs ? = ;
# tcc_cc.c 3055
        expr ->s19_m_children 1 4 * + rhs ? = ;
# tcc_cc.c 3056
        expr ? expr_dioper_set_type () ;
    }
# tcc_cc.c 3059
    expr ? return
    0 return
}
void parse_expr8
{
    int expr expr parse_expr7 () = ;

# tcc_cc.c 3069
    do
    {
        800 38 + accept_term () ! if { break }
# tcc_cc.c 3070
        int lhs lhs expr ? = ;

        int rhs rhs parse_expr7 () = ;

# tcc_cc.c 3073
        rhs ? 0 == if
        {
# tcc_cc.c 2416
# tcc_cc.c 2416
            opt_trace_parser ?1 char if
            {
# tcc_cc.c 2416
                stderr ? "Fail in %s at %d\n" { int 2 __var_args __var_args "" = ; __var_args 4 + 0 = ; __var_args fprintf () } ;
            }
# tcc_cc.c 2416
            0 return
        }
# tcc_cc.c 3075
        expr 800 38 + 2 new_expr () = ;
# tcc_cc.c 3076
        expr ->s19_m_children 0 4 * + lhs ? = ;
# tcc_cc.c 3077
        expr ->s19_m_children 1 4 * + rhs ? = ;
# tcc_cc.c 3078
        expr ->s19_m_type base_type_bool ? = ;
    }
# tcc_cc.c 3081
    expr ? return
    0 return
}
void parse_expr9
{
    int expr expr parse_expr8 () = ;

# tcc_cc.c 3091
    do
    {
        800 124 + accept_term () ! if { break }
# tcc_cc.c 3092
        int lhs lhs expr ? = ;

        int rhs rhs parse_expr8 () = ;

# tcc_cc.c 3095
        rhs ? 0 == if
        {
# tcc_cc.c 2416
# tcc_cc.c 2416
            opt_trace_parser ?1 char if
            {
# tcc_cc.c 2416
                stderr ? "Fail in %s at %d\n" { int 2 __var_args __var_args "" = ; __var_args 4 + 0 = ; __var_args fprintf () } ;
            }
# tcc_cc.c 2416
            0 return
        }
# tcc_cc.c 3097
        expr 800 124 + 2 new_expr () = ;
# tcc_cc.c 3098
        expr ->s19_m_children 0 4 * + lhs ? = ;
# tcc_cc.c 3099
        expr ->s19_m_children 1 4 * + rhs ? = ;
# tcc_cc.c 3100
        expr ->s19_m_type base_type_bool ? = ;
    }
# tcc_cc.c 3103
    expr ? return
    0 return
}
void parse_conditional_expr
{
    int expr expr parse_expr9 () = ;

# tcc_cc.c 3116
    63 accept_term () if
    {
# tcc_cc.c 3117
        int cond_expr cond_expr expr ? = ;

        int then_expr then_expr parse_expr9 () = ;

# tcc_cc.c 3120
        then_expr ? 0 == if
        {
# tcc_cc.c 2416
# tcc_cc.c 2416
            opt_trace_parser ?1 char if
            {
# tcc_cc.c 2416
                stderr ? "Fail in %s at %d\n" { int 2 __var_args __var_args "" = ; __var_args 4 + 0 = ; __var_args fprintf () } ;
            }
# tcc_cc.c 2416
            0 return
        }
# tcc_cc.c 3122
        58 accept_term () ! if
        {
# tcc_cc.c 2416
# tcc_cc.c 2416
            opt_trace_parser ?1 char if
            {
# tcc_cc.c 2416
                stderr ? "Fail in %s at %d\n" { int 2 __var_args __var_args "" = ; __var_args 4 + 0 = ; __var_args fprintf () } ;
            }
# tcc_cc.c 2416
            0 return
        }
        int else_expr else_expr parse_conditional_expr () = ;

# tcc_cc.c 3125
        else_expr ? 0 == if
        {
# tcc_cc.c 2416
# tcc_cc.c 2416
            opt_trace_parser ?1 char if
            {
# tcc_cc.c 2416
                stderr ? "Fail in %s at %d\n" { int 2 __var_args __var_args "" = ; __var_args 4 + 0 = ; __var_args fprintf () } ;
            }
# tcc_cc.c 2416
            0 return
        }
# tcc_cc.c 3127
        expr 63 3 new_expr () = ;
# tcc_cc.c 3128
        expr ->s19_m_children 0 4 * + cond_expr ? = ;
# tcc_cc.c 3129
        expr ->s19_m_children 1 4 * + then_expr ? = ;
# tcc_cc.c 3130
        expr ->s19_m_children 2 4 * + else_expr ? = ;
# tcc_cc.c 3131
        expr ->s19_m_type then_expr ->s19_m_type ? = ;
    }
# tcc_cc.c 3134
    expr ? return
    0 return
}
void parse_assignment_expr
{
    int expr expr parse_conditional_expr () = ;

# tcc_cc.c 3149
    expr ? 0 == if
    {
# tcc_cc.c 2416
# tcc_cc.c 2416
        opt_trace_parser ?1 char if
        {
# tcc_cc.c 2416
            stderr ? "Fail in %s at %d\n" { int 2 __var_args __var_args "" = ; __var_args 4 + 0 = ; __var_args fprintf () } ;
        }
# tcc_cc.c 2416
        0 return
    }
# tcc_cc.c 3151
    {
        do
        {
# tcc_cc.c 3152
# tcc_cc.c 3153
            token_it ->s11_m_kind ? 61 == || { token_it ->s11_m_kind ? 600 >=s && { token_it ->s11_m_kind ? 600 127 + <s } } if
            {
# tcc_cc.c 3154
                int kind kind token_it ->s11_m_kind ? = ;

# tcc_cc.c 3156
                next_token () ;
                int lhs lhs expr ? = ;

                int rhs rhs parse_assignment_expr () = ;

# tcc_cc.c 3159
                rhs ? 0 == if
                {
# tcc_cc.c 2416
# tcc_cc.c 2416
                    opt_trace_parser ?1 char if
                    {
# tcc_cc.c 2416
                        stderr ? "Fail in %s at %d\n" { int 2 __var_args __var_args "" = ; __var_args 4 + 0 = ; __var_args fprintf () } ;
                    }
# tcc_cc.c 2416
                    0 return
                }
# tcc_cc.c 3161
                expr kind ? 2 new_expr () = ;
# tcc_cc.c 3162
                expr ->s19_m_children 0 4 * + lhs ? = ;
# tcc_cc.c 3163
                expr ->s19_m_children 1 4 * + rhs ? = ;
# tcc_cc.c 3164
                expr ->s19_m_type lhs ->s19_m_type ? = ;
            }
            else
            {
# tcc_cc.c 3168
                break
            }
        }
    }
# tcc_cc.c 3171
    expr ? return
    0 return
}
void parse_expr
{
    int expr expr parse_assignment_expr () = ;

# tcc_cc.c 3181
    expr ? 0 == if
    {
# tcc_cc.c 2416
# tcc_cc.c 2416
        opt_trace_parser ?1 char if
        {
# tcc_cc.c 2416
            stderr ? "Fail in %s at %d\n" { int 2 __var_args __var_args "" = ; __var_args 4 + 0 = ; __var_args fprintf () } ;
        }
# tcc_cc.c 2416
        0 return
    }
# tcc_cc.c 3183
    44 accept_term () if
    {
# tcc_cc.c 3184
        int nr_children nr_children 1 = ;

        int 20 children
# tcc_cc.c 3187
        children 0 4 * + expr ? = ;
# tcc_cc.c 3188
        do
        {
# tcc_cc.c 3189
            int child child parse_assignment_expr () = ;

# tcc_cc.c 3191
            child ? 0 == if
            {
# tcc_cc.c 2416
# tcc_cc.c 2416
                opt_trace_parser ?1 char if
                {
# tcc_cc.c 2416
                    stderr ? "Fail in %s at %d\n" { int 2 __var_args __var_args "" = ; __var_args 4 + 0 = ; __var_args fprintf () } ;
                }
# tcc_cc.c 2416
                0 return
            }
# tcc_cc.c 3193
            children nr_children $ ? 1 + = 1 - 4 * + child ? = ;
            44 accept_term () ! if { break }
        }
# tcc_cc.c 3195
        expr 44 nr_children ? new_expr () = ;
# tcc_cc.c 3196
        {
            int i i 0 = ;

            do
            {
                i ? nr_children ? <s ! if { break }
# tcc_cc.c 3197
                expr ->s19_m_children i ? 4 * + children i ? 4 * + ? = ;
                i $ ? 1 + = 1 - ;
            }
        }
# tcc_cc.c 3198
        expr ->s19_m_type expr ->s19_m_children nr_children ? 1 - 4 * + ->s19_m_type ? = ;
    }
# tcc_cc.c 3200
    expr ? return
    0 return
}
void parse_statements ;
void parse_initializer ;
const s22_m_is_struct 0
const s22_m_pos 4
const s22_m_size 8
int cur_struct_or_union
int save_decl_depth
int inside_function
int inside_argument_list
void round_up_word
{
    int size size =:
# tcc_cc.c 3220
    size ? 3 + 3 ~ & return
    0 return
}
void array_element_size
{
    int type type =:
# tcc_cc.c 3224
    type ->s18_m_size ? 1 == && { type ->s18_m_base_type ? BT_S8 ? == || { type ->s18_m_base_type ? BT_U8 ? == } } if { 1 } else { type ->s18_m_size ? round_up_word () } return
    0 return
}
void parse_array_indexes
{
    int arr_type arr_type =:
    int type type =:
    int expr expr parse_expr () = ;

# tcc_cc.c 3236
    expr ? 0 == if
    {
# tcc_cc.c 3237
        0 return
    }
    int nr_elems nr_elems expr ? expr_eval () = ;

# tcc_cc.c 3239
    93 accept_term () ! if
    {
# tcc_cc.c 2415
# tcc_cc.c 2415
        opt_trace_parser ?1 char if
        {
# tcc_cc.c 2415
            stderr ? "Fail in %s at %d\n" { int 2 __var_args __var_args "" = ; __var_args 4 + 0 = ; __var_args fprintf () } ;
        }
# tcc_cc.c 2415
        0 return
    }
# tcc_cc.c 3241
    91 accept_term () if
    {
# tcc_cc.c 3242
        int result_type result_type 0 = ;

# tcc_cc.c 3244
        type ? result_type parse_array_indexes () ! if
        {
# tcc_cc.c 2415
# tcc_cc.c 2415
            opt_trace_parser ?1 char if
            {
# tcc_cc.c 2415
                stderr ? "Fail in %s at %d\n" { int 2 __var_args __var_args "" = ; __var_args 4 + 0 = ; __var_args fprintf () } ;
            }
# tcc_cc.c 2415
            0 return
        }
# tcc_cc.c 3246
        type result_type ? = ;
    }
# tcc_cc.c 3248
    arr_type ? TYPE_KIND_ARRAY ? nr_elems ? type ->s18_m_size ? * 1 new_type () = ;
# tcc_cc.c 3249
    arr_type ? ->s18_m_members ? 0 4 * + type ? = ;
# tcc_cc.c 3250
    arr_type ? ->s18_m_nr_elems nr_elems ? = ;
# tcc_cc.c 3251
    arr_type ? ->s18_m_size nr_elems ? type ? array_element_size () * = ;
# tcc_cc.c 3252
    1 return
    0 return
}
void parse_declaration
{
    int is_param is_param =:
    int storage_type storage_type ST_NONE ? = ;

# tcc_cc.c 3280
    {
        do
        {
# tcc_cc.c 3281
# tcc_cc.c 3282
            1024 accept_term () if
            {
# tcc_cc.c 3283
# tcc_cc.c 3284
                storage_type ST_TYPEDEF ? = ;
# tcc_cc.c 3285
                inside_function ?1 char if
                {
# tcc_cc.c 3286
                    stderr ? "%s: typedef inside function\n" { int 1 __var_args __var_args token_it_pos () = ; __var_args fprintf () } ;
                }
            }
            else
            {
# tcc_cc.c 3288
                1010 accept_term () if
                {
# tcc_cc.c 3289
                }
                else
                {
# tcc_cc.c 3291
                    1015 accept_term () if
                    {
# tcc_cc.c 3292
                    }
                    else
                    {
# tcc_cc.c 3294
                        1021 accept_term () if
                        {
# tcc_cc.c 3295
# tcc_cc.c 3296
                            inside_function ?1 char if
                            {
# tcc_cc.c 3297
                                storage_type ST_STATIC ? = ;
                            }
                        }
                        else
                        {
# tcc_cc.c 3300
                            break
                        }
                    }
                }
            }
        }
    }
    int type_specifier type_specifier storage_type parse_type_specifier () = ;

# tcc_cc.c 3303
    type_specifier ? 0 == if
    {
# tcc_cc.c 2415
# tcc_cc.c 2415
        opt_trace_parser ?1 char if
        {
# tcc_cc.c 2415
            stderr ? "Fail in %s at %d\n" { int 2 __var_args __var_args "" = ; __var_args 4 + 0 = ; __var_args fprintf () } ;
        }
# tcc_cc.c 2415
        0 return
    }
# tcc_cc.c 3305
    59 accept_term () if
    {
# tcc_cc.c 3306
# tcc_cc.c 3307
        cur_struct_or_union ? 0 != && { type_specifier ->s18_m_kind ? TYPE_KIND_STRUCT ? == || { type_specifier ->s18_m_kind ? TYPE_KIND_UNION ? == } } if
        {
# tcc_cc.c 3309
# tcc_cc.c 3310
            {
                int i i 0 = ;

                do
                {
                    i ? type_specifier ->s18_m_nr_decls ? <s ! if { break }
# tcc_cc.c 3311
                    int decl decl type_specifier ->s18_m_decls ? i ? 4 * + ? = ;

                    int decl_clone decl_clone decl ->s20_m_kind ? decl ->s20_m_name ? decl ->s20_m_type ? add_decl () = ;

# tcc_cc.c 3314
                    decl_clone ->s20_m_storage_type decl ->s20_m_storage_type ? = ;
# tcc_cc.c 3315
                    decl_clone ->s20_m_pos cur_struct_or_union ->s22_m_pos ? decl ->s20_m_pos ? + = ;
                    i $ ? 1 + = 1 - ;
                }
            }
# tcc_cc.c 3317
            cur_struct_or_union ->s22_m_is_struct ?1 char if
            {
# tcc_cc.c 3318
# tcc_cc.c 3319
                cur_struct_or_union ->s22_m_pos $ ? type_specifier ->s18_m_size ? round_up_word () + = ;
# tcc_cc.c 3320
                cur_struct_or_union ->s22_m_size cur_struct_or_union ->s22_m_pos ? = ;
            }
            else
            {
# tcc_cc.c 3323
                int size size type_specifier ->s18_m_size ? round_up_word () = ;

# tcc_cc.c 3325
                size ? cur_struct_or_union ->s22_m_size ? >s if
                {
# tcc_cc.c 3326
                    cur_struct_or_union ->s22_m_size size ? = ;
                }
            }
        }
# tcc_cc.c 3329
        1 return
    }
# tcc_cc.c 3331
    do
    {
# tcc_cc.c 3332
        int type type type_specifier ? = ;

# tcc_cc.c 3334
        do
        {
            42 accept_term () ! if { break }
# tcc_cc.c 3335
            int pointer_type pointer_type TYPE_KIND_POINTER ? 4 1 new_type () = ;

# tcc_cc.c 3337
            pointer_type ->s18_m_members ? 0 4 * + type ? = ;
# tcc_cc.c 3338
            type pointer_type ? = ;
        }
        int prev_decl prev_decl 0 = ;

        int decl decl 0 = ;

        int as_pointer as_pointer 0 =1 ;

# tcc_cc.c 3343
        token_it ->s11_m_kind ? 105 == if
        {
# tcc_cc.c 3344
# tcc_cc.c 3345
            inside_function ?1 char ! && { inside_argument_list ?1 char ! } && { cur_struct_or_union ? 0 == } if
            {
# tcc_cc.c 3346
                prev_decl DK_IDENT ? token_it ->s11_m_token ? find_decl () = ;
            }
# tcc_cc.c 3347
            decl DK_IDENT ? token_it ->s11_m_token ? 0 add_decl () = ;
# tcc_cc.c 3348
            next_token () ;
        }
        else
        {
# tcc_cc.c 3350
            40 accept_term () if
            {
# tcc_cc.c 3351
# tcc_cc.c 3352
                42 accept_term () if
                {
# tcc_cc.c 3353
# tcc_cc.c 3354
                    token_it ->s11_m_kind ? 105 == if
                    {
# tcc_cc.c 3355
# tcc_cc.c 3356
                        as_pointer 1 =1 ;
# tcc_cc.c 3357
                        inside_function ?1 char ! && { inside_argument_list ?1 char ! } && { cur_struct_or_union ? 0 == } if
                        {
# tcc_cc.c 3358
                            prev_decl DK_IDENT ? token_it ->s11_m_token ? find_decl () = ;
                        }
# tcc_cc.c 3359
                        decl DK_IDENT ? token_it ->s11_m_token ? 0 add_decl () = ;
# tcc_cc.c 3360
                        next_token () ;
                    }
                }
# tcc_cc.c 3364
                41 accept_term () ! if
                {
# tcc_cc.c 2415
# tcc_cc.c 2415
                    opt_trace_parser ?1 char if
                    {
# tcc_cc.c 2415
                        stderr ? "Fail in %s at %d\n" { int 2 __var_args __var_args "" = ; __var_args 4 + 0 = ; __var_args fprintf () } ;
                    }
# tcc_cc.c 2415
                    0 return
                }
            }
        }
# tcc_cc.c 3367
        decl ? 0 != if
        {
# tcc_cc.c 3368
# tcc_cc.c 3369
            {
                do
                {
# tcc_cc.c 3370
                    int subj_type subj_type type ? = ;

# tcc_cc.c 3372
                    40 accept_term () if
                    {
# tcc_cc.c 3373
# tcc_cc.c 3374
                        inside_argument_list 1 =1 ;
# tcc_cc.c 3375
                        cur_labels 0 = ;
                        int save_ident_decls save_ident_decls cur_ident_decls ? = ;

                        int var_params var_params 0 =1 ;

# tcc_cc.c 3378
                        do
                        {
# tcc_cc.c 3379
# tcc_cc.c 3380
                            509 accept_term () if
                            {
# tcc_cc.c 3381
# tcc_cc.c 3382
                                var_params 1 =1 ;
# tcc_cc.c 3383
                                break
                            }
# tcc_cc.c 3385
                            1 parse_declaration () ! if
                            {
# tcc_cc.c 2415
# tcc_cc.c 2415
                                opt_trace_parser ?1 char if
                                {
# tcc_cc.c 2415
                                    stderr ? "Fail in %s at %d\n" { int 2 __var_args __var_args "" = ; __var_args 4 + 0 = ; __var_args fprintf () } ;
                                }
# tcc_cc.c 2415
                                0 return
                            }
# tcc_cc.c 3386
                            44 accept_term () ! if { break }
                        }
# tcc_cc.c 3388
                        41 accept_term () ! if
                        {
# tcc_cc.c 2415
# tcc_cc.c 2415
                            opt_trace_parser ?1 char if
                            {
# tcc_cc.c 2415
                                stderr ? "Fail in %s at %d\n" { int 2 __var_args __var_args "" = ; __var_args 4 + 0 = ; __var_args fprintf () } ;
                            }
# tcc_cc.c 2415
                            0 return
                        }
# tcc_cc.c 3389
# tcc_cc.c 3390
                        inside_argument_list 0 =1 ;
# tcc_cc.c 3391
                        type TYPE_KIND_FUNCTION ? 4 1 new_type () = ;
# tcc_cc.c 3392
                        type ->s18_m_members ? 0 4 * + subj_type ? = ;
                        int nr_parameters nr_parameters 0 = ;

# tcc_cc.c 3394
                        {
                            int decl1 decl1 cur_ident_decls ? = ;

                            do
                            {
                                decl1 ? save_ident_decls ? != ! if { break }
# tcc_cc.c 3395
                                nr_parameters $ ? 1 + = 1 - ;
                                decl1 decl1 ->s20_m_prev ? = ;
                            }
                        }
                        int 20 parameters
                        int i i nr_parameters ? = ;

# tcc_cc.c 3398
                        var_params ?1 char if
                        {
# tcc_cc.c 3399
# tcc_cc.c 3400
                            nr_parameters $ ? 1 + = 1 - ;
# tcc_cc.c 3401
                            parameters i ? 4 * + 0 = ;
                        }
# tcc_cc.c 3403
                        {
                            int decl1 decl1 cur_ident_decls ? = ;

                            do
                            {
                                decl1 ? save_ident_decls ? != ! if { break }
# tcc_cc.c 3404
                                parameters i $ ? 1 - = 4 * + decl1 ? = ;
                                decl1 decl1 ->s20_m_prev ? = ;
                            }
                        }
# tcc_cc.c 3405
                        type ? nr_parameters ? parameters type_set_decls () ;
# tcc_cc.c 3406
                        decl ->s20_m_type type ? = ;
# tcc_cc.c 3407
                        123 accept_term () if
                        {
# tcc_cc.c 3408
# tcc_cc.c 3409
                            inside_function 1 =1 ;
# tcc_cc.c 3410
                            decl ? gen_function_start () ;
# tcc_cc.c 3411
                            0 parse_statements () ! if
                            {
# tcc_cc.c 2415
# tcc_cc.c 2415
                                opt_trace_parser ?1 char if
                                {
# tcc_cc.c 2415
                                    stderr ? "Fail in %s at %d\n" { int 2 __var_args __var_args "" = ; __var_args 4 + 0 = ; __var_args fprintf () } ;
                                }
# tcc_cc.c 2415
                                0 return
                            }
# tcc_cc.c 3413
                            125 accept_term () ! if
                            {
# tcc_cc.c 2415
# tcc_cc.c 2415
                                opt_trace_parser ?1 char if
                                {
# tcc_cc.c 2415
                                    stderr ? "Fail in %s at %d\n" { int 2 __var_args __var_args "" = ; __var_args 4 + 0 = ; __var_args fprintf () } ;
                                }
# tcc_cc.c 2415
                                0 return
                            }
# tcc_cc.c 3415
                            cur_ident_decls save_ident_decls ? = ;
# tcc_cc.c 3416
                            gen_function_end () ;
# tcc_cc.c 3417
                            inside_function 0 =1 ;
# tcc_cc.c 3418
                            1 return
                        }
# tcc_cc.c 3420
                        inside_function ?1 char ! && { cur_struct_or_union ? 0 == } if
                        {
# tcc_cc.c 3421
                            fcode ? "void %s ;\n" { int 1 __var_args __var_args decl ->s20_m_name ? = ; __var_args fprintf () } ;
                        }
# tcc_cc.c 3422
                        cur_ident_decls save_ident_decls ? = ;
# tcc_cc.c 3423
                        break
                    }
                    else
                    {
# tcc_cc.c 3425
                        91 accept_term () if
                        {
# tcc_cc.c 3426
# tcc_cc.c 3427
                            93 accept_term () if
                            {
# tcc_cc.c 3428
                                int ptr_type ptr_type TYPE_KIND_POINTER ? 4 1 new_type () = ;

# tcc_cc.c 3430
                                91 accept_term () if
                                {
# tcc_cc.c 3431
                                    int result_type result_type 0 = ;

# tcc_cc.c 3433
                                    type ? result_type parse_array_indexes () ! if
                                    {
# tcc_cc.c 2415
# tcc_cc.c 2415
                                        opt_trace_parser ?1 char if
                                        {
# tcc_cc.c 2415
                                            stderr ? "Fail in %s at %d\n" { int 2 __var_args __var_args "" = ; __var_args 4 + 0 = ; __var_args fprintf () } ;
                                        }
# tcc_cc.c 2415
                                        0 return
                                    }
# tcc_cc.c 3435
                                    type result_type ? = ;
                                }
# tcc_cc.c 3437
                                ptr_type ->s18_m_members ? 0 4 * + type ? = ;
# tcc_cc.c 3438
                                type ptr_type ? = ;
                            }
                            else
                            {
# tcc_cc.c 3441
                                int result_type result_type 0 = ;

# tcc_cc.c 3443
                                type ? result_type parse_array_indexes () ! if
                                {
# tcc_cc.c 2415
# tcc_cc.c 2415
                                    opt_trace_parser ?1 char if
                                    {
# tcc_cc.c 2415
                                        stderr ? "Fail in %s at %d\n" { int 2 __var_args __var_args "" = ; __var_args 4 + 0 = ; __var_args fprintf () } ;
                                    }
# tcc_cc.c 2415
                                    0 return
                                }
# tcc_cc.c 3445
                                type result_type ? = ;
                            }
                        }
                        else
                        {
# tcc_cc.c 3449
                            break
                        }
                    }
                }
            }
# tcc_cc.c 3451
            as_pointer ?1 char if
            {
# tcc_cc.c 3452
                int ptr_type ptr_type TYPE_KIND_POINTER ? 4 1 new_type () = ;

# tcc_cc.c 3454
                ptr_type ->s18_m_members ? 0 4 * + type ? = ;
# tcc_cc.c 3455
                type ptr_type ? = ;
            }
# tcc_cc.c 3457
            prev_decl ? 0 != && { type ->s18_m_kind ? TYPE_KIND_FUNCTION ? != } if
            {
# tcc_cc.c 3458
# tcc_cc.c 3459
                stderr ? "%s: Warning: declaration of %s repeated\n" { int 2 __var_args __var_args token_it_pos () = ; __var_args 4 + decl ->s20_m_name ? = ; __var_args fprintf () } ;
# tcc_cc.c 3460
                decl ? remove_decl () ;
            }
# tcc_cc.c 3462
            decl ->s20_m_type type ? = ;
# tcc_cc.c 3463
            decl ->s20_m_storage_type storage_type ? = ;
# tcc_cc.c 3464
            cur_struct_or_union ? 0 != if
            {
# tcc_cc.c 3465
# tcc_cc.c 3466
                decl ->s20_m_pos cur_struct_or_union ->s22_m_pos ? = ;
# tcc_cc.c 3467
                cur_struct_or_union ->s22_m_is_struct ?1 char if
                {
# tcc_cc.c 3468
# tcc_cc.c 3469
                    cur_struct_or_union ->s22_m_pos $ ? type ->s18_m_size ? round_up_word () + = ;
# tcc_cc.c 3470
                    cur_struct_or_union ->s22_m_size cur_struct_or_union ->s22_m_pos ? = ;
                }
                else
                {
# tcc_cc.c 3473
                    int size size type ->s18_m_size ? round_up_word () = ;

# tcc_cc.c 3475
                    size ? cur_struct_or_union ->s22_m_size ? >s if
                    {
# tcc_cc.c 3476
                        cur_struct_or_union ->s22_m_size size ? = ;
                    }
                }
            }
# tcc_cc.c 3479
            storage_type ? ST_TYPEDEF ? == && { type ->s18_m_typedef_decl ? 0 == } if
            {
# tcc_cc.c 3480
# tcc_cc.c 3481
                type ->s18_m_typedef_decl decl ? = ;
# tcc_cc.c 3482
                type ->s18_m_kind ? TYPE_KIND_STRUCT ? == && { decl ->s20_m_name ? "Stab_Sym" strcmp () 0 == || { decl ->s20_m_name ? "Elf32_" 6 strncmp () 0 == } || { decl ->s20_m_name ? "ArchiveHeader" strcmp () 0 == } || { decl ->s20_m_name ? "ArHdr" strcmp () 0 == } } if
                {
# tcc_cc.c 3487
                    int pos pos 0 = ;

# tcc_cc.c 3489
                    {
                        int i i 0 = ;

                        do
                        {
                            i ? type ->s18_m_nr_decls ? <s ! if { break }
# tcc_cc.c 3490
# tcc_cc.c 3491
                            type ->s18_m_decls ? i ? 4 * + ->s20_m_pos pos ? = ;
# tcc_cc.c 3492
                            pos $ ? type ->s18_m_decls ? i ? 4 * + ->s20_m_type ->s18_m_size ? + = ;
                            i $ ? 1 + = 1 - ;
                        }
                    }
# tcc_cc.c 3494
                    pos ? type ->s18_m_size ? <s if
                    {
# tcc_cc.c 3495
# tcc_cc.c 3496
                        "%s Info: %s is 'packed' with size reduced from %d to %d\n" { int 4 __var_args __var_args token_it_pos () = ; __var_args 4 + decl ->s20_m_name ? = ; __var_args 8 + type ->s18_m_size ? = ; __var_args 12 + pos ? = ; __var_args printf () } ;
# tcc_cc.c 3497
                        type ->s18_m_size pos ? = ;
# tcc_cc.c 3498
                        gen_start_struct_or_union () ;
# tcc_cc.c 3499
                        {
                            int i i 0 = ;

                            do
                            {
                                i ? type ->s18_m_nr_decls ? <s ! if { break }
# tcc_cc.c 3500
                                type ->s18_m_decls ? i ? 4 * + ? gen_struct_or_union_member () ;
                                i $ ? 1 + = 1 - ;
                            }
                        }
                    }
                }
            }
# tcc_cc.c 3504
            61 accept_term () if
            {
# tcc_cc.c 3505
# tcc_cc.c 3506
                decl ->s20_m_value parse_initializer () = ;
# tcc_cc.c 3507
                as_pointer ?1 char ! && { decl ->s20_m_type ->s18_m_kind ? TYPE_KIND_POINTER ? == } && { decl ->s20_m_value ? 0 != } && { decl ->s20_m_value ->s19_m_kind ? 108 == } if
                {
# tcc_cc.c 3508
                    int nr_elems nr_elems decl ->s20_m_value ->s19_m_nr_children ? = ;

# tcc_cc.c 3511
                    decl ->s20_m_type ->s18_m_kind TYPE_KIND_ARRAY ? = ;
# tcc_cc.c 3512
                    decl ->s20_m_type ->s18_m_size nr_elems ? decl ->s20_m_type ->s18_m_members ? 0 4 * + ? array_element_size () * = ;
# tcc_cc.c 3513
                    decl ->s20_m_type ->s18_m_nr_elems nr_elems ? = ;
                }
            }
# tcc_cc.c 3516
            is_param ?1 char ! && { cur_struct_or_union ? 0 == } && { decl ->s20_m_storage_type ? ST_TYPEDEF ? != } && { type ->s18_m_kind ? TYPE_KIND_FUNCTION ? != } if
            {
# tcc_cc.c 3517
                decl ? gen_variable_decl () ;
            }
        }
        is_param ?1 char ! && { 44 accept_term () } ! if { break }
    }
# tcc_cc.c 3521
    is_param ?1 char || { 59 accept_term () } return
    0 return
}
void parse_struct_or_union_specifier ;
void parse_enum_specifier ;
void parse_type_specifier
{
    int ref_storage_type ref_storage_type =:
# tcc_cc.c 3548
    1003 accept_term () if
    {
# tcc_cc.c 3549
# tcc_cc.c 3550
        ref_storage_type ? 0 != if
        {
# tcc_cc.c 3550
            ref_storage_type ? ST_CONST ? = ;
        }
    }
# tcc_cc.c 3552
    1002 accept_term () if
    {
# tcc_cc.c 3553
# tcc_cc.c 3554
        1003 accept_term () if
        {
# tcc_cc.c 3555
# tcc_cc.c 3556
            ref_storage_type ? 0 != if
            {
# tcc_cc.c 3556
                ref_storage_type ? ST_CONST ? = ;
            }
        }
# tcc_cc.c 3558
        base_type_S8 ? return
    }
# tcc_cc.c 3560
    1026 accept_term () if
    {
# tcc_cc.c 3561
# tcc_cc.c 3562
        1002 accept_term () if
        {
# tcc_cc.c 3563
# tcc_cc.c 3564
            base_type_U8 ? return
        }
# tcc_cc.c 3566
        1019 accept_term () if
        {
# tcc_cc.c 3567
# tcc_cc.c 3568
            base_type_U16 ? return
        }
# tcc_cc.c 3570
        1017 accept_term () if
        {
# tcc_cc.c 3571
# tcc_cc.c 3572
            1017 accept_term () if
            {
# tcc_cc.c 3573
# tcc_cc.c 3574
                base_type_U64 ? return
            }
# tcc_cc.c 3576
            base_type_U32 ? return
        }
# tcc_cc.c 3578
        1016 accept_term () if
        {
# tcc_cc.c 3579
# tcc_cc.c 3580
            base_type_U32 ? return
        }
# tcc_cc.c 3582
        base_type_U32 ? return
    }
# tcc_cc.c 3584
    1019 accept_term () if
    {
# tcc_cc.c 3585
# tcc_cc.c 3586
        base_type_U16 ? return
    }
# tcc_cc.c 3588
    1016 accept_term () if
    {
# tcc_cc.c 3589
# tcc_cc.c 3590
        base_type_S32 ? return
    }
# tcc_cc.c 3592
    1017 accept_term () if
    {
# tcc_cc.c 3593
# tcc_cc.c 3594
        1007 accept_term () if
        {
# tcc_cc.c 3595
# tcc_cc.c 3596
            base_type_double ? return
        }
# tcc_cc.c 3598
        1017 accept_term () if
        {
# tcc_cc.c 3599
# tcc_cc.c 3600
            base_type_S64 ? return
        }
# tcc_cc.c 3602
        base_type_S32 ? return
    }
# tcc_cc.c 3604
    1011 accept_term () if
    {
# tcc_cc.c 3605
# tcc_cc.c 3606
        base_type_float ? return
    }
# tcc_cc.c 3608
    1007 accept_term () if
    {
# tcc_cc.c 3609
# tcc_cc.c 3610
        base_type_double ? return
    }
# tcc_cc.c 3612
    1027 accept_term () if
    {
# tcc_cc.c 3613
# tcc_cc.c 3614
        base_type_void ? return
    }
# tcc_cc.c 3616
    1022 accept_term () if
    {
# tcc_cc.c 3617
# tcc_cc.c 3618
        DK_STRUCT ? parse_struct_or_union_specifier () return
    }
# tcc_cc.c 3620
    1025 accept_term () if
    {
# tcc_cc.c 3621
# tcc_cc.c 3622
        DK_UNION ? parse_struct_or_union_specifier () return
    }
# tcc_cc.c 3624
    1009 accept_term () if
    {
# tcc_cc.c 3625
# tcc_cc.c 3626
        parse_enum_specifier () return
    }
# tcc_cc.c 3628
    token_it ->s11_m_kind ? 105 == if
    {
# tcc_cc.c 3629
        int decl decl DK_IDENT ? token_it ->s11_m_token ? find_decl () = ;

# tcc_cc.c 3631
        decl ? 0 == if
        {
# tcc_cc.c 3632
# tcc_cc.c 3633
            opt_trace_parser ?1 char if
            {
# tcc_cc.c 3634
                "Ident %s has no declaration\n" { int 1 __var_args __var_args token_it ->s11_m_token ? = ; __var_args printf () } ;
            }
# tcc_cc.c 2416
            {
# tcc_cc.c 2416
                opt_trace_parser ?1 char if
                {
# tcc_cc.c 2416
                    stderr ? "Fail in %s at %d\n" { int 2 __var_args __var_args "" = ; __var_args 4 + 0 = ; __var_args fprintf () } ;
                }
# tcc_cc.c 2416
                0 return
            }
        }
# tcc_cc.c 3637
        decl ->s20_m_type ? 0 == if
        {
# tcc_cc.c 2416
# tcc_cc.c 2416
            opt_trace_parser ?1 char if
            {
# tcc_cc.c 2416
                stderr ? "Fail in %s at %d\n" { int 2 __var_args __var_args "" = ; __var_args 4 + 0 = ; __var_args fprintf () } ;
            }
# tcc_cc.c 2416
            0 return
        }
# tcc_cc.c 3639
        decl ->s20_m_storage_type ? ST_TYPEDEF ? == if
        {
# tcc_cc.c 3640
# tcc_cc.c 3641
            opt_trace_parser ?1 char if
            {
# tcc_cc.c 3642
                "Ident %s is typedef\n" { int 1 __var_args __var_args decl ->s20_m_name ? = ; __var_args printf () } ;
            }
# tcc_cc.c 3643
            next_token () ;
# tcc_cc.c 3644
            decl ->s20_m_type ? return
        }
        else
        {
# tcc_cc.c 3647
# tcc_cc.c 3648
            opt_trace_parser ?1 char if
            {
# tcc_cc.c 3649
                "Ident %s is not a typedef\n" { int 1 __var_args __var_args token_it ->s11_m_token ? = ; __var_args printf () } ;
            }
# tcc_cc.c 2416
            {
# tcc_cc.c 2416
                opt_trace_parser ?1 char if
                {
# tcc_cc.c 2416
                    stderr ? "Fail in %s at %d\n" { int 2 __var_args __var_args "" = ; __var_args 4 + 0 = ; __var_args fprintf () } ;
                }
# tcc_cc.c 2416
                0 return
            }
        }
    }
# tcc_cc.c 2416
    {
# tcc_cc.c 2416
        opt_trace_parser ?1 char if
        {
# tcc_cc.c 2416
            stderr ? "Fail in %s at %d\n" { int 2 __var_args __var_args "" = ; __var_args 4 + 0 = ; __var_args fprintf () } ;
        }
# tcc_cc.c 2416
        0 return
    }
    0 return
}
void parse_struct_or_union_specifier
{
    int decl_kind decl_kind =:
    int type_kind type_kind decl_kind ? DK_STRUCT ? == if { TYPE_KIND_STRUCT ? } else { TYPE_KIND_UNION ? } = ;

    int type type 0 = ;

# tcc_cc.c 3664
    token_it ->s11_m_kind ? 105 == if
    {
# tcc_cc.c 3665
        int decl decl decl_kind ? token_it ->s11_m_token ? find_or_add_decl () = ;

# tcc_cc.c 3667
        decl ->s20_m_type ? 0 == if
        {
# tcc_cc.c 3668
# tcc_cc.c 3669
            decl ->s20_m_type type_kind ? 0 0 new_type () = ;
        }
# tcc_cc.c 3671
        type decl ->s20_m_type ? = ;
# tcc_cc.c 3672
        next_token () ;
    }
# tcc_cc.c 3674
    123 accept_term () if
    {
# tcc_cc.c 3675
        int parent parent cur_struct_or_union ? = ;

        int 3 this_struct_or_union
# tcc_cc.c 3678
        this_struct_or_union s22_m_is_struct + decl_kind ? DK_STRUCT ? == =1 ;
# tcc_cc.c 3679
        this_struct_or_union s22_m_pos + 0 = ;
# tcc_cc.c 3680
        this_struct_or_union s22_m_size + 0 = ;
# tcc_cc.c 3681
        cur_struct_or_union this_struct_or_union = ;
        int save_ident_decls save_ident_decls cur_ident_decls ? = ;

# tcc_cc.c 3683
        do
        {
# tcc_cc.c 3684
# tcc_cc.c 3685
            0 parse_declaration () ! if
            {
# tcc_cc.c 2416
# tcc_cc.c 2416
                opt_trace_parser ?1 char if
                {
# tcc_cc.c 2416
                    stderr ? "Fail in %s at %d\n" { int 2 __var_args __var_args "" = ; __var_args 4 + 0 = ; __var_args fprintf () } ;
                }
# tcc_cc.c 2416
                0 return
            }
            125 accept_term () ! ! if { break }
        }
        int nr_decls nr_decls 0 = ;

# tcc_cc.c 3689
        {
            int decl1 decl1 cur_ident_decls ? = ;

            do
            {
                decl1 ? save_ident_decls ? != ! if { break }
# tcc_cc.c 3690
                nr_decls $ ? 1 + = 1 - ;
                decl1 decl1 ->s20_m_prev ? = ;
            }
        }
# tcc_cc.c 3691
        type ? 0 == if
        {
# tcc_cc.c 3692
# tcc_cc.c 3693
            type type_kind ? this_struct_or_union s22_m_size + ? 0 new_type () = ;
        }
        else
        {
# tcc_cc.c 3696
            type ->s18_m_size this_struct_or_union s22_m_size + ? = ;
        }
        int 200 decls
        int i i nr_decls ? = ;

# tcc_cc.c 3699
        {
            int decl1 decl1 cur_ident_decls ? = ;

            do
            {
                decl1 ? save_ident_decls ? != ! if { break }
# tcc_cc.c 3700
                decls i $ ? 1 - = 4 * + decl1 ? = ;
                decl1 decl1 ->s20_m_prev ? = ;
            }
        }
# tcc_cc.c 3701
        {
# tcc_cc.c 3702
            gen_start_struct_or_union () ;
# tcc_cc.c 3703
            {
                int i i 0 = ;

                do
                {
                    i ? nr_decls ? <s ! if { break }
# tcc_cc.c 3704
                    decls i ? 4 * + ? gen_struct_or_union_member () ;
                    i $ ? 1 + = 1 - ;
                }
            }
        }
# tcc_cc.c 3706
        type ? nr_decls ? decls type_set_decls () ;
# tcc_cc.c 3707
        cur_ident_decls save_ident_decls ? = ;
# tcc_cc.c 3708
        cur_struct_or_union parent ? = ;
    }
# tcc_cc.c 3710
    type ? return
    0 return
}
void gen_enum_decl ;
void parse_enum_specifier
{
    int type type 0 = ;

# tcc_cc.c 3722
    token_it ->s11_m_kind ? 105 == if
    {
# tcc_cc.c 3723
        int decl decl DK_ENUM ? token_it ->s11_m_token ? find_or_add_decl () = ;

# tcc_cc.c 3725
        decl ->s20_m_type ? 0 == if
        {
# tcc_cc.c 3726
# tcc_cc.c 3727
            decl ->s20_m_type DK_ENUM ? 4 0 new_type () = ;
        }
# tcc_cc.c 3729
        type decl ->s20_m_type ? = ;
# tcc_cc.c 3730
        next_token () ;
    }
    int next_enum_val next_enum_val 0 = ;

# tcc_cc.c 3733
    123 accept_term () if
    {
# tcc_cc.c 3734
# tcc_cc.c 3735
        {
            do
            {
# tcc_cc.c 3736
# tcc_cc.c 3737
                token_it ->s11_m_kind ? 105 != if
                {
# tcc_cc.c 2416
# tcc_cc.c 2416
                    opt_trace_parser ?1 char if
                    {
# tcc_cc.c 2416
                        stderr ? "Fail in %s at %d\n" { int 2 __var_args __var_args "" = ; __var_args 4 + 0 = ; __var_args fprintf () } ;
                    }
# tcc_cc.c 2416
                    0 return
                }
                int const_decl const_decl DK_IDENT ? token_it ->s11_m_token ? base_type_S32 ? add_decl () = ;

# tcc_cc.c 3740
                next_token () ;
# tcc_cc.c 3741
                61 accept_term () if
                {
# tcc_cc.c 3742
                    int expr expr parse_conditional_expr () = ;

# tcc_cc.c 3744
                    expr ? 0 == if
                    {
# tcc_cc.c 2416
# tcc_cc.c 2416
                        opt_trace_parser ?1 char if
                        {
# tcc_cc.c 2416
                            stderr ? "Fail in %s at %d\n" { int 2 __var_args __var_args "" = ; __var_args 4 + 0 = ; __var_args fprintf () } ;
                        }
# tcc_cc.c 2416
                        0 return
                    }
# tcc_cc.c 3746
                    next_enum_val expr ? expr_eval () = ;
                }
# tcc_cc.c 3748
                const_decl ->s20_m_value next_enum_val ? new_expr_int_value () = ;
# tcc_cc.c 3749
                const_decl ->s20_m_storage_type ST_CONST ? = ;
# tcc_cc.c 3750
                const_decl ? gen_enum_decl () ;
# tcc_cc.c 3751
                next_enum_val $ ? 1 + = 1 - ;
# tcc_cc.c 3752
                44 accept_term () ! if
                {
# tcc_cc.c 3753
                    break
                }
# tcc_cc.c 3754
                token_it ->s11_m_kind ? 125 == if
                {
# tcc_cc.c 3755
                    break
                }
            }
        }
# tcc_cc.c 3757
        125 accept_term () ! if
        {
# tcc_cc.c 2416
# tcc_cc.c 2416
            opt_trace_parser ?1 char if
            {
# tcc_cc.c 2416
                stderr ? "Fail in %s at %d\n" { int 2 __var_args __var_args "" = ; __var_args 4 + 0 = ; __var_args fprintf () } ;
            }
# tcc_cc.c 2416
            0 return
        }
    }
# tcc_cc.c 3760
    type ? 0 == if
    {
# tcc_cc.c 3761
        type DK_ENUM ? 4 0 new_type () = ;
    }
# tcc_cc.c 3762
    type ? return
    0 return
}
void parse_initializer
{
# tcc_cc.c 3774
    123 accept_term () if
    {
# tcc_cc.c 3775
        int 2000 exprs
        int nr_exprs nr_exprs 0 = ;

# tcc_cc.c 3778
        {
            do
            {
# tcc_cc.c 3779
# tcc_cc.c 3780
                exprs nr_exprs $ ? 1 + = 1 - 4 * + parse_initializer () = ;
# tcc_cc.c 3781
                44 accept_term () ! if
                {
# tcc_cc.c 3782
                    break
                }
# tcc_cc.c 3783
                token_it ->s11_m_kind ? 125 == if
                {
# tcc_cc.c 3784
                    break
                }
            }
        }
# tcc_cc.c 3786
        125 accept_term () ! if
        {
# tcc_cc.c 2416
# tcc_cc.c 2416
            opt_trace_parser ?1 char if
            {
# tcc_cc.c 2416
                stderr ? "Fail in %s at %d\n" { int 2 __var_args __var_args "" = ; __var_args 4 + 0 = ; __var_args fprintf () } ;
            }
# tcc_cc.c 2416
            0 return
        }
        int expr_list expr_list 108 nr_exprs ? new_expr () = ;

# tcc_cc.c 3789
        {
            int i i 0 = ;

            do
            {
                i ? nr_exprs ? <s ! if { break }
# tcc_cc.c 3790
                expr_list ->s19_m_children i ? 4 * + exprs i ? 4 * + ? = ;
                i $ ? 1 + = 1 - ;
            }
        }
# tcc_cc.c 3791
        expr_list ? return
    }
# tcc_cc.c 3793
    parse_assignment_expr () return
    0 return
}
int add_tracing
int default_case_nr
int fall_through_case_nr
int label_statement
void parse_statement
{
    int continue_expr continue_expr =:
    int in_block in_block =:
# tcc_cc.c 3823
    {
        do
        {
# tcc_cc.c 3824
# tcc_cc.c 3825
            token_it ->s11_m_kind ? 105 == if
            {
# tcc_cc.c 3826
                int label label token_it ->s11_m_token ? find_label () = ;

# tcc_cc.c 3828
                label ? 0 == && { DK_IDENT ? token_it ->s11_m_token ? find_decl () 0 == } if
                {
# tcc_cc.c 3829
                    label token_it ->s11_m_token ? find_or_add_label () = ;
                }
# tcc_cc.c 3830
                label ? 0 != if
                {
# tcc_cc.c 3831
# tcc_cc.c 3832
                    label_statement 1 =1 ;
# tcc_cc.c 3833
                    gen_indent () ;
# tcc_cc.c 3834
                    fcode ? ":%s\n" { int 1 __var_args __var_args label ->s21_m_name ? = ; __var_args fprintf () } ;
# tcc_cc.c 3835
                    next_token () ;
# tcc_cc.c 3836
                    58 accept_term () ! if
                    {
# tcc_cc.c 2415
# tcc_cc.c 2415
                        opt_trace_parser ?1 char if
                        {
# tcc_cc.c 2415
                            stderr ? "Fail in %s at %d\n" { int 2 __var_args __var_args "" = ; __var_args 4 + 0 = ; __var_args fprintf () } ;
                        }
# tcc_cc.c 2415
                        0 return
                    }
# tcc_cc.c 3838
                    continue
                }
            }
# tcc_cc.c 3841
            break
        }
    }
# tcc_cc.c 3843
    fcode ? "# %s %d\n" { int 2 __var_args __var_args token_it ->s11_m_filename ? = ; __var_args 4 + token_it ->s11_m_line ? = ; __var_args fprintf () } ;
# tcc_cc.c 3844
    1014 accept_term () if
    {
# tcc_cc.c 3845
# tcc_cc.c 3846
        40 accept_term () ! if
        {
# tcc_cc.c 2415
# tcc_cc.c 2415
            opt_trace_parser ?1 char if
            {
# tcc_cc.c 2415
                stderr ? "Fail in %s at %d\n" { int 2 __var_args __var_args "" = ; __var_args 4 + 0 = ; __var_args fprintf () } ;
            }
# tcc_cc.c 2415
            0 return
        }
        int cond cond parse_expr () = ;

# tcc_cc.c 3849
        cond ? 0 == if
        {
# tcc_cc.c 2415
# tcc_cc.c 2415
            opt_trace_parser ?1 char if
            {
# tcc_cc.c 2415
                stderr ? "Fail in %s at %d\n" { int 2 __var_args __var_args "" = ; __var_args 4 + 0 = ; __var_args fprintf () } ;
            }
# tcc_cc.c 2415
            0 return
        }
# tcc_cc.c 3851
        41 accept_term () ! if
        {
# tcc_cc.c 2415
# tcc_cc.c 2415
            opt_trace_parser ?1 char if
            {
# tcc_cc.c 2415
                stderr ? "Fail in %s at %d\n" { int 2 __var_args __var_args "" = ; __var_args 4 + 0 = ; __var_args fprintf () } ;
            }
# tcc_cc.c 2415
            0 return
        }
# tcc_cc.c 3853
        gen_indent () ;
# tcc_cc.c 3854
        cond ? 1 gen_expr () ;
# tcc_cc.c 3855
        fcode ? "if\n" 0 fprintf () ;
# tcc_cc.c 3856
        gen_stats_open () ;
# tcc_cc.c 3857
        1 continue_expr ? parse_statement () ! if
        {
# tcc_cc.c 2415
# tcc_cc.c 2415
            opt_trace_parser ?1 char if
            {
# tcc_cc.c 2415
                stderr ? "Fail in %s at %d\n" { int 2 __var_args __var_args "" = ; __var_args 4 + 0 = ; __var_args fprintf () } ;
            }
# tcc_cc.c 2415
            0 return
        }
# tcc_cc.c 3859
        gen_stats_close () ;
# tcc_cc.c 3860
        1008 accept_term () if
        {
# tcc_cc.c 3861
# tcc_cc.c 3862
            gen_indent () ;
# tcc_cc.c 3863
            fcode ? "else\n" 0 fprintf () ;
# tcc_cc.c 3864
            gen_stats_open () ;
# tcc_cc.c 3865
            1 continue_expr ? parse_statement () ! if
            {
# tcc_cc.c 2415
# tcc_cc.c 2415
                opt_trace_parser ?1 char if
                {
# tcc_cc.c 2415
                    stderr ? "Fail in %s at %d\n" { int 2 __var_args __var_args "" = ; __var_args 4 + 0 = ; __var_args fprintf () } ;
                }
# tcc_cc.c 2415
                0 return
            }
# tcc_cc.c 3867
            gen_stats_close () ;
        }
# tcc_cc.c 3869
        1 return
    }
# tcc_cc.c 3871
    1028 accept_term () if
    {
# tcc_cc.c 3872
# tcc_cc.c 3873
        gen_indent () ;
# tcc_cc.c 3874
        fcode ? "do\n" 0 fprintf () ;
# tcc_cc.c 3875
        gen_stats_open () ;
# tcc_cc.c 3876
        40 accept_term () ! if
        {
# tcc_cc.c 2415
# tcc_cc.c 2415
            opt_trace_parser ?1 char if
            {
# tcc_cc.c 2415
                stderr ? "Fail in %s at %d\n" { int 2 __var_args __var_args "" = ; __var_args 4 + 0 = ; __var_args fprintf () } ;
            }
# tcc_cc.c 2415
            0 return
        }
        int cond cond parse_expr () = ;

# tcc_cc.c 3879
        cond ? 0 == if
        {
# tcc_cc.c 2415
# tcc_cc.c 2415
            opt_trace_parser ?1 char if
            {
# tcc_cc.c 2415
                stderr ? "Fail in %s at %d\n" { int 2 __var_args __var_args "" = ; __var_args 4 + 0 = ; __var_args fprintf () } ;
            }
# tcc_cc.c 2415
            0 return
        }
# tcc_cc.c 3881
        41 accept_term () ! if
        {
# tcc_cc.c 2415
# tcc_cc.c 2415
            opt_trace_parser ?1 char if
            {
# tcc_cc.c 2415
                stderr ? "Fail in %s at %d\n" { int 2 __var_args __var_args "" = ; __var_args 4 + 0 = ; __var_args fprintf () } ;
            }
# tcc_cc.c 2415
            0 return
        }
# tcc_cc.c 3883
        gen_indent () ;
# tcc_cc.c 3884
        cond ? 1 gen_expr () ;
# tcc_cc.c 3885
        fcode ? "! if { break }\n" 0 fprintf () ;
# tcc_cc.c 3886
        1 0 parse_statement () ! if
        {
# tcc_cc.c 2415
# tcc_cc.c 2415
            opt_trace_parser ?1 char if
            {
# tcc_cc.c 2415
                stderr ? "Fail in %s at %d\n" { int 2 __var_args __var_args "" = ; __var_args 4 + 0 = ; __var_args fprintf () } ;
            }
# tcc_cc.c 2415
            0 return
        }
# tcc_cc.c 3888
        gen_stats_close () ;
# tcc_cc.c 3889
        1 return
    }
# tcc_cc.c 3891
    1006 accept_term () if
    {
# tcc_cc.c 3892
# tcc_cc.c 3893
        gen_indent () ;
# tcc_cc.c 3894
        fcode ? "do\n" 0 fprintf () ;
# tcc_cc.c 3895
        gen_stats_open () ;
# tcc_cc.c 3896
        1 0 parse_statement () ! if
        {
# tcc_cc.c 2415
# tcc_cc.c 2415
            opt_trace_parser ?1 char if
            {
# tcc_cc.c 2415
                stderr ? "Fail in %s at %d\n" { int 2 __var_args __var_args "" = ; __var_args 4 + 0 = ; __var_args fprintf () } ;
            }
# tcc_cc.c 2415
            0 return
        }
# tcc_cc.c 3898
        1028 accept_term () ! if
        {
# tcc_cc.c 2415
# tcc_cc.c 2415
            opt_trace_parser ?1 char if
            {
# tcc_cc.c 2415
                stderr ? "Fail in %s at %d\n" { int 2 __var_args __var_args "" = ; __var_args 4 + 0 = ; __var_args fprintf () } ;
            }
# tcc_cc.c 2415
            0 return
        }
# tcc_cc.c 3900
        40 accept_term () ! if
        {
# tcc_cc.c 2415
# tcc_cc.c 2415
            opt_trace_parser ?1 char if
            {
# tcc_cc.c 2415
                stderr ? "Fail in %s at %d\n" { int 2 __var_args __var_args "" = ; __var_args 4 + 0 = ; __var_args fprintf () } ;
            }
# tcc_cc.c 2415
            0 return
        }
        int cond cond parse_expr () = ;

# tcc_cc.c 3903
        cond ? 0 == if
        {
# tcc_cc.c 2415
# tcc_cc.c 2415
            opt_trace_parser ?1 char if
            {
# tcc_cc.c 2415
                stderr ? "Fail in %s at %d\n" { int 2 __var_args __var_args "" = ; __var_args 4 + 0 = ; __var_args fprintf () } ;
            }
# tcc_cc.c 2415
            0 return
        }
# tcc_cc.c 3905
        41 accept_term () ! if
        {
# tcc_cc.c 2415
# tcc_cc.c 2415
            opt_trace_parser ?1 char if
            {
# tcc_cc.c 2415
                stderr ? "Fail in %s at %d\n" { int 2 __var_args __var_args "" = ; __var_args 4 + 0 = ; __var_args fprintf () } ;
            }
# tcc_cc.c 2415
            0 return
        }
# tcc_cc.c 3907
        59 accept_term () ! if
        {
# tcc_cc.c 2415
# tcc_cc.c 2415
            opt_trace_parser ?1 char if
            {
# tcc_cc.c 2415
                stderr ? "Fail in %s at %d\n" { int 2 __var_args __var_args "" = ; __var_args 4 + 0 = ; __var_args fprintf () } ;
            }
# tcc_cc.c 2415
            0 return
        }
# tcc_cc.c 3909
        gen_indent () ;
# tcc_cc.c 3910
        cond ? 1 gen_expr () ;
# tcc_cc.c 3911
        fcode ? "! if { break }\n" 0 fprintf () ;
# tcc_cc.c 3912
        gen_stats_close () ;
# tcc_cc.c 3913
        1 return
    }
# tcc_cc.c 3915
    1012 accept_term () if
    {
# tcc_cc.c 3916
# tcc_cc.c 3917
        gen_stats_open () ;
        int save_ident_decls save_ident_decls cur_ident_decls ? = ;

# tcc_cc.c 3919
        40 accept_term () ! if
        {
# tcc_cc.c 2415
# tcc_cc.c 2415
            opt_trace_parser ?1 char if
            {
# tcc_cc.c 2415
                stderr ? "Fail in %s at %d\n" { int 2 __var_args __var_args "" = ; __var_args 4 + 0 = ; __var_args fprintf () } ;
            }
# tcc_cc.c 2415
            0 return
        }
# tcc_cc.c 3921
        0 parse_declaration () ! if
        {
# tcc_cc.c 3922
            int init_expr init_expr parse_expr () = ;

# tcc_cc.c 3924
            init_expr ? gen_stat_expr () ;
# tcc_cc.c 3925
            59 accept_term () ! if
            {
# tcc_cc.c 2415
# tcc_cc.c 2415
                opt_trace_parser ?1 char if
                {
# tcc_cc.c 2415
                    stderr ? "Fail in %s at %d\n" { int 2 __var_args __var_args "" = ; __var_args 4 + 0 = ; __var_args fprintf () } ;
                }
# tcc_cc.c 2415
                0 return
            }
        }
# tcc_cc.c 3928
        gen_indent () ;
# tcc_cc.c 3929
        fcode ? "do\n" 0 fprintf () ;
# tcc_cc.c 3930
        gen_stats_open () ;
        int cond cond parse_expr () = ;

# tcc_cc.c 3932
        cond ? 0 != if
        {
# tcc_cc.c 3933
# tcc_cc.c 3934
            gen_indent () ;
# tcc_cc.c 3935
            cond ? 1 gen_expr () ;
# tcc_cc.c 3936
            fcode ? "! if { break }\n" 0 fprintf () ;
        }
# tcc_cc.c 3938
        59 accept_term () ! if
        {
# tcc_cc.c 2415
# tcc_cc.c 2415
            opt_trace_parser ?1 char if
            {
# tcc_cc.c 2415
                stderr ? "Fail in %s at %d\n" { int 2 __var_args __var_args "" = ; __var_args 4 + 0 = ; __var_args fprintf () } ;
            }
# tcc_cc.c 2415
            0 return
        }
        int next_expr next_expr parse_expr () = ;

# tcc_cc.c 3941
        41 accept_term () ! if
        {
# tcc_cc.c 2415
# tcc_cc.c 2415
            opt_trace_parser ?1 char if
            {
# tcc_cc.c 2415
                stderr ? "Fail in %s at %d\n" { int 2 __var_args __var_args "" = ; __var_args 4 + 0 = ; __var_args fprintf () } ;
            }
# tcc_cc.c 2415
            0 return
        }
# tcc_cc.c 3943
        1 next_expr ? parse_statement () ! if
        {
# tcc_cc.c 2415
# tcc_cc.c 2415
            opt_trace_parser ?1 char if
            {
# tcc_cc.c 2415
                stderr ? "Fail in %s at %d\n" { int 2 __var_args __var_args "" = ; __var_args 4 + 0 = ; __var_args fprintf () } ;
            }
# tcc_cc.c 2415
            0 return
        }
# tcc_cc.c 3945
        next_expr ? gen_stat_expr () ;
# tcc_cc.c 3946
        cur_ident_decls save_ident_decls ? = ;
# tcc_cc.c 3947
        gen_stats_close () ;
# tcc_cc.c 3948
        gen_stats_close () ;
# tcc_cc.c 3949
        1 return
    }
# tcc_cc.c 3951
    1000 accept_term () if
    {
# tcc_cc.c 3952
# tcc_cc.c 3953
        59 accept_term () ! if
        {
# tcc_cc.c 2415
# tcc_cc.c 2415
            opt_trace_parser ?1 char if
            {
# tcc_cc.c 2415
                stderr ? "Fail in %s at %d\n" { int 2 __var_args __var_args "" = ; __var_args 4 + 0 = ; __var_args fprintf () } ;
            }
# tcc_cc.c 2415
            0 return
        }
# tcc_cc.c 3955
        gen_indent () ;
# tcc_cc.c 3956
        fcode ? "break\n" 0 fprintf () ;
# tcc_cc.c 3957
        1 return
    }
# tcc_cc.c 3959
    1004 accept_term () if
    {
# tcc_cc.c 3960
# tcc_cc.c 3961
        59 accept_term () ! if
        {
# tcc_cc.c 2415
# tcc_cc.c 2415
            opt_trace_parser ?1 char if
            {
# tcc_cc.c 2415
                stderr ? "Fail in %s at %d\n" { int 2 __var_args __var_args "" = ; __var_args 4 + 0 = ; __var_args fprintf () } ;
            }
# tcc_cc.c 2415
            0 return
        }
# tcc_cc.c 3963
        continue_expr ? gen_stat_expr () ;
# tcc_cc.c 3964
        gen_indent () ;
# tcc_cc.c 3965
        fcode ? "continue\n" 0 fprintf () ;
# tcc_cc.c 3966
        1 return
    }
# tcc_cc.c 3968
    1023 accept_term () if
    {
# tcc_cc.c 3969
# tcc_cc.c 3970
        40 accept_term () ! if
        {
# tcc_cc.c 2415
# tcc_cc.c 2415
            opt_trace_parser ?1 char if
            {
# tcc_cc.c 2415
                stderr ? "Fail in %s at %d\n" { int 2 __var_args __var_args "" = ; __var_args 4 + 0 = ; __var_args fprintf () } ;
            }
# tcc_cc.c 2415
            0 return
        }
        int switch_expr switch_expr parse_expr () = ;

# tcc_cc.c 3973
        switch_expr ? 0 == if
        {
# tcc_cc.c 2415
# tcc_cc.c 2415
            opt_trace_parser ?1 char if
            {
# tcc_cc.c 2415
                stderr ? "Fail in %s at %d\n" { int 2 __var_args __var_args "" = ; __var_args 4 + 0 = ; __var_args fprintf () } ;
            }
# tcc_cc.c 2415
            0 return
        }
# tcc_cc.c 3975
        41 accept_term () ! if
        {
# tcc_cc.c 2415
# tcc_cc.c 2415
            opt_trace_parser ?1 char if
            {
# tcc_cc.c 2415
                stderr ? "Fail in %s at %d\n" { int 2 __var_args __var_args "" = ; __var_args 4 + 0 = ; __var_args fprintf () } ;
            }
# tcc_cc.c 2415
            0 return
        }
# tcc_cc.c 3977
        123 accept_term () ! if
        {
# tcc_cc.c 2415
# tcc_cc.c 2415
            opt_trace_parser ?1 char if
            {
# tcc_cc.c 2415
                stderr ? "Fail in %s at %d\n" { int 2 __var_args __var_args "" = ; __var_args 4 + 0 = ; __var_args fprintf () } ;
            }
# tcc_cc.c 2415
            0 return
        }
# tcc_cc.c 3979
        gen_indent () ;
# tcc_cc.c 3980
        switch_expr ? 1 gen_expr () ;
# tcc_cc.c 3981
        fcode ? "do\n" 0 fprintf () ;
# tcc_cc.c 3982
        gen_stats_open () ;
        int fall_through fall_through 0 =1 ;

        int has_default has_default 0 =1 ;

# tcc_cc.c 3985
        do
        {
            token_it ->s11_m_kind ? 1001 == || { token_it ->s11_m_kind ? 1005 == } ! if { break }
# tcc_cc.c 3986
            int 100 case_labels
            int nr_case_labels nr_case_labels 0 = ;

            int default_case default_case 0 =1 ;

# tcc_cc.c 3990
            {
                do
                {
# tcc_cc.c 3991
# tcc_cc.c 3992
                    1001 accept_term () if
                    {
# tcc_cc.c 3993
                        int expr expr parse_expr () = ;

# tcc_cc.c 3995
                        expr ? 0 == if
                        {
# tcc_cc.c 2415
# tcc_cc.c 2415
                            opt_trace_parser ?1 char if
                            {
# tcc_cc.c 2415
                                stderr ? "Fail in %s at %d\n" { int 2 __var_args __var_args "" = ; __var_args 4 + 0 = ; __var_args fprintf () } ;
                            }
# tcc_cc.c 2415
                            0 return
                        }
# tcc_cc.c 3997
                        58 accept_term () ! if
                        {
# tcc_cc.c 2415
# tcc_cc.c 2415
                            opt_trace_parser ?1 char if
                            {
# tcc_cc.c 2415
                                stderr ? "Fail in %s at %d\n" { int 2 __var_args __var_args "" = ; __var_args 4 + 0 = ; __var_args fprintf () } ;
                            }
# tcc_cc.c 2415
                            0 return
                        }
# tcc_cc.c 3999
                        nr_case_labels ? 100 <s if
                        {
# tcc_cc.c 4000
                            case_labels nr_case_labels $ ? 1 + = 1 - 4 * + expr ? expr_eval () = ;
                        }
                        else
                        {
# tcc_cc.c 4002
                            "Error: more than 50 case label\n" 0 printf () ;
                        }
                    }
                    else
                    {
# tcc_cc.c 4004
                        1005 accept_term () if
                        {
# tcc_cc.c 4005
# tcc_cc.c 4006
                            58 accept_term () ! if
                            {
# tcc_cc.c 2415
# tcc_cc.c 2415
                                opt_trace_parser ?1 char if
                                {
# tcc_cc.c 2415
                                    stderr ? "Fail in %s at %d\n" { int 2 __var_args __var_args "" = ; __var_args 4 + 0 = ; __var_args fprintf () } ;
                                }
# tcc_cc.c 2415
                                0 return
                            }
# tcc_cc.c 4008
                            default_case 1 =1 ;
# tcc_cc.c 4009
                            has_default 1 =1 ;
                        }
                        else
                        {
# tcc_cc.c 4012
                            break
                        }
                    }
                }
            }
# tcc_cc.c 4014
            nr_case_labels ? 0 == if
            {
# tcc_cc.c 4015
# tcc_cc.c 4016
                gen_indent () ;
# tcc_cc.c 4017
                fcode ? "0 " 0 fprintf () ;
            }
            else
            {
# tcc_cc.c 4020
# tcc_cc.c 4021
                {
                    int i i 0 = ;

                    do
                    {
                        i ? nr_case_labels ? <s ! if { break }
# tcc_cc.c 4022
# tcc_cc.c 4023
                        gen_indent () ;
# tcc_cc.c 4024
                        i ? 0 >s if
                        {
# tcc_cc.c 4025
# tcc_cc.c 4026
                            fcode ? "|| { " 0 fprintf () ;
                        }
# tcc_cc.c 4029
                        fcode ? "$ %u == " { int 1 __var_args __var_args case_labels i ? 4 * + ? = ; __var_args fprintf () } ;
# tcc_cc.c 4030
                        i ? 1 + nr_case_labels ? <s if
                        {
# tcc_cc.c 4031
                            fcode ? "\n" 0 fprintf () ;
                        }
                        i $ ? 1 + = 1 - ;
                    }
                }
# tcc_cc.c 4033
                {
                    int i i 1 = ;

                    do
                    {
                        i ? nr_case_labels ? <s ! if { break }
# tcc_cc.c 4034
                        fcode ? "} " 0 fprintf () ;
                        i $ ? 1 + = 1 - ;
                    }
                }
# tcc_cc.c 4035
                nr_case_labels ? 1 >s if
                {
# tcc_cc.c 4036
                    fcode ? " " 0 fprintf () ;
                }
            }
# tcc_cc.c 4038
            fcode ? "if\n" 0 fprintf () ;
# tcc_cc.c 4039
            gen_stats_open () ;
# tcc_cc.c 4040
            nr_case_labels ? 0 >s if
            {
# tcc_cc.c 4041
# tcc_cc.c 4042
                gen_indent () ;
# tcc_cc.c 4043
                fcode ? ";\n" 0 fprintf () ;
            }
# tcc_cc.c 4045
            fall_through ?1 char if
            {
# tcc_cc.c 4046
# tcc_cc.c 4047
                gen_indent () ;
# tcc_cc.c 4048
                fcode ? ":_fall_through_case_%d\n" { int 1 __var_args __var_args fall_through_case_nr ? = ; __var_args fprintf () } ;
            }
# tcc_cc.c 4050
            default_case ?1 char if
            {
# tcc_cc.c 4051
# tcc_cc.c 4052
                gen_indent () ;
# tcc_cc.c 4053
                fcode ? ":_default_case_%d\n" { int 1 __var_args __var_args default_case_nr ? = ; __var_args fprintf () } ;
            }
            int has_break has_break 0 =1 ;

# tcc_cc.c 4057
            {
                int go go 1 =1 ;

                do
                {
                    go ?1 char ! if { break }
# tcc_cc.c 4058
# tcc_cc.c 4059
                    token_it ->s11_m_kind ? 1000 == || { token_it ->s11_m_kind ? 1018 == } || { token_it ->s11_m_kind ? 1013 == } if
                    {
# tcc_cc.c 4060
                        has_break 1 =1 ;
                    }
# tcc_cc.c 4061
                    label_statement 0 =1 ;
# tcc_cc.c 4062
                    go 0 continue_expr ? parse_statement () =1 ;
# tcc_cc.c 4063
                    label_statement ?1 char if
                    {
# tcc_cc.c 4064
                        has_break 0 =1 ;
                    }
                }
            }
# tcc_cc.c 4066
            token_it ->s11_m_kind ? 125 == && { has_break ?1 char ! } if
            {
# tcc_cc.c 4067
# tcc_cc.c 4068
                gen_indent () ;
# tcc_cc.c 4069
                fcode ? "break\n" 0 fprintf () ;
# tcc_cc.c 4070
                has_break 1 =1 ;
            }
# tcc_cc.c 4072
            fall_through has_break ?1 char ! =1 ;
# tcc_cc.c 4073
            fall_through ?1 char if
            {
# tcc_cc.c 4074
# tcc_cc.c 4075
                fall_through_case_nr $ ? 1 + = 1 - ;
# tcc_cc.c 4076
                gen_indent () ;
# tcc_cc.c 4077
                fcode ? "goto _fall_through_case_%d\n" { int 1 __var_args __var_args fall_through_case_nr ? = ; __var_args fprintf () } ;
            }
# tcc_cc.c 4079
            gen_stats_close () ;
        }
# tcc_cc.c 4081
        125 accept_term () ! if
        {
# tcc_cc.c 2415
# tcc_cc.c 2415
            opt_trace_parser ?1 char if
            {
# tcc_cc.c 2415
                stderr ? "Fail in %s at %d\n" { int 2 __var_args __var_args "" = ; __var_args 4 + 0 = ; __var_args fprintf () } ;
            }
# tcc_cc.c 2415
            0 return
        }
# tcc_cc.c 4083
        gen_indent () ;
# tcc_cc.c 4084
        has_default ?1 char if
        {
# tcc_cc.c 4085
# tcc_cc.c 4086
            fcode ? "; goto _default_case_%d\n" { int 1 __var_args __var_args default_case_nr ? = ; __var_args fprintf () } ;
# tcc_cc.c 4087
            default_case_nr $ ? 1 + = 1 - ;
        }
        else
        {
# tcc_cc.c 4090
            fcode ? "; break\n" 0 fprintf () ;
        }
# tcc_cc.c 4091
        gen_stats_close () ;
# tcc_cc.c 4092
        1 return
    }
# tcc_cc.c 4094
    1018 accept_term () if
    {
# tcc_cc.c 4095
# tcc_cc.c 4096
        gen_indent () ;
        int ret_value ret_value parse_expr () = ;

# tcc_cc.c 4098
        ret_value ? 0 != if
        {
# tcc_cc.c 4099
            ret_value ? 1 gen_expr () ;
        }
        else
        {
# tcc_cc.c 4101
            fcode ? "0 " 0 fprintf () ;
        }
# tcc_cc.c 4102
        add_tracing ?1 char if
        {
# tcc_cc.c 4103
            fcode ? "\"Exit\\n\" stdout ? fputs () ; \n" 0 fprintf () ;
        }
# tcc_cc.c 4104
        fcode ? "return\n" 0 fprintf () ;
# tcc_cc.c 4105
        59 accept_term () ! if
        {
# tcc_cc.c 2415
# tcc_cc.c 2415
            opt_trace_parser ?1 char if
            {
# tcc_cc.c 2415
                stderr ? "Fail in %s at %d\n" { int 2 __var_args __var_args "" = ; __var_args 4 + 0 = ; __var_args fprintf () } ;
            }
# tcc_cc.c 2415
            0 return
        }
# tcc_cc.c 4107
        1 return
    }
# tcc_cc.c 4109
    1013 accept_term () if
    {
# tcc_cc.c 4110
# tcc_cc.c 4111
        token_it ->s11_m_token ? find_or_add_label () ;
# tcc_cc.c 4112
        gen_indent () ;
# tcc_cc.c 4113
        fcode ? "goto %s\n" { int 1 __var_args __var_args token_it ->s11_m_token ? = ; __var_args fprintf () } ;
# tcc_cc.c 4114
        next_token () ;
# tcc_cc.c 4115
        59 accept_term () ! if
        {
# tcc_cc.c 2415
# tcc_cc.c 2415
            opt_trace_parser ?1 char if
            {
# tcc_cc.c 2415
                stderr ? "Fail in %s at %d\n" { int 2 __var_args __var_args "" = ; __var_args 4 + 0 = ; __var_args fprintf () } ;
            }
# tcc_cc.c 2415
            0 return
        }
# tcc_cc.c 4117
        1 return
    }
# tcc_cc.c 4119
    123 accept_term () if
    {
# tcc_cc.c 4120
# tcc_cc.c 4121
        in_block ?1 char ! if
        {
# tcc_cc.c 4122
            gen_stats_open () ;
        }
# tcc_cc.c 4123
        continue_expr ? parse_statements () ! if
        {
# tcc_cc.c 2415
# tcc_cc.c 2415
            opt_trace_parser ?1 char if
            {
# tcc_cc.c 2415
                stderr ? "Fail in %s at %d\n" { int 2 __var_args __var_args "" = ; __var_args 4 + 0 = ; __var_args fprintf () } ;
            }
# tcc_cc.c 2415
            0 return
        }
# tcc_cc.c 4124
# tcc_cc.c 4125
        125 accept_term () ! if
        {
# tcc_cc.c 2415
# tcc_cc.c 2415
            opt_trace_parser ?1 char if
            {
# tcc_cc.c 2415
                stderr ? "Fail in %s at %d\n" { int 2 __var_args __var_args "" = ; __var_args 4 + 0 = ; __var_args fprintf () } ;
            }
# tcc_cc.c 2415
            0 return
        }
# tcc_cc.c 4127
        in_block ?1 char ! if
        {
# tcc_cc.c 4128
            gen_stats_close () ;
        }
# tcc_cc.c 4129
        1 return
    }
    int expr expr parse_expr () = ;

# tcc_cc.c 4132
    expr ? gen_stat_expr () ;
# tcc_cc.c 4133
    59 accept_term () ! if
    {
# tcc_cc.c 2415
# tcc_cc.c 2415
        opt_trace_parser ?1 char if
        {
# tcc_cc.c 2415
            stderr ? "Fail in %s at %d\n" { int 2 __var_args __var_args "" = ; __var_args 4 + 0 = ; __var_args fprintf () } ;
        }
# tcc_cc.c 2415
        0 return
    }
# tcc_cc.c 4135
    1 return
    0 return
}
void parse_statements
{
    int continue_expr continue_expr =:
    int save_ident_decls save_ident_decls cur_ident_decls ? = ;

# tcc_cc.c 4145
    do
    {
# tcc_cc.c 4146
        token_it ->s11_m_kind ? 125 != && { 0 parse_declaration () || { 0 continue_expr ? parse_statement () } } ! if { break }
    }
# tcc_cc.c 4148
    cur_ident_decls save_ident_decls ? = ;
# tcc_cc.c 4149
    1 return
    0 return
}
void add_base_type
{
    int base_type base_type =:
    int name name =:
# tcc_cc.c 4156
    DK_IDENT ? name ? base_type ? add_decl () ;
# tcc_cc.c 4157
    cur_ident_decls ->s20_m_storage_type ST_TYPEDEF ? = ;
    0 return
}
void add_function
{
    int result_type result_type =:
    int name name =:
    int type type TYPE_KIND_FUNCTION ? 4 1 new_type () = ;

# tcc_cc.c 4163
    type ->s18_m_members ? 0 4 * + result_type ? = ;
# tcc_cc.c 4164
    DK_IDENT ? name ? type ? add_decl () ;
    0 return
}
void add_predefined_types
{
# tcc_cc.c 4169
    "uint32_t" base_type_U32 ? add_base_type () ;
# tcc_cc.c 4170
    "int32_t" base_type_S32 ? add_base_type () ;
# tcc_cc.c 4171
    "uint16_t" base_type_U16 ? add_base_type () ;
# tcc_cc.c 4172
    "uint8_t" base_type_U8 ? add_base_type () ;
# tcc_cc.c 4173
    "int8_t" base_type_S8 ? add_base_type () ;
# tcc_cc.c 4174
    "size_t" base_type_U32 ? add_base_type () ;
# tcc_cc.c 4176
    "ssize_t" base_type_U32 ? add_base_type () ;
# tcc_cc.c 4177
    "jmp_buf" base_type_jmp_buf ? add_base_type () ;
    0 return
}
void parse_file
{
    int only_preprocess only_preprocess =:
    int input_filename input_filename =:
# tcc_cc.c 4182
    include_path ? input_filename ? strcpy () ;
# tcc_cc.c 4183
    end_include_prefix include_path ? = ;
# tcc_cc.c 4184
    {
        int s s include_path ? = ;

        do
        {
            s ? ?1 char 0 != ! if { break }
# tcc_cc.c 4185
            s ? ?1 char 47 == if
            {
# tcc_cc.c 4186
                end_include_prefix s ? 1 + = ;
            }
            s $ ? 1 + = 1 - ;
        }
    }
    int input_it input_it input_filename ? new_file_iterator () = ;

# tcc_cc.c 4189
    input_it ->s7_m_base s6_m_ch + ?1 char 0 == if
    {
# tcc_cc.c 4190
# tcc_cc.c 4191
        "ERROR: Could not open file %s or it was empty\n" { int 1 __var_args __var_args input_filename ? = ; __var_args printf () } ;
# tcc_cc.c 4192
        0 return
    }
    int splice_it splice_it input_it ->s7_m_base new_line_splice_iterator () = ;

    int comment_it comment_it splice_it ->s8_m_base new_comment_strip_iterator () = ;

    int include_it include_it comment_it ->s9_m_base new_include_iterator () = ;

    int tokenizer_it tokenizer_it include_it ->s10_m_base new_tokenizer () = ;

    int conditional_it conditional_it include_it ? tokenizer_it ->s12_m_base new_conditional_iterator () = ;

    int expand_it expand_it conditional_it ->s15_m_base new_expand_iterator () = ;

# tcc_cc.c 4201
    token_it expand_it ? = ;
# tcc_cc.c 4203
    token_it token_it ? 1 token_it ->s11_m_next ? () = ;
# tcc_cc.c 4205
    only_preprocess ?1 char if
    {
# tcc_cc.c 4206
# tcc_cc.c 4207
        "tcc_p.c" output_preprocessor () ;
# tcc_cc.c 4208
        1 return
    }
# tcc_cc.c 4211
    do
    {
        0 parse_declaration () ! if { break }
# tcc_cc.c 4212
    }
# tcc_cc.c 4215
    token_it ? 0 != && { token_it ->s11_m_kind ? 0 != } if
    {
# tcc_cc.c 4216
# tcc_cc.c 4217
        "Parsed %s till %s:%d.%d: kind:%d token:'%s'\n" { int 6 __var_args __var_args input_filename ? = ; __var_args 4 + token_it ->s11_m_filename ? = ; __var_args 8 + token_it ->s11_m_line ? = ; __var_args 12 + token_it ->s11_m_column ? = ; __var_args 16 + token_it ->s11_m_kind ? = ; __var_args 20 + token_it ->s11_m_token ? = ; __var_args printf () } ;
# tcc_cc.c 4218
        0 return
    }
# tcc_cc.c 4220
    1 return
    0 return
}
int indent
void gen_indent
{
# tcc_cc.c 4228
    {
        int i i 0 = ;

        do
        {
            i ? indent ? <s ! if { break }
# tcc_cc.c 4229
            fcode ? "    " 0 fprintf () ;
            i $ ? 1 + = 1 - ;
        }
    }
    0 return
}
void gen_newline
{
# tcc_cc.c 4234
    fcode ? "\n" 0 fprintf () ;
    0 return
}
int struct_union_nr
void gen_start_struct_or_union
{
# tcc_cc.c 4241
    struct_union_nr $ ? 1 + = 1 - ;
    0 return
}
void gen_enum_decl
{
    int decl decl =:
# tcc_cc.c 4246
    fcode ? "int %s\n" { int 1 __var_args __var_args decl ->s20_m_name ? = ; __var_args fprintf () } ;
    0 return
}
void gen_struct_or_union_member
{
    int decl decl =:
# tcc_cc.c 4251
    decl ->s20_m_su_nr struct_union_nr ? = ;
# tcc_cc.c 4252
    fcode ? "const s%d_m_%s %d\n" { int 3 __var_args __var_args struct_union_nr ? = ; __var_args 4 + decl ->s20_m_name ? = ; __var_args 8 + decl ->s20_m_pos ? = ; __var_args fprintf () } ;
    0 return
}
void gen_initializer ;
void gen_variable_decl
{
    int decl decl =:
# tcc_cc.c 4259
    gen_indent () ;
# tcc_cc.c 4260
    decl ->s20_m_storage_type ? ST_STATIC ? == if
    {
# tcc_cc.c 4261
        fcode ? "static " 0 fprintf () ;
    }
    else
    {
# tcc_cc.c 4263
        fcode ? "int " 0 fprintf () ;
    }
# tcc_cc.c 4264
    decl ->s20_m_type ->s18_m_size ? 4 >s if
    {
# tcc_cc.c 4265
        fcode ? "%d " { int 1 __var_args __var_args decl ->s20_m_type ->s18_m_size ? 3 + 4 /s = ; __var_args fprintf () } ;
    }
# tcc_cc.c 4266
    fcode ? "%s" { int 1 __var_args __var_args decl ->s20_m_name ? = ; __var_args fprintf () } ;
# tcc_cc.c 4267
    inside_function ?1 char && { decl ->s20_m_value ? 0 != } if
    {
# tcc_cc.c 4268
# tcc_cc.c 4269
        fcode ? " %s " { int 1 __var_args __var_args decl ->s20_m_name ? = ; __var_args fprintf () } ;
# tcc_cc.c 4270
        decl ->s20_m_value ? decl ->s20_m_type ? gen_initializer () ;
    }
# tcc_cc.c 4272
    fcode ? "\n" 0 fprintf () ;
    0 return
}
void gen_function_start
{
    int decl decl =:
    int is_main is_main decl ->s20_m_name ? "main" strcmp () 0 == =1 ;

# tcc_cc.c 4278
    is_main ?1 char if
    {
# tcc_cc.c 4279
        fcode ? "void __init_globals__ ;\n" 0 fprintf () ;
    }
    int type type decl ->s20_m_type ? = ;

# tcc_cc.c 4281
    type ->s18_m_members ? 0 4 * + ->s18_m_size ? 4 >s if
    {
# tcc_cc.c 4282
        "Warning: return type %s has size %d\n" { int 2 __var_args __var_args decl ->s20_m_name ? = ; __var_args 4 + type ->s18_m_members ? 0 4 * + ->s18_m_size ? = ; __var_args printf () } ;
    }
# tcc_cc.c 4283
    fcode ? "void %s\n{\n" { int 1 __var_args __var_args decl ->s20_m_name ? = ; __var_args fprintf () } ;
# tcc_cc.c 4284
    indent $ ? 1 + = 1 - ;
# tcc_cc.c 4285
    {
        int i i type ->s18_m_nr_decls ? 1 - = ;

        do
        {
            i ? 0 >=s ! if { break }
# tcc_cc.c 4286
            int mem_decl mem_decl type ->s18_m_decls ? i ? 4 * + ? = ;

# tcc_cc.c 4288
            mem_decl ? 0 == if
            {
# tcc_cc.c 4289
# tcc_cc.c 4290
                gen_indent () ;
# tcc_cc.c 4291
                fcode ? "int __var_args __var_args =:\n" 0 fprintf () ;
            }
            else
            {
# tcc_cc.c 4294
# tcc_cc.c 4295
                mem_decl ->s20_m_type ->s18_m_size ? 4 >s if
                {
# tcc_cc.c 4296
                    "Warning: argument %s of %s has size %d\n" { int 3 __var_args __var_args mem_decl ->s20_m_name ? = ; __var_args 4 + decl ->s20_m_name ? = ; __var_args 8 + mem_decl ->s20_m_type ->s18_m_size ? = ; __var_args printf () } ;
                }
# tcc_cc.c 4297
                gen_indent () ;
# tcc_cc.c 4298
                fcode ? "int %s %s =:\n" { int 2 __var_args __var_args mem_decl ->s20_m_name ? = ; __var_args 4 + mem_decl ->s20_m_name ? = ; __var_args fprintf () } ;
            }
            i $ ? 1 - = 1 + ;
        }
    }
# tcc_cc.c 4301
    is_main ?1 char if
    {
# tcc_cc.c 4302
# tcc_cc.c 4303
        gen_indent () ;
# tcc_cc.c 4304
        fcode ? "__init_globals__ ()\n" 0 fprintf () ;
# tcc_cc.c 4305
        gen_indent () ;
# tcc_cc.c 4306
        fcode ? "_sys_env argv ? argc ? 4 * 4 + + = ;\n" 0 fprintf () ;
    }
# tcc_cc.c 4308
    add_tracing ?1 char if
    {
# tcc_cc.c 4309
# tcc_cc.c 4310
        gen_indent () ;
# tcc_cc.c 4311
        fcode ? "\"Enter %s\\n\" stdout ? fputs () ;\n" { int 1 __var_args __var_args decl ->s20_m_name ? = ; __var_args fprintf () } ;
    }
# tcc_cc.c 4313
    inside_function 1 =1 ;
    0 return
}
void gen_function_end
{
# tcc_cc.c 4318
    inside_function 0 =1 ;
# tcc_cc.c 4319
    indent $ ? 1 - = 1 + ;
# tcc_cc.c 4320
    fcode ? "\t" 0 fprintf () ;
# tcc_cc.c 4321
    add_tracing ?1 char if
    {
# tcc_cc.c 4322
        fcode ? "\"Exit\\n\" stdout ? fputs () ; \n" 0 fprintf () ;
    }
# tcc_cc.c 4323
    fcode ? "0 return\n}\n" 0 fprintf () ;
    0 return
}
void gen_stats_open
{
# tcc_cc.c 4328
    gen_indent () ;
# tcc_cc.c 4329
    fcode ? "{\n" 0 fprintf () ;
# tcc_cc.c 4330
    indent $ ? 1 + = 1 - ;
    0 return
}
void gen_stats_close
{
# tcc_cc.c 4335
    indent $ ? 1 - = 1 + ;
# tcc_cc.c 4336
    gen_indent () ;
# tcc_cc.c 4337
    fcode ? "}\n" 0 fprintf () ;
    0 return
}
void is_lvalue
{
    int expr expr =:
# tcc_cc.c 4342
    expr ->s19_m_kind ? 105 == || { expr ->s19_m_kind ? 507 == } || { expr ->s19_m_kind ? 46 == } || { expr ->s19_m_kind ? 91 == } || { expr ->s19_m_kind ? 2006 == } && { expr ->s19_m_type ->s18_m_kind ? TYPE_KIND_ARRAY ? != } && { expr ->s19_m_type ->s18_m_kind ? TYPE_KIND_FUNCTION ? != } return
    0 return
}
int has_error
void expr_print_error
{
    int mesg mesg =:
    int expr expr =:
# tcc_cc.c 4355
    "%s %d.%d: Error: %s\n" { int 4 __var_args __var_args expr ->s19_m_filename ? = ; __var_args 4 + expr ->s19_m_line ? = ; __var_args 8 + expr ->s19_m_column ? = ; __var_args 12 + mesg ? = ; __var_args printf () } ;
# tcc_cc.c 4356
    {
        int i i 0 = ;

        do
        {
            i ? expr ->s19_m_nr_children ? <s ! if { break }
# tcc_cc.c 4357
# tcc_cc.c 4358
            "Operand %d: " { int 1 __var_args __var_args i ? = ; __var_args printf () } ;
# tcc_cc.c 4359
            stdout ? expr ->s19_m_children i ? 4 * + ? expr_print () ;
# tcc_cc.c 4360
            "\n" 0 printf () ;
            i $ ? 1 + = 1 - ;
        }
    }
# tcc_cc.c 4362
    has_error 1 =1 ;
    0 return
}
void gen_expr
{
    int as_value as_value =:
    int expr expr =:
# tcc_cc.c 4367
    expr ? 0 == if
    {
# tcc_cc.c 4368
        0 return
    }
    int expr_size_ind expr_size_ind expr ->s19_m_type ? 0 == if { "" } else { expr ->s19_m_type ->s18_m_size ? 1 == if { "1" } else { expr ->s19_m_type ->s18_m_size ? 2 == if { "2" } else { "" } } } = ;

    int multiple multiple expr ->s19_m_type ? 0 != && { expr ->s19_m_type ->s18_m_size ? 4 >s } =1 ;

# tcc_cc.c 4371
    expr ->s19_m_kind ? do
    {
        $ 105 == if
        {
            ;
# tcc_cc.c 4373
            fcode ? "%s " { int 1 __var_args __var_args expr ->s19_m_str_val ? = ; __var_args fprintf () } ;
# tcc_cc.c 4374
            break
# tcc_cc.c 4375
        }
        $ 48 == if
        {
            ;
# tcc_cc.c 4376
            fcode ? "%u " { int 1 __var_args __var_args expr ->s19_m_int_val ? = ; __var_args fprintf () } ;
# tcc_cc.c 4377
            break
# tcc_cc.c 4378
        }
        $ 34 == if
        {
            ;
# tcc_cc.c 4379
            fcode ? "\"" 0 fprintf () ;
# tcc_cc.c 4380
            {
                int i i 0 = ;

                do
                {
                    i ? expr ->s19_m_int_val ? <s ! if { break }
# tcc_cc.c 4381
                    int ch ch expr ->s19_m_str_val ? i ? + ?1 char =1 ;

# tcc_cc.c 4383
                    ch ?1 0 == if
                    {
# tcc_cc.c 4384
                        fcode ? "\\0" 0 fprintf () ;
                    }
                    else
                    {
# tcc_cc.c 4385
                        ch ?1 10 == if
                        {
# tcc_cc.c 4386
                            fcode ? "\\n" 0 fprintf () ;
                        }
                        else
                        {
# tcc_cc.c 4387
                            ch ?1 13 == if
                            {
# tcc_cc.c 4388
                                fcode ? "\\r" 0 fprintf () ;
                            }
                            else
                            {
# tcc_cc.c 4389
                                ch ?1 9 == if
                                {
# tcc_cc.c 4390
                                    fcode ? "\\t" 0 fprintf () ;
                                }
                                else
                                {
# tcc_cc.c 4391
                                    ch ?1 34 == || { ch ?1 92 == } if
                                    {
# tcc_cc.c 4392
                                        fcode ? "\\%c" { int 1 __var_args __var_args ch ?1 = ; __var_args fprintf () } ;
                                    }
                                    else
                                    {
# tcc_cc.c 4393
                                        ch ?1 32 <s || { ch ?1 127 >= } if
                                        {
# tcc_cc.c 4394
                                            fcode ? "\\x%x%x" { int 2 __var_args __var_args ch ?1 4 >> 15 & = ; __var_args 4 + ch ?1 15 & = ; __var_args fprintf () } ;
                                        }
                                        else
                                        {
# tcc_cc.c 4396
                                            fcode ? "%c" { int 1 __var_args __var_args ch ?1 = ; __var_args fprintf () } ;
                                        }
                                    }
                                }
                            }
                        }
                    }
                    i $ ? 1 + = 1 - ;
                }
            }
# tcc_cc.c 4398
            fcode ? "\" " 0 fprintf () ;
# tcc_cc.c 4399
            break
# tcc_cc.c 4400
        }
        $ 99 == if
        {
            ;
# tcc_cc.c 4401
            expr ->s19_m_children 0 4 * + ? 1 gen_expr () ;
# tcc_cc.c 4402
            expr ->s19_m_type ->s18_m_kind ? TYPE_KIND_BASE ? == if
            {
# tcc_cc.c 4403
# tcc_cc.c 4404
                expr ->s19_m_type ->s18_m_base_type ? do
                {
                    $ 5 == if
                    {
                        ;
# tcc_cc.c 4406
                        fcode ? "0xFF & " 0 fprintf () ;
# tcc_cc.c 4406
                        break
# tcc_cc.c 4407
                    }
                    $ 7 == if
                    {
                        ;
# tcc_cc.c 4407
                        fcode ? "char " 0 fprintf () ;
# tcc_cc.c 4407
                        break
# tcc_cc.c 4408
                    }
                    $ 9 == if
                    {
                        ;
# tcc_cc.c 4408
                        fcode ? "0xFFFF & " 0 fprintf () ;
# tcc_cc.c 4408
                        break
# tcc_cc.c 4409
                    }
                    0 if
                    {
                        :_default_case_1
# tcc_cc.c 4409
                        break
# tcc_cc.c 4410
                    }
                    ; goto _default_case_1
                }
            }
# tcc_cc.c 4412
            break
# tcc_cc.c 4413
        }
        $ 44 == if
        {
            ;
# tcc_cc.c 4414
            {
                int i i 0 = ;

                do
                {
                    i ? expr ->s19_m_nr_children ? <s ! if { break }
# tcc_cc.c 4415
# tcc_cc.c 4416
                    expr ->s19_m_children i ? 4 * + ? 1 gen_expr () ;
# tcc_cc.c 4417
                    i ? expr ->s19_m_nr_children ? 1 - <s if
                    {
# tcc_cc.c 4418
                        fcode ? "; " 0 fprintf () ;
                    }
                    i $ ? 1 + = 1 - ;
                }
            }
# tcc_cc.c 4420
            break
# tcc_cc.c 4421
        }
        $ 33 == 
        || { $ 126 == }  if
        {
            ;
# tcc_cc.c 4423
            expr ->s19_m_children 0 4 * + ? 1 gen_expr () ;
# tcc_cc.c 4424
            fcode ? "%c " { int 1 __var_args __var_args expr ->s19_m_kind ? = ; __var_args fprintf () } ;
# tcc_cc.c 4425
            break
# tcc_cc.c 4426
        }
        $ 862 == if
        {
            ;
# tcc_cc.c 4427
            expr ->s19_m_children 1 4 * + ->s19_m_kind ? 48 == && { expr ->s19_m_children 1 4 * + ->s19_m_int_val ? 31 >s } if
            {
# tcc_cc.c 4428
# tcc_cc.c 4429
                fcode ? "0 " 0 fprintf () ;
# tcc_cc.c 4430
                break
            }
# tcc_cc.c 4433
            goto _fall_through_case_1
        }
        $ 43 == 
        || { $ 45 == 
        || { $ 42 == 
        || { $ 94 == 
        || { $ 38 == 
        || { $ 124 == 
        || { $ 502 == 
        || { $ 860 == 
        || { $ 501 == } } } } } } } }  if
        {
            ;
            :_fall_through_case_1
# tcc_cc.c 4442
            expr ->s19_m_children 0 4 * + ? 1 gen_expr () ;
# tcc_cc.c 4443
            expr ->s19_m_children 1 4 * + ? 1 gen_expr () ;
# tcc_cc.c 4444
            expr ->s19_m_kind ? do
            {
                $ 43 == if
                {
                    ;
# tcc_cc.c 4447
                    expr ->s19_m_children 0 4 * + ? expr_is_pointer_size_gt_1 () if
                    {
# tcc_cc.c 4448
                        fcode ? "%d * " { int 1 __var_args __var_args expr ->s19_m_children 0 4 * + ->s19_m_type ->s18_m_members ? 0 4 * + ->s18_m_size ? = ; __var_args fprintf () } ;
                    }
                    else
                    {
# tcc_cc.c 4449
                        expr ->s19_m_children 1 4 * + ? expr_is_pointer_size_gt_1 () if
                        {
# tcc_cc.c 4450
                            fcode ? ">< %d * " { int 1 __var_args __var_args expr ->s19_m_children 1 4 * + ->s19_m_type ->s18_m_members ? 0 4 * + ->s18_m_size ? = ; __var_args fprintf () } ;
                        }
                    }
# tcc_cc.c 4451
                    fcode ? "+ " 0 fprintf () ;
# tcc_cc.c 4452
                    break
# tcc_cc.c 4453
                }
                $ 45 == if
                {
                    ;
# tcc_cc.c 4454
                    expr ->s19_m_children 0 4 * + ->s19_m_type ? type_is_pointer () if
                    {
# tcc_cc.c 4455
                        int base_size base_size expr ->s19_m_children 0 4 * + ->s19_m_type ->s18_m_members ? 0 4 * + ->s18_m_size ? = ;

# tcc_cc.c 4457
                        expr ->s19_m_children 1 4 * + ->s19_m_type ? type_is_pointer () if
                        {
# tcc_cc.c 4458
# tcc_cc.c 4459
                            fcode ? "-p " 0 fprintf () ;
# tcc_cc.c 4460
                            base_size ? 1 >s if
                            {
# tcc_cc.c 4461
                                fcode ? "%d / " { int 1 __var_args __var_args base_size ? = ; __var_args fprintf () } ;
                            }
                        }
                        else
                        {
# tcc_cc.c 4464
# tcc_cc.c 4465
                            base_size ? 1 >s if
                            {
# tcc_cc.c 4466
                                fcode ? "%d * " { int 1 __var_args __var_args base_size ? = ; __var_args fprintf () } ;
                            }
# tcc_cc.c 4467
                            fcode ? "- " 0 fprintf () ;
                        }
                    }
                    else
                    {
# tcc_cc.c 4471
                        fcode ? "- " 0 fprintf () ;
                    }
# tcc_cc.c 4472
                    break
# tcc_cc.c 4473
                }
                $ 860 == if
                {
                    ;
# tcc_cc.c 4473
                    fcode ? "<< " 0 fprintf () ;
# tcc_cc.c 4473
                    break
# tcc_cc.c 4474
                }
                $ 862 == if
                {
                    ;
# tcc_cc.c 4474
                    fcode ? ">> " 0 fprintf () ;
# tcc_cc.c 4474
                    break
# tcc_cc.c 4475
                }
                $ 501 == if
                {
                    ;
# tcc_cc.c 4475
                    fcode ? "== " 0 fprintf () ;
# tcc_cc.c 4475
                    break
# tcc_cc.c 4476
                }
                $ 502 == if
                {
                    ;
# tcc_cc.c 4476
                    fcode ? "!= " 0 fprintf () ;
# tcc_cc.c 4476
                    break
# tcc_cc.c 4477
                }
                0 if
                {
                    :_default_case_2
# tcc_cc.c 4477
                    fcode ? "%c " { int 1 __var_args __var_args expr ->s19_m_kind ? = ; __var_args fprintf () } ;
# tcc_cc.c 4477
                    break
# tcc_cc.c 4478
                }
                ; goto _default_case_2
            }
# tcc_cc.c 4479
            break
# tcc_cc.c 4480
        }
        $ 61 == if
        {
            ;
# tcc_cc.c 4481
            expr ->s19_m_children 0 4 * + ? 0 gen_expr () ;
# tcc_cc.c 4482
            multiple ?1 char if
            {
# tcc_cc.c 4483
# tcc_cc.c 4484
                expr ->s19_m_children 1 4 * + ? 0 gen_expr () ;
# tcc_cc.c 4485
                fcode ? "{ int src src =: int trg trg =: " 0 fprintf () ;
# tcc_cc.c 4486
                fcode ? "trg ? src ? ? = ; " 0 fprintf () ;
# tcc_cc.c 4487
                {
                    int i i 4 = ;

                    do
                    {
                        i ? expr ->s19_m_type ->s18_m_size ? <s ! if { break }
# tcc_cc.c 4488
                        fcode ? "trg ? %d + src ? %d + ? = ; " { int 2 __var_args __var_args i ? = ; __var_args 4 + i ? = ; __var_args fprintf () } ;
                        i $ ? 4 + = ;
                    }
                }
# tcc_cc.c 4489
                fcode ? "trg ? } " 0 fprintf () ;
            }
            else
            {
# tcc_cc.c 4492
# tcc_cc.c 4493
                expr ->s19_m_children 1 4 * + ? 1 gen_expr () ;
# tcc_cc.c 4494
                fcode ? "=%s " { int 1 __var_args __var_args expr_size_ind ? = ; __var_args fprintf () } ;
            }
# tcc_cc.c 4496
            break
# tcc_cc.c 4497
        }
        $ 47 == 
        || { $ 37 == 
        || { $ 60 == 
        || { $ 62 == 
        || { $ 503 == 
        || { $ 504 == } } } } }  if
        {
            ;
# tcc_cc.c 4503
            expr ->s19_m_children 0 4 * + ? 1 gen_expr () ;
# tcc_cc.c 4504
            expr ->s19_m_children 1 4 * + ? 1 gen_expr () ;
# tcc_cc.c 4505
            expr ->s19_m_kind ? do
            {
                $ 503 == if
                {
                    ;
# tcc_cc.c 4507
                    fcode ? "<=" 0 fprintf () ;
# tcc_cc.c 4507
                    break
# tcc_cc.c 4508
                }
                $ 504 == if
                {
                    ;
# tcc_cc.c 4508
                    fcode ? ">=" 0 fprintf () ;
# tcc_cc.c 4508
                    break
# tcc_cc.c 4509
                }
                0 if
                {
                    :_default_case_3
# tcc_cc.c 4509
                    fcode ? "%c" { int 1 __var_args __var_args expr ->s19_m_kind ? = ; __var_args fprintf () } ;
# tcc_cc.c 4509
                    break
# tcc_cc.c 4510
                }
                ; goto _default_case_3
            }
# tcc_cc.c 4511
            expr ->s19_m_children 0 4 * + ->s19_m_type ? type_is_signed_integer () || { expr ->s19_m_children 1 4 * + ->s19_m_type ? type_is_signed_integer () } if
            {
# tcc_cc.c 4513
                fcode ? "s" 0 fprintf () ;
            }
# tcc_cc.c 4514
            fcode ? " " 0 fprintf () ;
# tcc_cc.c 4515
            break
# tcc_cc.c 4516
        }
        $ 642 == 
        || { $ 647 == 
        || { $ 637 == 
        || { $ 643 == 
        || { $ 645 == 
        || { $ 660 == 
        || { $ 662 == 
        || { $ 694 == 
        || { $ 638 == 
        || { $ 724 == } } } } } } } } }  if
        {
            ;
# tcc_cc.c 4526
            multiple ?1 char if
            {
# tcc_cc.c 4527
                expr ? "multiple assignment" expr_print_error () ;
            }
# tcc_cc.c 4528
            expr ->s19_m_children 0 4 * + ? 0 gen_expr () ;
# tcc_cc.c 4529
            fcode ? "$ ?%s " { int 1 __var_args __var_args expr_size_ind ? = ; __var_args fprintf () } ;
# tcc_cc.c 4530
            expr ->s19_m_children 1 4 * + ? 1 gen_expr () ;
# tcc_cc.c 4531
            expr ->s19_m_kind ? 600 43 + == || { expr ->s19_m_kind ? 600 45 + == } && { expr ->s19_m_children 0 4 * + ? expr_is_pointer_size_gt_1 () } if
            {
# tcc_cc.c 4533
                fcode ? "%d * " { int 1 __var_args __var_args expr ->s19_m_children 0 4 * + ->s19_m_type ->s18_m_members ? 0 4 * + ->s18_m_size ? = ; __var_args fprintf () } ;
            }
# tcc_cc.c 4534
            expr ->s19_m_kind ? do
            {
                $ 660 == if
                {
                    ;
# tcc_cc.c 4536
                    fcode ? "<<" 0 fprintf () ;
# tcc_cc.c 4536
                    break
# tcc_cc.c 4537
                }
                $ 662 == if
                {
                    ;
# tcc_cc.c 4537
                    fcode ? ">>" 0 fprintf () ;
# tcc_cc.c 4537
                    break
# tcc_cc.c 4538
                }
                0 if
                {
                    :_default_case_4
# tcc_cc.c 4538
                    fcode ? "%c" { int 1 __var_args __var_args expr ->s19_m_kind ? 600 - = ; __var_args fprintf () } ;
# tcc_cc.c 4538
                    break
# tcc_cc.c 4539
                }
                ; goto _default_case_4
            }
# tcc_cc.c 4540
            expr ->s19_m_kind ? 600 47 + == || { expr ->s19_m_kind ? 600 37 + == } && { expr ->s19_m_children 0 4 * + ->s19_m_type ? type_is_signed_integer () || { expr ->s19_m_children 1 4 * + ->s19_m_type ? type_is_signed_integer () } } if
            {
# tcc_cc.c 4543
                fcode ? "s" 0 fprintf () ;
            }
# tcc_cc.c 4544
            fcode ? " =%s " { int 1 __var_args __var_args expr_size_ind ? = ; __var_args fprintf () } ;
# tcc_cc.c 4545
            break
# tcc_cc.c 4546
        }
        $ 507 == if
        {
            ;
# tcc_cc.c 4547
            expr ->s19_m_children 0 4 * + ? 0 gen_expr () ;
# tcc_cc.c 4548
            expr ->s19_m_children 0 4 * + ? is_lvalue () if
            {
# tcc_cc.c 4549
                fcode ? "->s%d_m_%s " { int 2 __var_args __var_args expr ->s19_m_int_val ? = ; __var_args 4 + expr ->s19_m_str_val ? = ; __var_args fprintf () } ;
            }
            else
            {
# tcc_cc.c 4551
                fcode ? "s%d_m_%s + " { int 2 __var_args __var_args expr ->s19_m_int_val ? = ; __var_args 4 + expr ->s19_m_str_val ? = ; __var_args fprintf () } ;
            }
# tcc_cc.c 4552
            break
# tcc_cc.c 4553
        }
        $ 46 == if
        {
            ;
# tcc_cc.c 4554
            expr ->s19_m_children 0 4 * + ? 0 gen_expr () ;
# tcc_cc.c 4555
            fcode ? "s%d_m_%s + " { int 2 __var_args __var_args expr ->s19_m_int_val ? = ; __var_args 4 + expr ->s19_m_str_val ? = ; __var_args fprintf () } ;
# tcc_cc.c 4556
            break
# tcc_cc.c 4557
        }
        $ 91 == if
        {
            ;
# tcc_cc.c 4558
            expr ->s19_m_children 0 4 * + ? 1 gen_expr () ;
# tcc_cc.c 4559
            expr ->s19_m_children 1 4 * + ? 1 gen_expr () ;
# tcc_cc.c 4560
            {
                int elem_size elem_size expr ->s19_m_type ? array_element_size () = ;

# tcc_cc.c 4562
                elem_size ? 1 >s if
                {
# tcc_cc.c 4563
                    fcode ? "%d * " { int 1 __var_args __var_args elem_size ? = ; __var_args fprintf () } ;
                }
            }
# tcc_cc.c 4565
            fcode ? "+ " 0 fprintf () ;
# tcc_cc.c 4566
            break
# tcc_cc.c 4567
        }
        $ 40 == if
        {
            ;
# tcc_cc.c 4568
            expr ->s19_m_children 0 4 * + ->s19_m_kind ? 105 == && { expr ->s19_m_children 0 4 * + ->s19_m_str_val ? "va_start" strcmp () 0 == } && { expr ->s19_m_nr_children ? 1 >s } && { expr ->s19_m_children 1 4 * + ->s19_m_kind ? 105 == } if
            {
# tcc_cc.c 4570
# tcc_cc.c 4571
                fcode ? "%s __var_args ? = " { int 1 __var_args __var_args expr ->s19_m_children 1 4 * + ->s19_m_str_val ? = ; __var_args fprintf () } ;
            }
            else
            {
# tcc_cc.c 4574
                int func_type func_type expr ->s19_m_children 0 4 * + ->s19_m_type ? = ;

                int nr_decls nr_decls func_type ->s18_m_nr_decls ? = ;

                int close_bracket close_bracket 0 =1 ;

# tcc_cc.c 4578
                nr_decls ? 0 >s && { func_type ->s18_m_decls ? nr_decls ? 1 - 4 * + ? 0 == } if
                {
# tcc_cc.c 4579
# tcc_cc.c 4580
                    {
                        int i i 1 = ;

                        do
                        {
                            i ? nr_decls ? <s ! if { break }
# tcc_cc.c 4581
                            expr ->s19_m_children i ? 4 * + ? 1 gen_expr () ;
                            i $ ? 1 + = 1 - ;
                        }
                    }
                    int nr_var_args nr_var_args expr ->s19_m_nr_children ? nr_decls ? - = ;

# tcc_cc.c 4583
                    nr_var_args ? 0 == if
                    {
# tcc_cc.c 4584
                        fcode ? "0 " 0 fprintf () ;
                    }
                    else
                    {
# tcc_cc.c 4586
# tcc_cc.c 4587
                        fcode ? "{ int %d __var_args " { int 1 __var_args __var_args nr_var_args ? = ; __var_args fprintf () } ;
# tcc_cc.c 4588
                        {
                            int i i 0 = ;

                            do
                            {
                                i ? nr_var_args ? <s ! if { break }
# tcc_cc.c 4589
# tcc_cc.c 4590
                                fcode ? "__var_args " 0 fprintf () ;
# tcc_cc.c 4591
                                i ? 0 >s if
                                {
# tcc_cc.c 4592
                                    fcode ? "%d + " { int 1 __var_args __var_args i ? 4 * = ; __var_args fprintf () } ;
                                }
# tcc_cc.c 4593
                                expr ->s19_m_children nr_decls ? i ? + 4 * + ? 1 gen_expr () ;
# tcc_cc.c 4594
                                fcode ? "= ; " 0 fprintf () ;
                                i $ ? 1 + = 1 - ;
                            }
                        }
# tcc_cc.c 4596
                        fcode ? "__var_args " 0 fprintf () ;
# tcc_cc.c 4597
                        close_bracket 1 =1 ;
                    }
                }
                else
                {
# tcc_cc.c 4601
# tcc_cc.c 4602
                    {
                        int i i 1 = ;

                        do
                        {
                            i ? expr ->s19_m_nr_children ? <s ! if { break }
# tcc_cc.c 4603
                            expr ->s19_m_children i ? 4 * + ? 1 gen_expr () ;
                            i $ ? 1 + = 1 - ;
                        }
                    }
                }
# tcc_cc.c 4605
                expr ->s19_m_children 0 4 * + ? 0 gen_expr () ;
# tcc_cc.c 4606
                expr ->s19_m_children 0 4 * + ->s19_m_type ->s18_m_kind ? TYPE_KIND_POINTER ? == if
                {
# tcc_cc.c 4607
                    fcode ? "? " 0 fprintf () ;
                }
# tcc_cc.c 4608
                fcode ? "() " 0 fprintf () ;
# tcc_cc.c 4609
                close_bracket ?1 char if
                {
# tcc_cc.c 4610
                    fcode ? "} " 0 fprintf () ;
                }
            }
# tcc_cc.c 4612
            break
# tcc_cc.c 4613
        }
        $ 2000 == if
        {
            ;
# tcc_cc.c 4614
            {
# tcc_cc.c 4615
                multiple ?1 char if
                {
# tcc_cc.c 4616
                    expr ? "multiple post increment" expr_print_error () ;
                }
# tcc_cc.c 4617
                expr ->s19_m_children 0 4 * + ? 0 gen_expr () ;
                int size size expr ->s19_m_children 0 4 * + ? expr_inc_dec_value () = ;

# tcc_cc.c 4619
                fcode ? "$ ?%s %d + =%s %d - " { int 4 __var_args __var_args expr_size_ind ? = ; __var_args 4 + size ? = ; __var_args 8 + expr_size_ind ? = ; __var_args 12 + size ? = ; __var_args fprintf () } ;
# tcc_cc.c 4620
                break
            }
# tcc_cc.c 4622
            goto _fall_through_case_2
        }
        $ 2001 == if
        {
            ;
            :_fall_through_case_2
# tcc_cc.c 4623
            {
# tcc_cc.c 4624
                multiple ?1 char if
                {
# tcc_cc.c 4625
                    expr ? "multiple post decrement" expr_print_error () ;
                }
# tcc_cc.c 4626
                expr ->s19_m_children 0 4 * + ? 0 gen_expr () ;
                int size size expr ->s19_m_children 0 4 * + ? expr_inc_dec_value () = ;

# tcc_cc.c 4628
                fcode ? "$ ?%s %d - =%s %d + " { int 4 __var_args __var_args expr_size_ind ? = ; __var_args 4 + size ? = ; __var_args 8 + expr_size_ind ? = ; __var_args 12 + size ? = ; __var_args fprintf () } ;
# tcc_cc.c 4629
                break
            }
# tcc_cc.c 4631
            goto _fall_through_case_3
        }
        $ 2002 == if
        {
            ;
            :_fall_through_case_3
# tcc_cc.c 4632
            multiple ?1 char if
            {
# tcc_cc.c 4633
                expr ? "multiple pre increment" expr_print_error () ;
            }
# tcc_cc.c 4634
            expr ->s19_m_children 0 4 * + ? 0 gen_expr () ;
# tcc_cc.c 4635
            fcode ? "$ ?%s %d + =%s " { int 3 __var_args __var_args expr_size_ind ? = ; __var_args 4 + expr ->s19_m_children 0 4 * + ? expr_inc_dec_value () = ; __var_args 8 + expr_size_ind ? = ; __var_args fprintf () } ;
# tcc_cc.c 4636
            break
# tcc_cc.c 4637
        }
        $ 2003 == if
        {
            ;
# tcc_cc.c 4638
            multiple ?1 char if
            {
# tcc_cc.c 4639
                expr ? "multiple pre decrement" expr_print_error () ;
            }
# tcc_cc.c 4640
            expr ->s19_m_children 0 4 * + ? 0 gen_expr () ;
# tcc_cc.c 4641
            fcode ? "$ ?%s %d - =%s " { int 3 __var_args __var_args expr_size_ind ? = ; __var_args 4 + expr ->s19_m_children 0 4 * + ? expr_inc_dec_value () = ; __var_args 8 + expr_size_ind ? = ; __var_args fprintf () } ;
# tcc_cc.c 4642
            break
# tcc_cc.c 4643
        }
        $ 2005 == if
        {
            ;
# tcc_cc.c 4644
            fcode ? "0 " 0 fprintf () ;
# tcc_cc.c 4645
            expr ->s19_m_children 0 4 * + ? 1 gen_expr () ;
# tcc_cc.c 4646
            fcode ? "- " 0 fprintf () ;
# tcc_cc.c 4647
            break
# tcc_cc.c 4648
        }
        $ 2006 == if
        {
            ;
# tcc_cc.c 4649
            expr ->s19_m_children 0 4 * + ? 1 gen_expr () ;
# tcc_cc.c 4650
            break
# tcc_cc.c 4651
        }
        $ 2007 == if
        {
            ;
# tcc_cc.c 4652
            expr ->s19_m_children 0 4 * + ? 0 gen_expr () ;
# tcc_cc.c 4653
            break
# tcc_cc.c 4654
        }
        $ 924 == if
        {
            ;
# tcc_cc.c 4655
            expr ->s19_m_children 0 4 * + ? 1 gen_expr () ;
# tcc_cc.c 4656
            fcode ? "|| { " 0 fprintf () ;
# tcc_cc.c 4657
            expr ->s19_m_children 1 4 * + ? 1 gen_expr () ;
# tcc_cc.c 4658
            fcode ? "} " 0 fprintf () ;
# tcc_cc.c 4659
            break
# tcc_cc.c 4660
        }
        $ 838 == if
        {
            ;
# tcc_cc.c 4661
            expr ->s19_m_children 0 4 * + ? 1 gen_expr () ;
# tcc_cc.c 4662
            fcode ? "&& { " 0 fprintf () ;
# tcc_cc.c 4663
            expr ->s19_m_children 1 4 * + ? 1 gen_expr () ;
# tcc_cc.c 4664
            fcode ? "} " 0 fprintf () ;
# tcc_cc.c 4665
            break
# tcc_cc.c 4666
        }
        $ 63 == if
        {
            ;
# tcc_cc.c 4667
            expr ->s19_m_children 0 4 * + ? 1 gen_expr () ;
# tcc_cc.c 4668
            fcode ? "if { " 0 fprintf () ;
# tcc_cc.c 4669
            expr ->s19_m_children 1 4 * + ? as_value ?1 char gen_expr () ;
# tcc_cc.c 4670
            fcode ? "} else { " 0 fprintf () ;
# tcc_cc.c 4671
            expr ->s19_m_children 2 4 * + ? as_value ?1 char gen_expr () ;
# tcc_cc.c 4672
            fcode ? "} " 0 fprintf () ;
# tcc_cc.c 4673
            break
# tcc_cc.c 4674
        }
        $ 108 == if
        {
            ;
# tcc_cc.c 4675
            {
                int i i 0 = ;

                do
                {
                    i ? expr ->s19_m_nr_children ? <s ! if { break }
# tcc_cc.c 4676
# tcc_cc.c 4677
                    expr ->s19_m_children i ? 4 * + ? 1 gen_expr () ;
# tcc_cc.c 4678
                    i ? expr ->s19_m_nr_children ? 1 - <s if
                    {
# tcc_cc.c 4679
                        fcode ? "; " 0 fprintf () ;
                    }
                    i $ ? 1 + = 1 - ;
                }
            }
# tcc_cc.c 4681
            break
# tcc_cc.c 4682
        }
        0 if
        {
            :_default_case_5
# tcc_cc.c 4683
            expr ->s19_m_kind ? 32 >s && { expr ->s19_m_kind ? 127 <s } if
            {
# tcc_cc.c 4684
                "Warning: expr '%c' not implemented yet\n" { int 1 __var_args __var_args expr ->s19_m_kind ? = ; __var_args printf () } ;
            }
            else
            {
# tcc_cc.c 4686
                "Warning: expr %d not implemented yet\n" { int 1 __var_args __var_args expr ->s19_m_kind ? = ; __var_args printf () } ;
            }
# tcc_cc.c 4687
            fcode ? "$ " 0 fprintf () ;
# tcc_cc.c 4688
            break
# tcc_cc.c 4689
        }
        ; goto _default_case_5
    }
# tcc_cc.c 4690
    as_value ?1 char && { expr ? is_lvalue () } if
    {
# tcc_cc.c 4691
# tcc_cc.c 4692
        multiple ?1 char if
        {
# tcc_cc.c 4693
            expr ? "multiple get value" expr_print_error () ;
        }
# tcc_cc.c 4694
        fcode ? "?%s " { int 1 __var_args __var_args expr_size_ind ? = ; __var_args fprintf () } ;
# tcc_cc.c 4695
        expr ->s19_m_type ? 0 != && { expr ->s19_m_type ->s18_m_base_type ? BT_S8 ? == } if
        {
# tcc_cc.c 4696
            fcode ? "char " 0 fprintf () ;
        }
    }
    0 return
}
void gen_stat_expr
{
    int expr expr =:
# tcc_cc.c 4702
    expr ? 0 != if
    {
# tcc_cc.c 4703
# tcc_cc.c 4704
        gen_indent () ;
# tcc_cc.c 4705
        expr ? 1 gen_expr () ;
# tcc_cc.c 4706
        fcode ? ";" 0 fprintf () ;
# tcc_cc.c 4707
        gen_newline () ;
    }
    0 return
}
void gen_initializer
{
    int type type =:
    int expr expr =:
# tcc_cc.c 4713
    expr ->s19_m_kind ? 108 == if
    {
# tcc_cc.c 4714
# tcc_cc.c 4715
        type ->s18_m_kind ? TYPE_KIND_ARRAY ? == if
        {
# tcc_cc.c 4716
# tcc_cc.c 4717
            {
                int i i 0 = ;

                do
                {
                    i ? expr ->s19_m_nr_children ? <s ! if { break }
# tcc_cc.c 4718
# tcc_cc.c 4719
                    i ? 1 + expr ->s19_m_nr_children ? <s if
                    {
# tcc_cc.c 4720
                        fcode ? "$ " 0 fprintf () ;
                    }
# tcc_cc.c 4721
                    expr ->s19_m_children i ? 4 * + ? type ->s18_m_members ? 0 4 * + ? gen_initializer () ;
# tcc_cc.c 4722
                    i ? 1 + expr ->s19_m_nr_children ? <s if
                    {
# tcc_cc.c 4723
# tcc_cc.c 4724
                        gen_indent () ;
# tcc_cc.c 4725
                        fcode ? "%u + " { int 1 __var_args __var_args type ->s18_m_members ? 0 4 * + ? array_element_size () = ; __var_args fprintf () } ;
                    }
                    i $ ? 1 + = 1 - ;
                }
            }
        }
        else
        {
# tcc_cc.c 4729
            type ->s18_m_kind ? TYPE_KIND_STRUCT ? == if
            {
# tcc_cc.c 4730
                int pos pos 0 = ;

# tcc_cc.c 4732
                {
                    int i i 0 = ;

                    do
                    {
                        i ? expr ->s19_m_nr_children ? <s ! if { break }
# tcc_cc.c 4733
# tcc_cc.c 4734
                        i ? 1 + expr ->s19_m_nr_children ? <s if
                        {
# tcc_cc.c 4735
                            fcode ? "$ " 0 fprintf () ;
                        }
# tcc_cc.c 4736
                        expr ->s19_m_children i ? 4 * + ? type ->s18_m_decls ? i ? 4 * + ->s20_m_type ? gen_initializer () ;
# tcc_cc.c 4737
                        i ? 1 + expr ->s19_m_nr_children ? <s if
                        {
# tcc_cc.c 4738
# tcc_cc.c 4739
                            gen_indent () ;
                            int pos_inc pos_inc type ->s18_m_decls ? i ? 1 + 4 * + ->s20_m_pos ? pos ? - = ;

# tcc_cc.c 4741
                            fcode ? "%u + " { int 1 __var_args __var_args pos_inc ? = ; __var_args fprintf () } ;
# tcc_cc.c 4742
                            pos $ ? pos_inc ? + = ;
                        }
                        i $ ? 1 + = 1 - ;
                    }
                }
            }
            else
            {
# tcc_cc.c 4747
                stderr ? "%s Error: unfit type %d for initializer\n" { int 2 __var_args __var_args token_it_pos () = ; __var_args 4 + type ->s18_m_kind ? = ; __var_args fprintf () } ;
            }
        }
    }
    else
    {
# tcc_cc.c 4750
# tcc_cc.c 4751
        expr ? 1 gen_expr () ;
# tcc_cc.c 4752
        expr ->s19_m_type ? type_char_ptr ? == && { type ->s18_m_kind ? TYPE_KIND_ARRAY ? == } if
        {
# tcc_cc.c 4753
            fcode ? "%d strncpy () ;\n" { int 1 __var_args __var_args type ->s18_m_size ? = ; __var_args fprintf () } ;
        }
        else
        {
# tcc_cc.c 4755
            fcode ? "=%s ;\n" { int 1 __var_args __var_args type ? 0 != && { type ->s18_m_size ? 1 == } if { "1" } else { "" } = ; __var_args fprintf () } ;
        }
    }
    0 return
}
void gen_init_globals
{
# tcc_cc.c 4761
    fcode ? "void __init_globals__\n{\n" 0 fprintf () ;
# tcc_cc.c 4762
    indent $ ? 1 + = 1 - ;
    int next next 0 = ;

# tcc_cc.c 4766
    {
        int decl decl cur_ident_decls ? = ;

        do
        {
            decl ? 0 != ! if { break }
# tcc_cc.c 4767
            int prev prev decl ->s20_m_prev ? = ;

# tcc_cc.c 4769
            decl ->s20_m_prev next ? = ;
# tcc_cc.c 4770
            next decl ? = ;
# tcc_cc.c 4771
            decl prev ? = ;
        }
    }
# tcc_cc.c 4773
    cur_ident_decls next ? = ;
# tcc_cc.c 4775
    {
        int decl decl cur_ident_decls ? = ;

        do
        {
            decl ? 0 != ! if { break }
# tcc_cc.c 4776
            decl ->s20_m_value ? 0 != if
            {
# tcc_cc.c 4777
# tcc_cc.c 4778
                gen_indent () ;
# tcc_cc.c 4779
                fcode ? "%s " { int 1 __var_args __var_args decl ->s20_m_name ? = ; __var_args fprintf () } ;
# tcc_cc.c 4780
                decl ->s20_m_value ? decl ->s20_m_type ? gen_initializer () ;
            }
            decl decl ->s20_m_prev ? = ;
        }
    }
# tcc_cc.c 4783
    indent $ ? 1 - = 1 + ;
# tcc_cc.c 4784
    fcode ? "    0 return\n}\n" 0 fprintf () ;
    0 return
}
void __init_globals__ ;
void main
{
    int argv argv =:
    int argc argc =:
    __init_globals__ ()
    _sys_env argv ? argc ? 4 * 4 + + = ;
# tcc_cc.c 4791
    include_path 100 malloc () = ;
# tcc_cc.c 4793
    "__TCC_CC__" 1 get_env () ;
# tcc_cc.c 4794
    define_base_types () ;
# tcc_cc.c 4795
    add_predefined_types () ;
# tcc_cc.c 4797
    fcode stdout ? = ;
    int only_preprocess only_preprocess 0 =1 ;

# tcc_cc.c 4800
    {
        int i i 1 = ;

        do
        {
            i ? argc ? <s ! if { break }
# tcc_cc.c 4801
            argv ? i ? 4 * + ? "-E" strcmp () 0 == if
            {
# tcc_cc.c 4802
                only_preprocess 1 =1 ;
            }
            else
            {
# tcc_cc.c 4803
                argv ? i ? 4 * + ? "-T" strcmp () 0 == if
                {
# tcc_cc.c 4804
                    add_tracing 1 =1 ;
                }
                else
                {
# tcc_cc.c 4805
                    argv ? i ? 4 * + ? "-dp" strcmp () 0 == if
                    {
# tcc_cc.c 4806
                        opt_trace_parser 1 =1 ;
                    }
                    else
                    {
# tcc_cc.c 4807
                        argv ? i ? 4 * + ? "-D" strcmp () 0 == && { i ? 1 + argc ? <s } if
                        {
# tcc_cc.c 4808
# tcc_cc.c 4809
                            i $ ? 1 + = 1 - ;
                            int s s argv ? i ? 4 * + ? = ;

                            int 25 name
                            int j j 0 = ;

# tcc_cc.c 4813
                            {
                                do
                                {
                                    s ? ?1 char 0 != && { s ? ?1 char 61 != } ! if { break }
# tcc_cc.c 4814
                                    j ? 99 <s if
                                    {
# tcc_cc.c 4815
                                        name j $ ? 1 + = 1 - + s ? ?1 char =1 ;
                                    }
                                    s $ ? 1 + = 1 - ;
                                }
                            }
# tcc_cc.c 4816
                            name j ? + 0 =1 ;
                            int env env name 1 get_env () = ;

# tcc_cc.c 4818
                            s ? ?1 char 61 == if
                            {
# tcc_cc.c 4819
# tcc_cc.c 4820
                                s $ ? 1 + = 1 - ;
                                int 50 value
# tcc_cc.c 4822
                                j 0 = ;
# tcc_cc.c 4823
                                s ? ?1 char 34 == if
                                {
# tcc_cc.c 4824
# tcc_cc.c 4825
                                    s $ ? 1 + = 1 - ;
# tcc_cc.c 4826
                                    {
                                        do
                                        {
                                            s ? ?1 char 34 != && { s ? ?1 char 0 != } ! if { break }
# tcc_cc.c 4827
                                            j ? 199 <s if
                                            {
# tcc_cc.c 4828
                                                value j $ ? 1 + = 1 - + s ? ?1 char =1 ;
                                            }
                                            s $ ? 1 + = 1 - ;
                                        }
                                    }
# tcc_cc.c 4829
                                    value j ? + 0 =1 ;
# tcc_cc.c 4830
                                    env ->s14_m_tokens value new_str_token () = ;
                                }
                                else
                                {
# tcc_cc.c 4833
# tcc_cc.c 4834
                                    {
                                        do
                                        {
                                            48 s ? ?1 char <=s && { s ? ?1 char 57 <=s } ! if { break }
# tcc_cc.c 4835
                                            j ? 199 <s if
                                            {
# tcc_cc.c 4836
                                                value j $ ? 1 + = 1 - + s ? ?1 char =1 ;
                                            }
                                            s $ ? 1 + = 1 - ;
                                        }
                                    }
# tcc_cc.c 4837
                                    value j ? + 0 =1 ;
# tcc_cc.c 4838
                                    env ->s14_m_tokens value new_int_token () = ;
                                }
                            }
                        }
                        else
                        {
# tcc_cc.c 4842
                            i ? 1 + argc ? <s && { argv ? i ? 4 * + ? "-o" strcmp () 0 == } if
                            {
# tcc_cc.c 4843
# tcc_cc.c 4844
                                fcode argv ? i $ ? 1 + = 4 * + ? "w" fopen () = ;
# tcc_cc.c 4845
                                fcode ? 0 == if
                                {
# tcc_cc.c 4846
# tcc_cc.c 4847
                                    fcode ? "ERROR: Cannot open file '%s' for writing\n" { int 1 __var_args __var_args argv ? i ? 4 * + ? = ; __var_args fprintf () } ;
# tcc_cc.c 4848
                                    1 return
                                }
                            }
                            else
                            {
# tcc_cc.c 4852
# tcc_cc.c 4853
                                argv ? i ? 4 * + ? only_preprocess ?1 char parse_file () ! if
                                {
# tcc_cc.c 4854
                                    1 return
                                }
                            }
                        }
                    }
                }
            }
            i $ ? 1 + = 1 - ;
        }
    }
# tcc_cc.c 4857
    has_error ?1 char if
    {
# tcc_cc.c 4858
        4294967295 return
    }
# tcc_cc.c 4860
    only_preprocess ?1 char if
    {
# tcc_cc.c 4861
        0 return
    }
# tcc_cc.c 4863
    gen_init_globals () ;
# tcc_cc.c 4865
    0 return
    0 return
}
void __init_globals__
{
    __sys_stdin $ 0 = ;
    4 + 0 = ;
    __sys_stdout $ 1 = ;
    4 + 0 = ;
    __sys_stderr $ 2 = ;
    4 + 0 = ;
    stdin __sys_stdin = ;
    stdout __sys_stdout = ;
    stderr __sys_stderr = ;
    LINE_MACRO_OUTPUT_FORMAT_GCC 0 = ;
    LINE_MACRO_OUTPUT_FORMAT_NONE 1 = ;
    LINE_MACRO_OUTPUT_FORMAT_STD 2 = ;
    LINE_MACRO_OUTPUT_FORMAT_P10 11 = ;
    _sys_env 0 = ;
    opt_trace_parser 0 =1 ;
    environment 0 = ;
    include_path 0 = ;
    end_include_prefix 0 = ;
    token_it 0 = ;
    BT_VOID 0 = ;
    BT_S8 7 = ;
    BT_U8 5 = ;
    BT_S16 11 = ;
    BT_U16 9 = ;
    BT_S32 15 = ;
    BT_U32 13 = ;
    BT_S64 19 = ;
    BT_U64 17 = ;
    BT_F 23 = ;
    BT_DF 27 = ;
    BT_JMP_BUF 28 = ;
    BT_FILE 32 = ;
    BT_TIME_T 36 = ;
    TYPE_KIND_BASE 0 = ;
    TYPE_KIND_STRUCT 1 = ;
    TYPE_KIND_UNION 2 = ;
    TYPE_KIND_POINTER 3 = ;
    TYPE_KIND_ARRAY 4 = ;
    TYPE_KIND_FUNCTION 5 = ;
    base_type_void 0 = ;
    base_type_S8 0 = ;
    base_type_U8 0 = ;
    base_type_S16 0 = ;
    base_type_U16 0 = ;
    base_type_S32 0 = ;
    base_type_U32 0 = ;
    base_type_S64 0 = ;
    base_type_U64 0 = ;
    base_type_float 0 = ;
    base_type_double 0 = ;
    base_type_jmp_buf 0 = ;
    base_type_file 0 = ;
    base_type_time_t 0 = ;
    base_type_bool 0 = ;
    type_char_ptr 0 = ;
    DK_IDENT 0 = ;
    DK_STRUCT 1 = ;
    DK_UNION 2 = ;
    DK_ENUM 3 = ;
    ST_NONE 0 = ;
    ST_STATIC 1 = ;
    ST_TYPEDEF 2 = ;
    ST_CONST 3 = ;
    trace_decls 0 =1 ;
    cur_ident_decls 0 = ;
    cur_decls 0 = ;
    cur_labels 0 = ;
    fcode 0 = ;
    cur_struct_or_union 0 = ;
    save_decl_depth 0 = ;
    inside_function 0 =1 ;
    inside_argument_list 0 =1 ;
    add_tracing 0 =1 ;
    default_case_nr 0 = ;
    fall_through_case_nr 0 = ;
    label_statement 0 =1 ;
    indent 0 = ;
    struct_union_nr 0 = ;
    has_error 0 =1 ;
    0 return
}

File /src/stdlib.c

Source file is 'src/stdlib.c'.
URL: https://github.com/FransFaase/MES-replacement/blob/64abad6a2a55cbef00ffa065e1c019c6a1932acf/src/stdlib.c
// Functions implemented in stack_c_intro.M1

int sys_int80(int a, int b, int c, int d); // https://faculty.nps.edu/cseagle/assembly/sys_call.html
void *sys_malloc(size_t size);

void exit(int result)
{
    sys_int80(1, result, 0, 0);
}

#define NULL 0

typedef uint32_t off_t;
typedef uint32_t time_t;
typedef uint32_t suseconds_t;

typedef struct 
{
    uint32_t fh;
    uint32_t at_eof;
} FILE;
FILE __sys_stdin = { 0, 0 };
FILE __sys_stdout = { 1, 0 };
FILE __sys_stderr = { 2, 0 };

const FILE *stdin = &__sys_stdin;
const FILE *stdout = &__sys_stdout;
const FILE *stderr = &__sys_stderr;

void *memcpy(void *dest, const void *src, size_t n)
{
    char *d = (char *)dest;
    char *s = (char *)src;
    for (int i = 0; i < n; i++)
        d[i] = s[i];
    return dest;
}

void *memmove(void *dest, const void *src, size_t n)
{
    char *d = (char *)dest;
    char *s = (char *)src;
    if (1) //dest < src)
    {
        for (size_t i = 0; i < n; i++)
            d[i] = s[i];
    }
    else if (src < dest)
    {
        size_t j = n-1;
        for (size_t i = 0; i < n; i++, j--)
            d[j] = s[j];
    }
    return dest;
}

void *memset(void *s, int c, size_t n)
{
    char *p = s
    for (size_t i = 0; i < n; i++)
        p[i] = c;
    return s;
}

int memcmp(const void *s1, const void *s2, size_t n)
{
    char *p1 = (char*)s1;
    char *p2 = (char*)s2;
    for (size_t i = 0; i < n; i++, p1++, p2++)
    {
        int result = *(char*)p1 - *(char*)p2;
        if (result != 0)
            return result;
    }
    return 0;
}

size_t strlen(const char *s)
{
    int len = 0;
    for (; *s != '\0'; s++)
        len++;
    return len;
}

char *strcpy(char *dest, const char *src)
{
    char *result = dest;
    while (*src != '\0')
        *dest++ = *src++;
    *dest = '\0';
    return result;
}

char *strncpy(char *dest, const char *src, size_t n)
{
    char *d = (char *)dest;
    char *s = (char *)src;
    for (int i = 0; i < n; i++)
    {
        d[i] = s[i];
        if (s[i] == '\0')
            break;
    }
    return dest;
}

char *strcat(char *dest, const char *src)
{
    strcpy(dest + strlen(dest), src);
    return dest;
}

char *strchr(const char *s, int c)
{
    for (; *s != '\0'; s++)
        if (*s == c)
            return s;
    return c == '\0' ? s : NULL;
}

char *strrchr(const char *s, int c)
{
    int n = strlen(s);
    for (int i = n; i >= 0; i--)
        if (s[i] == c)
            return s + i;
    return NULL;
}

int strcmp(const char *s1, const char *s2)
{
    for (;;)
    {
        int result = *s1 - *s2;
        if (result != 0 || *s1 == 0)
            return result;
        s1++;
        s2++;
    }
    return 0; // should not get here
}

int strncmp(const char *s1, const char *s2, size_t n)
{
    for (; n > 0; n--)
    {
        int result = *s1 - *s2;
        if (result != 0 || *s1 == 0)
            return result;
        s1++;
        s2++;
    }
    return 0;
}

char *strstr(const char *haystack, const char *needle)
{
    int n = strlen(needle);
    for (; *haystack != '\0'; haystack++)
        if (strncmp(haystack, needle, n) == 0)
            return haystack;
    return NULL;
}


long strtoul(const char *nptr, char **endptr, int base)
{
    if (base == 0)
    {
        base = 10;
        if (*nptr == '0')
        {
            base = 8;
            nptr++;
            if (*nptr == 'x' || *nptr == 'X')
            {
                base = 16;
                nptr++;
            }
        }
    }
    long result = 0;
    char sub_10 = '0' + (base < 10 ? base : 10);
    for (;; nptr++)
    {
        if ('0' <= *nptr && *nptr < sub_10)
            result = base * result + *nptr - '0';
        else if ('a' <= *nptr && *nptr < 'a' + base - 10)
            result = base * result + *nptr - 'a' + 10;
        else if ('A' <= *nptr && *nptr < 'A' + base - 10)
            result = base * result + *nptr - 'A' + 10;
        else
            break;
    }
    if (endptr != NULL)
        *endptr = nptr;
    return result;
}

long strtol(const char *nptr, char **endptr, int base)
{
    long sign = 1;
    if (*nptr == '-')
    {
        sign = -1;
        nptr++;
    }
    return sign * strtoul(nptr, endptr, base);
}

long strtoll(const char *nptr, char **endptr, int base)
{
    return strtol(nptr, endptr, base);
}

long strtoull(const char *nptr, char **endptr, int base)
{
    return strtoul(nptr, endptr, base);
}

float strtof(const char* str, char **endptr)
{
    // TODO: implement float parsing to int?
    *endptr = str;
    return 0;
}

void *malloc(size_t size)
{
    size = (size + 3) & ~3;
    int *result = sys_malloc(size + 4);
    *result = size;
    result++;
    return result;
}

void *realloc(void *ptr, size_t size)
{
    int *result = malloc(size);
    if (ptr != 0)
    {
        int *old_ptr = ptr;
        int old_size = old_ptr[-1] / 4;
        for (int i = 0; i < old_size; i++)
            result[i] = old_ptr[i];
    }
    return result;
}

void *calloc(int N, int S)
{
    int len = N * S;
    char *r = (char*)malloc(len);
    for (int i = 0; i < len; i++)
        r[i] = '\0';
    return r;
}

void free(void *ptr)
{
    // Do freeing of memory
    return 0
}

size_t fwrite(const void *ptr, size_t size, size_t nmemb, FILE *stream)
{
    return sys_int80(4, stream->fh, ptr, size * nmemb);
}

int fputc(int c, FILE *stream)
{
    return sys_int80(4, stream->fh, &c, 1);
}

int fputs(const char *s, FILE *stream)
{
    return sys_int80(4, stream->fh, s, strlen(s));
}

typedef int *va_list;

int __sys_printf(FILE *stream, char *trg, int len, char *format, va_list args)
{
    char buffer[20];
    int l = 0;
    char *s;
    int cnt = 0;

    char *org_format = format;

    for (;;)
    {
        if (len == 0)
            break;
        if (l > 0)
        {
            if (stream != 0)
                fputc(*s, stream);
            else if (trg != 0)
                *trg++ = *s;
            s++;
            l--;
            cnt++;
            if (len > 0)
                len--;
        }
        if (l == 0)
        {
            if (*format == '\0')
                break;
            s = buffer;
            l = 1;
            if (*format == '%')
            {
                format++;
                if (*format == '%')
                    buffer[0] = '%';
                else
                {
                    int modifier = 0;
                    int sign = 1;
                    if (*format == '-')
                    {
                        sign = -1;
                        format++;
                    }
                    while ('0' <= *format && *format <= '9')
                    {
                        modifier = 10 * modifier + *format - '0';
                        format++;
                    }
                    if (*format == 's')
                    {
                        s = (char*)*args++;
                        l = strlen(s);
                    }
                    else if (*format == 'd')
                    {
                        int v = *args;
                        int b = 20;
                        if (v == 0)
                            buffer[--b] = '0';
                        else
                        {
                            if (v < 0) v = -v;
                            for (; v > 0; v = v / 10)
                                buffer[--b] = '0' + v % 10;
                            if (*args < 0)
                                buffer[--b] = '-';
                        }
                        l = 20 - b;
                        if (modifier > 0)
                        {
                            if (modifier > l)
                            {
                                if (sign == -1)
                                {
                                    for (int i = 20 - modifier; i < 20; i++)
                                        buffer[i] = b < 20 ? buffer[b++] : ' ';
                                    b = 20 - modifier;
                                }
                                else
                                    for (; l < modifier; l++)
                                        buffer[--b] = ' ';
                            }
                            l = modifier;
                        }
                        s = buffer + b;
                        args++;
                    }
                    else if (*format == 'u')
                    {
                        unsigned int v = *args++;
                        if (v == 0)
                            buffer[0] = '0';
                        else
                        {
                            l = 20;
                            for (; v > 0; v = v / 10)
                                buffer[--l] = '0' + v % 10;
                            s = buffer + l;
                            l = 20 - l;
                        }
                    }
                    else if (*format == 'x' || *format == 'p')
                    {
                        unsigned int v = *args++;
                        if (v == 0)
                            buffer[0] = '0';
                        else
                        {
                            l = 20;
                            for (; v != 0; v >>= 4)
                                buffer[--l] = ((v & 0xf) < 10 ? '0' : ('a' - 10)) + (v & 0xf);
                            s = buffer + l;
                            l = 20 - l;
                        }
                    }
                    else if (*format == 'c')
                    {
                        buffer[0] = *args++;
                    }
                    else
                    {
                        fputs("__sys_printf %", stderr);
                        fputc(*format, stderr);
                        fputs(" ", stderr);
                        fputs(org_format, stderr);
                        fputs("\n", stderr);
                        exit(1);
                    }
                }
            }
            else
            {
                buffer[0] = *format;
                s = buffer;
                l = 1;
            }
            format++;
        }
    }
    if (len != 0 && trg != 0)
        *trg = '\0';
    return cnt;
}

void va_start(va_list ap, ...);
void va_end(va_list ap) {}

int fprintf(FILE *stream, const char *format, ...)
{
    va_list ap;
    va_start(ap, format);
    return __sys_printf(stream, 0, -1, format, ap);
}

int printf(const char *format, ...)
{
    va_list ap;
    va_start(ap, format);
    return __sys_printf(stdout, 0, -1, format, ap);
}

int sprintf(char *str, const char *format, ...)
{
    va_list ap;
    va_start(ap, format);
    return __sys_printf(0, str, -1, format, ap);
}
int snprintf(char *str, size_t size, const char *format, ...)
{
    va_list ap;
    va_start(ap, format);
    return __sys_printf(0, str, size, format, ap);
}

int vsnprintf(char *str, size_t size, const char *format, va_list ap)
{
    return __sys_printf(0, str, size, format, ap);
}

#define O_RDONLY 0
#define O_WRONLY 1
#define O_RDWR   2
#define O_CREAT 00100
#define O_TRUNC 001000

#define SEEK_SET 0
#define SEEK_CUR 1
#define SEEK_END 2

int open(const char *filename, int flag, ...)
{
    int mode = 0;
    if ((flag & O_WRONLY) != 0)
    {
        va_list ap;
        va_start(ap, flag);
        mode = ap[0];
    }
    return sys_int80(5, filename, flag, mode);
}

int close(int fd)
{
    return sys_int80(6, fd, 0, 0);
}

size_t read(int fd, void *buf, size_t count)
{
    return sys_int80(3, fd, buf, count);
}

off_t lseek(int fd, off_t offset, int whence)
{
    return sys_int80(19, fd, offset, whence);
}

FILE *fopen(const char *pathname, const char *mode)
{
    char rw = *mode;
    if (*mode == 'r' || *mode == 'w')
        mode++;
    int bin = 0;
    if (*mode == 'b')
    {
        bin = 1;
        mode++;
    }
    int plus = 0;
    if (*mode == '+')
    {
        plus = 1;
        mode++;
    }
    if (*mode != '\0')
    {
        printf("Mode %s should be 'r/w(b)(+)', 'w', or 'wb'\n", mode);
        return 0;
    }

    int open_mode =   rw == 'r'
                    ? (plus == 1 ? O_RDWR : O_RDONLY)
                    : ((plus == 1 ? O_RDWR : O_WRONLY) | O_CREAT | O_TRUNC);
    int fh = sys_int80(5, pathname, open_mode, 0777);
    if (fh < 0)
    {
        printf("fopen %s %s returned %d\n", pathname, mode, fh);
        return 0;
    }
    FILE *f = (FILE*)malloc(sizeof(FILE));
    f->fh = fh;
    f->at_eof = 0;
    return f;
}

FILE *fdopen(int fd, const char *mode)
{
    FILE *f = (FILE*)malloc(sizeof(FILE));
    f->fh = fd;
    f->at_eof = 0;
    return f;
}

int fclose(FILE *stream)
{
    return sys_int80(6, stream->fh, 0, 0);
}

int fflush(FILE *stream)
{
    // (No buffered output)
    return 0;
}

int fseek(FILE *stream, long offset, int whence)
{
    return lseek(stream->fh, offset, whence);
}

long ftell(FILE *stream)
{
    return lseek(stream->fh, 0, SEEK_CUR);
}

size_t fread(void *ptr, size_t size, size_t nmemb, FILE *stream)
{
    char *s = (char*)ptr;
    for (int i = 0; i < nmemb; i++)
    {
        size_t r = read(stream->fh, s, size);
        if (r < size)
            return i;
        s += size;
    }
    return nmemb;
}


#define SEEK_SET    0
#define SEEK_CUR    1
#define SEEK_END    2
off_t lseek(int fd, off_t offset, int whence)
{
    return sys_int80(19, fd, offset, whence);
}

int feof(FILE *stream)
{
    return stream->at_eof;
}

int fgetc(FILE *stream)
{
    if (stream->at_eof)
        return -1;
    unsigned char ch;
    int ret = sys_int80(3, stream->fh, &ch, 1);
    if (ret <= 0)
    {
        stream->at_eof = 1;
        return -1;
    }
    return ch;
}


double ldexp(double x, int exp)
{
    double result = x;
    for (int i = 1; i < exp; i++)
        result *= x;
    return result;
}

time_t time(time_t *tloc)
{
    // TODO (function is used, but not called)
    fprintf(stderr, "TODO time\n"); exit(1);
}

struct tm {
    int tm_sec;    /* Seconds (0-60) */
    int tm_min;    /* Minutes (0-59) */
    int tm_hour;   /* Hours (0-23) */
    int tm_mday;   /* Day of the month (1-31) */
    int tm_mon;    /* Month (0-11) */
    int tm_year;   /* Year - 1900 */
    int tm_wday;   /* Day of the week (0-6, Sunday = 0) */
    int tm_yday;   /* Day in the year (0-365, 1 Jan = 0) */
    int tm_isdst;  /* Daylight saving time */
};
struct tm *localtime(const time_t *timep)
{
    // TODO (function is used, but not called)
    fprintf(stderr, "TODO localtime\n"); exit(1);
}

struct timeval {
    time_t      tv_sec;     /* seconds */
    suseconds_t tv_usec;    /* microseconds */
};
struct timezone {
    int tz_minuteswest;     /* minutes west of Greenwich */
    int tz_dsttime;         /* type of DST correction */
};
int gettimeofday(struct timeval *tv, struct timezone *tz)
{
    return 0;
}

int errno;

#define NULL 0

// This is a hack for an enum that is defined inside a struct
const int LINE_MACRO_OUTPUT_FORMAT_GCC = 0;
const int LINE_MACRO_OUTPUT_FORMAT_NONE = 1;
const int LINE_MACRO_OUTPUT_FORMAT_STD = 2;
const int LINE_MACRO_OUTPUT_FORMAT_P10 = 11;

// for tcc_cc.c
int write(int fd, char* buf, unsigned count)
{
    return sys_int80(4, fd, buf, count);
}

int fileno(FILE *stream)
{
    return stream->fh;
}

#define __LINE__ 0
#define __file__ ""
#define __func__ ""

char *getcwd(char *buf, size_t size)
{
    sys_int80(183, buf, size, 0);
    return buf;
}

char **_sys_env = 0;

char *getenv(const char *name)
{
    int len = strlen(name);
    for (char **env = _sys_env; *env != NULL; env++)
        if (strncmp(*env, name, len) == 0 && (*env)[len] == '=')
            return (*env) + len + 1;
}

void qsort(void *base, size_t nmemb, size_t size, int (*compar)(const void *, const void *))
{
    // just implement a simple bubble sort
    for (int go = 1; go == 1;)
    {
        go = 0;
        for (int i = 0; i + 1 < nmemb; i++)
        {
            char *arg1 = (char*)base + i * size;
            char *arg2 = (char*)base + (1 + i) * size;
            int sign = compar(arg1, arg2);
            if (sign > 0)
            {
                go = 1;
                for (int j = 0; j < size; j++)
                    if (j + 3 < size)
                    {
                        //printf("(swap int %d %d %d)", j, *(int*)(arg1 + j), *(int*)(arg2 + j));;
                        int h = *(int*)(arg1 + j);
                        *(int*)(arg1 + j) = *(int*)(arg2 + j);
                        *(int*)(arg2 + j) = h;
                        j += 3;
                    }
                    else
                    {
                        //printf("(swap char %d)", j);
                        char h = ((char*)arg1)[j];
                        ((char*)arg1)[j] = ((char*)arg2)[j];
                        ((char*)arg2)[j] = h;
                    }
            }
        }
    }
}

time_t time(time_t *tloc)
{
    // TODO (function is used, but not called)
    fprintf(stderr, "TODO time\n"); exit(1);
}

int setjmp(jmp_buf env)
{
    // TODO (function is used, but not called)
    fprintf(stderr, "TODO setjmp\n"); exit(1);
    return 0;
}

void longjmp(jmp_buf env, int val)
{
    // TODO (function is used, but not called)
    fprintf(stderr, "TODO longjmp\n"); exit(0);
    exit(-1);
}

int unlink(const char *pathname)
{
    return sys_int80(10, pathname, 0, 0);
}

int sscanf(const char *str, const char *format, ...)
{
    va_list ap;
    va_start(ap, format);

    int args_parsed = 0;

    while (*format != '\0')
        if (*str == '\0')
            break;
        else if (*format == '%')
        {
            format++;
            if (*format == 'd')
            {
                format++;
                int v = 0;
                while ('0' <= *str && *str <= '9')
                {
                    v = 10 * v + *str - '0';
                    str++;
                }
                **((int**)ap) = v;
                ap++;
                args_parsed++;
            }
            else
            {
                fprintf(stderr, "sscanf: format %%%c not supported\n", *format);
                exit(1);
            }
        }
        else
        {
            if (*format != *str)
                break;
            format++;
            str++;
        }
    return args_parsed;
}

int atoi(const char *nptr)
{
    // TODO (function is used, but not called)
    fprintf(stderr, "TODO atoi\n"); exit(1);
}

int remove(const char *pathname)
{
    return sys_int80(10, pathname, 0, 0);
}

int execvp(const char *file, char * argv[])
{
    // TODO (function is used, but not called)
    fprintf(stderr, "TODO execvp\n"); exit(1);
}

int mkdir(const char *pathname, int mode)
{
    return sys_int80(39, pathname, mode, 0);
}

int chdir(const char *path)
{
    sys_int80(12, path, 0, 0);
}

int access(const char *filename, int mode)
{
    return sys_int80(33, filename, mode, 0);
}

int chmod(const char *filename, int mode)
{
    return sys_int80(15, filename, mode, 0);
}

int symlink(const char *target, const char *linkpath)
{
    return sys_int80(83, target, linkpath, 0);
}

struct utsname {
    char sysname[];    /* Operating system name (e.g., "Linux") */
    char nodename[];   /* Name within communications network
                          to which the node is attached, if any */
    char release[];    /* Operating system release
                          (e.g., "2.6.28") */
    char version[];    /* Operating system version */
    char machine[];    /* Hardware type identifier */
#ifdef _GNU_SOURCE
    char domainname[]; /* NIS or YP domain name */
#endif
};

int uname(struct utsname *buf)
{
    return sys_int80(109, buf, 0, 0);
}

int execve(char *program, char **argv, char **env)
{
    return sys_int80(11, program, argv, env);
}

char *fgets(char *str, int len, FILE *f)
{
    if (feof(f))
        return NULL;
    
    for (int i = 0; i < len - 1; i++)
    {
        int ch = fgetc(f);
        if (ch < 0)
        {
            str[i] = '\0';
            break;
        }
        str[i] = ch;
        if (ch == '\n')
        {
            str[i+1] = '\0';
            break;
        }
    }
    return str;
}


#define __linux__

#define EOF -1
#define EXIT_FAILURE -1
#define EXIT_SUCCESS 0

File /src/kaem.c

Source file is 'src/kaem.c'.
URL: https://github.com/FransFaase/MES-replacement/blob/64abad6a2a55cbef00ffa065e1c019c6a1932acf/src/kaem.c
/* This file containst the following files from https://github.com/oriansj/mescc-tools/tree/master/Kaem:
 * - kaem.h
 * - bootstrappable.c (from https://github.com/oriansj/M2libc/)
 * - kaem_globals.c
 * - variable.c
 * - kaem.c
*/

#ifdef __TCC_CC__
#define chdir(path) sys_int80(12, path, 0, 0)
#define fork() sys_int80(2, 0, 0, 0)
#define execve(program, argv, env) sys_int80(11, program, argv, env)
#define waitpid(f, status, mode) sys_int80(7, f, status, mode)
#endif

/* Copyright (C) 2016-2020 Jeremiah Orians
 * Copyright (C) 2020 fosslinux
 * This file is part of mescc-tools.
 *
 * mescc-tools is free software: you can redistribute it and/or modify
 * it under the terms of the GNU General Public License as published by
 * the Free Software Foundation, either version 3 of the License, or
 * (at your option) any later version.
 *
 * mescc-tools is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 * GNU General Public License for more details.
 *
 * You should have received a copy of the GNU General Public License
 * along with mescc-tools.  If not, see <http://www.gnu.org/licenses/>.
 */

#include <stdio.h>

/*
 * DEFINES
 */

#define FALSE 0
#define TRUE 1
// CONSTANT SUCCESS 0
#define SUCCESS 0
// CONSTANT FAILURE 1
#define FAILURE 1
#define MAX_STRING 4096
#define MAX_ARRAY 300


/*
 * Here is the token struct. It is used for both the token linked-list and
 * env linked-list.
 */
struct Token
{
    /*
     * For the token linked-list, this stores the token; for the env linked-list
     * this stores the value of the variable.
     */
    char* value;
    /*
     * Used only for the env linked-list. It holds a string containing the
     * name of the var.
     */
    char* var;
    /*
     * This struct stores a node of a singly linked list, store the pointer to
     * the next node.
     */
    struct Token* next;
};

/* Copyright (C) 2016-2020 Jeremiah Orians
 * Copyright (C) 2020 fosslinux
 * This file is part of mescc-tools.
 *
 * mescc-tools is free software: you can redistribute it and/or modify
 * it under the terms of the GNU General Public License as published by
 * the Free Software Foundation, either version 3 of the License, or
 * (at your option) any later version.
 *
 * mescc-tools is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 * GNU General Public License for more details.
 *
 * You should have received a copy of the GNU General Public License
 * along with mescc-tools.  If not, see <http://www.gnu.org/licenses/>.
 */

//#include "kaem.h"

int command_done;
int VERBOSE;
int VERBOSE_EXIT;
int STRICT;
int INIT_MODE;
int FUZZING;
int WARNINGS;
char* KAEM_BINARY;
char* PATH;

/* Token linked-list; stores the tokens of each line */
struct Token* token;
/* Env linked-list; stores the environment variables */
struct Token* env;
/* Alias linked-list; stores the aliases */
struct Token* alias;

/* Copyright (C) 2016 Jeremiah Orians
 * This file is part of M2-Planet.
 *
 * M2-Planet is free software: you can redistribute it and/or modify
 * it under the terms of the GNU General Public License as published by
 * the Free Software Foundation, either version 3 of the License, or
 * (at your option) any later version.
 *
 * M2-Planet is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 * GNU General Public License for more details.
 *
 * You should have received a copy of the GNU General Public License
 * along with M2-Planet.  If not, see <http://www.gnu.org/licenses/>.
 */

#include <stdio.h>
#include <stdlib.h>

#define TRUE 1
#define FALSE 0


void require(int bool, char* error)
{
    if(!bool)
    {
        fputs(error, stderr);
        exit(EXIT_FAILURE);
    }
}


int match(char* a, char* b)
{
    if((NULL == a) && (NULL == b)) return TRUE;
    if(NULL == a) return FALSE;
    if(NULL == b) return FALSE;

    int i = -1;
    do
    {
        i = i + 1;
        if(a[i] != b[i])
        {
            return FALSE;
        }
    } while((0 != a[i]) && (0 !=b[i]));
    return TRUE;
}


int in_set(int c, char* s)
{
    /* NULL set is always false */
    if(NULL == s) return FALSE;

    while(0 != s[0])
    {
        if(c == s[0]) return TRUE;
        s = s + 1;
    }
    return FALSE;
}

/* INTERNAL ONLY */
int __index_number(char* s, char c)
{
    int i = 0;
    while(s[i] != c)
    {
        i = i + 1;
        if(0 == s[i]) return -1;
    }
    return i;
}

/* INTERNAL ONLY */
int __toupper(int c)
{
    if(in_set(c, "abcdefghijklmnopqrstuvwxyz")) return (c & 0xDF);
    return c;
}

/* INTERNAL ONLY */
int __set_reader(char* set, int mult, char* input)
{
    int n = 0;
    int i = 0;
    int hold;
    int negative_p = FALSE;

    if(input[0] == '-')
    {
        negative_p = TRUE;
        i = i + 1;
    }

    while(in_set(input[i], set))
    {
        if('_' == input[i])
        {
            i = i + 1;
            continue;
        }

        n = n * mult;
        hold = __index_number(set, __toupper(input[i]));

        /* Input managed to change between in_set and index_number */
        if(-1 == hold) return 0;
        n = n + hold;
        i = i + 1;
    }

    /* loop exited before NULL and thus invalid input */
    if(0 != input[i]) return 0;

    if(negative_p)
    {
        n = 0 - n;
    }

    return n;
}

int strtoint(char *a)
{
    int result = 0;
    /* If NULL string */
    if(0 == a[0])
    {
        result = 0;
    }
    /* Deal with binary */
    else if ('0' == a[0] && 'b' == a[1])
    {
        result = __set_reader("01_", 2, a+2);
    }
    /* Deal with hex */
    else if ('0' == a[0] &&  'x' == a[1])
    {
        result = __set_reader("0123456789ABCDEFabcdef_", 16, a+2);
    }
    /* Deal with octal */
    else if('0' == a[0])
    {
        result = __set_reader("01234567_", 8, a+1);
    }
    /* Deal with decimal */
    else
    {
        result = __set_reader("0123456789_", 10, a);
    }

    /* Deal with sign extension for 64bit hosts */
    if(0 != (0x80000000 & result)) result = (0xFFFFFFFF << 31) | result;
    return result;
}

char* int2str(int x, int base, int signed_p)
{
    require(1 < base, "int2str doesn't support a base less than 2\n");
    require(37 > base, "int2str doesn't support a base more than 36\n");
    /* Be overly conservative and save space for 32binary digits and padding null */
    char* p = calloc(34, sizeof(char));
    /* if calloc fails return null to let calling code deal with it */
    if(NULL == p) return p;

    p = p + 32;
    unsigned i;
    int sign_p = FALSE;
    char* table = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ";

    if(signed_p && (10 == base) && (0 != (x & 0x80000000)))
    {
        /* Truncate to 31bits */
        i = -x & 0x7FFFFFFF;
        if(0 == i) return "-2147483648";
        sign_p = TRUE;
    } /* Truncate to 32bits */
    else i = x & (0x7FFFFFFF + 0x80000000); /* M2-Planet/cc_* can't handle large signed numbers in literals */

    do
    {
        p[0] = table[i % base];
        p = p - 1;
        i = i / base;
    } while(0 < i);

    if(sign_p)
    {
        p[0] = '-';
        p = p - 1;
    }

    return p + 1;
}

/*
 * Copyright (C) 2020 fosslinux
 * This file is part of mescc-tools.
 *
 * mescc-tools is free software: you can redistribute it and/or modify
 * it under the terms of the GNU General Public License as published by
 * the Free Software Foundation, either version 3 of the License, or
 * (at your option) any later version.
 *
 * mescc-tools is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 * GNU General Public License for more details.
 *
 * You should have received a copy of the GNU General Public License
 * along with mescc-tools.  If not, see <http://www.gnu.org/licenses/>.
 */

#include <stdlib.h>
#include <stdio.h>
#include <unistd.h>
#include <string.h>
//#include "kaem.h"

/* Prototypes from other files */
int array_length(char** array);
char* env_lookup(char* variable);

/*
 * VARIABLE HANDLING FUNCTIONS
 */

/* Substitute a variable into n->value */
int run_substitution(char* var_name, struct Token* n)
{
    char* value = env_lookup(var_name);
    /* If there is nothing to substitute, don't substitute anything! */
    if(value != NULL)
    {
        char* s = calloc(MAX_STRING, sizeof(char));
        s = strcat(s, n->value);
        s = strcat(s, value);
        n->value = s;
        return TRUE;
    }
    return FALSE;
}

/* Handle ${var:-text} format of variables - i.e. ifset format */
int variable_substitute_ifset(char* input, struct Token* n, int index)
{
    /*
     * In ${var:-text} format, we evaluate like follows.
     * If var is set as an envar, then we substitute the contents of that
     * envar. If it is not set, we substitute alternative text.
     *
     * In this function, we assume that input is the raw token,
     * n->value is everything already done in variable_substitute,
     * index is where we are up to in input. offset is for n->value.
     */

    /*
     * Check if we should even be performing this function.
     * We perform this function when we come across ${var:-text} syntax.
     */
    int index_old = index;
    int perform = FALSE;
    int input_length = strlen(input);
    while(index < input_length)
    { /* Loop over each character */
        if(input[index] == ':' && input[index + 1] == '-')
        { /* Yes, this is (most likely) ${var:-text} format. */
            perform = TRUE;
            break;
        }
        index = index + 1;
    }

    /* Don't perform it if we shouldn't */
    if(perform == FALSE) return index_old;
    index = index_old;

    /*
     * Get offset.
     * offset is the difference between the index of the variable we write to
     * in the following blocks and input.
     * This stays relatively constant.
     */
    int offset = index;

    /* Get the variable name */
    char* var_name = calloc(MAX_STRING, sizeof(char));
    require(var_name != NULL, "Memory initialization of var_name in variable_substitute_ifset failed\n");
    while(input[index] != ':')
    { /* Copy into var_name until :- */
        var_name[index - offset] = input[index];
        index = index + 1;
    }

    /* Skip over :- */
    index = index + 2;
    offset = index;

    /* Get the alternative text */
    char* text = calloc(MAX_STRING, sizeof(char));
    require(text != NULL, "Memory initialization of text in variable_substitute_ifset failed\n");
    while(input[index] != '}')
    { /* Copy into text until } */
        require(input_length > index, "IMPROPERLY TERMINATED VARIABLE\nABORTING HARD\n");
        text[index - offset] = input[index];
        index = index + 1;
    }

    /* Do the substitution */
    if(run_substitution(var_name, n) == FALSE)
    { /* The variable was not found. Substitute the alternative text. */
        char* s = calloc(MAX_STRING, sizeof(char));
        s = strcat(s, n->value);
        s = strcat(s, text);
        n->value = s;
    }

    return index;
}

/* Controls substitution for ${variable} and derivatives */
int variable_substitute(char* input, struct Token* n, int index)
{
    /* NOTE: index is the pos of input */
    index = index + 1; /* We don't want the { */

    /*
     * Check for "special" types
     * If we do find a special type we delegate the substitution to it
     * and return here; as we are done... there's nothing more do do in
     * that case.
     */
    int index_old = index;
    index = variable_substitute_ifset(input, n, index);
    if(index != index_old) return index;

    /* Reset index */
    index = index_old;

    /*
     * If we reach here it is a normal substitution
     * Let's do it!
     */
    /* Initialize var_name and offset */
    char* var_name = calloc(MAX_STRING, sizeof(char));
    require(var_name != NULL, "Memory initialization of var_name in variable_substitute failed\n");
    int offset = index;

    /* Get the variable name */
    int substitute_done = FALSE;
    char c;
    while(substitute_done == FALSE)
    {
        c = input[index];
        require(MAX_STRING > index, "LINE IS TOO LONG\nABORTING HARD\n");
        if(EOF == c || '\n' == c || index > strlen(input))
        { /* We never should hit EOF, EOL or run past the end of the line 
             while collecting a variable */
            fputs("IMPROPERLY TERMINATED VARIABLE!\nABORTING HARD\n", stderr);
            exit(EXIT_FAILURE);
        }
        else if('\\' == c)
        { /* Drop the \ - poor mans escaping. */
            index = index + 1;
        }
        else if('}' == c)
        { /* End of variable name */
            substitute_done = TRUE;
        }
        else
        {
            var_name[index - offset] = c;
            index = index + 1;
        }
    }

    /* Substitute the variable */
    run_substitution(var_name, n);

    return index;
}

/* Function to concatenate all command line arguments */
void variable_all(char** argv, struct Token* n)
{
    fflush(stdout);
    /* index refernences the index of n->value, unlike other functions */
    int index = 0;
    int argv_length = array_length(argv);
    int i = 0;
    char* argv_element = calloc(MAX_STRING, sizeof(char));
    char* hold = argv[i];
    n->value = argv_element;
    /* Assuming the form kaem -f script or kaem -f script -- 123 we want matching results to bash, so skip the kaem, -f and script */
    while(!match("--", hold))
    {
        i = i + 1;
        hold = argv[i];
        if(argv_length == i) break;
    }

    /* put i = i + 1 in the for initialization to skip past the -- */
    for(; i < argv_length; i = i + 1)
    {
        /* Ends up with (n->value) (argv[i]) */
        /* If we don't do this we get jumbled results in M2-Planet */
        hold = argv[i];
        strcpy(argv_element + index, hold);
        index = index + strlen(hold);

        /* Add space on the end */
        n->value[index] = ' ';
        index = index + 1;
    }
    /* Remove trailing space */
    index = index - 1;
    n->value[index] = 0;
}

/* Function controlling substitution of variables */
void handle_variables(char** argv, struct Token* n)
{
    /* NOTE: index is the position of input */
    int index = 0;

    /* Create input */
    char* input = calloc(MAX_STRING, sizeof(char));
    require(input != NULL, "Memory initialization of input in collect_variable failed\n");
    strcpy(input, n->value);
    /* Reset n->value */
    n->value = calloc(MAX_STRING, sizeof(char));
    require(n->value != NULL, "Memory initialization of n->value in collect_variable failed\n");

    /* Copy everything up to the $ */
    /*
     * TODO: Not need allocation of input before this check if there is no
     * variable in it.
     */
    while(input[index] != '$')
    {
        if(input[index] == 0)
        { /* No variable in it */
            n->value = input;
            return; /* We don't need to do anything more */
        }
        n->value[index] = input[index];
        index = index + 1;
    }

    /* Must be outside the loop */
    int offset;

substitute:
    index = index + 1; /* We are uninterested in the $ */
    /* Run the substitution */
    if(input[index] == '{')
    { /* Handle everything ${ related */
        index = variable_substitute(input, n, index);
        index = index + 1; /* We don't want the closing } */
    }
    else if(input[index] == '@')
    { /* Handles $@ */
        index = index + 1; /* We don't want the @ */
        variable_all(argv, n);
    }
    else
    { /* We don't know that */
        fputs("IMPROPERLY USED VARIABLE!\nOnly ${foo} and $@ format are accepted at this time.\nABORTING HARD\n", stderr);
        exit(EXIT_FAILURE);
    }

    offset = strlen(n->value) - index;
    /* Copy everything from the end of the variable to the end of the token */
    while(input[index] != 0)
    {
        if(input[index] == '$')
        { /* We have found another variable */
            fflush(stdout);
            goto substitute;
        }
        n->value[index + offset] = input[index];
        index = index + 1;
    }
}

/* Copyright (C) 2016-2020 Jeremiah Orians
 * Copyright (C) 2020 fosslinux
 * Copyright (C) 2021 Andrius Å tikonas
 * This file is part of mescc-tools.
 *
 * mescc-tools is free software: you can redistribute it and/or modify
 * it under the terms of the GNU General Public License as published by
 * the Free Software Foundation, either version 3 of the License, or
 * (at your option) any later version.
 *
 * mescc-tools is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 * GNU General Public License for more details.
 *
 * You should have received a copy of the GNU General Public License
 * along with mescc-tools.  If not, see <http://www.gnu.org/licenses/>.
 */

#include <stdlib.h>
#include <stdio.h>
#include <unistd.h>
#include <sys/wait.h>
#include <string.h>
//#include "kaem.h"

/* Prototypes from other files */
void handle_variables(char** argv, struct Token* n);

/*
 * UTILITY FUNCTIONS
 */

/* Function to find a character in a string */
char* find_char(char* string, char a)
{
    if(0 == string[0])
    {
        return NULL;
    }

    while(a != string[0])
    {
        string = string + 1;

        if(0 == string[0])
        {
            return string;
        }
    }

    return string;
}

/* Function to find the length of a char**; an array of strings */
int array_length(char** array)
{
    int length = 0;

    while(array[length] != NULL)
    {
        length = length + 1;
    }

    return length;
}

/* Search for a variable in the token linked-list */
char* token_lookup(char* variable, struct Token* token)
{
    /* Start at the head */
    struct Token* n = token;

    /* Loop over the linked-list */
    while(n != NULL)
    {
        if(match(variable, n->var))
        {
            /* We have found the correct node */
            return n->value; /* Done */
        }

        /* Nope, try the next */
        n = n->next;
    }

    /* We didn't find anything! */
    return NULL;
}

/* Search for a variable in the env linked-list */
char* env_lookup(char* variable)
{
    return token_lookup(variable, env);
}

/* Search for a variable in the alias linked-list */
char* alias_lookup(char* variable)
{
    return token_lookup(variable, alias);
}

/* Find the full path to an executable */
char* find_executable(char* name)
{
    if(match("", name))
    {
        return NULL;
    }

    if(('.' == name[0]) || ('/' == name[0]))
    {
        /* assume names that start with . or / are relative or absolute */
        return name;
    }

    char* trial = calloc(MAX_STRING, sizeof(char));
    char* MPATH = calloc(MAX_STRING, sizeof(char)); /* Modified PATH */
    require(MPATH != NULL, "Memory initialization of MPATH in find_executable failed\n");
    strcpy(MPATH, PATH);
    FILE* t;
    char* next = find_char(MPATH, ':');
    int index;
    int offset;
    int mpath_length;
    int name_length;
    int trial_length;

    while(NULL != next)
    {
        /* Reset trial */
        trial_length = strlen(trial);

        for(index = 0; index < trial_length; index = index + 1)
        {
            trial[index] = 0;
        }

        next[0] = 0;
        /* prepend_string(MPATH, prepend_string("/", name)) */
        mpath_length = strlen(MPATH);

        for(index = 0; index < mpath_length; index = index + 1)
        {
            require(MAX_STRING > index, "Element of PATH is too long\n");
            trial[index] = MPATH[index];
        }

        trial[index] = '/';
        offset = strlen(trial);
        name_length = strlen(name);

        for(index = 0; index < name_length; index = index + 1)
        {
            require(MAX_STRING > index, "Element of PATH is too long\n");
            trial[index + offset] = name[index];
        }

        /* Try the trial */
        require(strlen(trial) < MAX_STRING, "COMMAND TOO LONG!\nABORTING HARD\n");
        t = fopen(trial, "r");

        if(NULL != t)
        {
            fclose(t);
            return trial;
        }

        MPATH = next + 1;
        next = find_char(MPATH, ':');
    }

    return NULL;
}

/* Function to convert a Token linked-list into an array of strings */
char** list_to_array(struct Token* s)
{
    struct Token* n;
    n = s;
    char** array = calloc(MAX_ARRAY, sizeof(char*));
    require(array != NULL, "Memory initialization of array in conversion of list to array failed\n");
    char* element = calloc(MAX_STRING, sizeof(char));
    require(element != NULL, "Memory initialization of element in conversion of list to array failed\n");
    int index = 0;
    int i;
    int value_length;
    int var_length;
    int offset;

    while(n != NULL)
    {
        /* Loop through each node and assign it to an array index */
        array[index] = calloc(MAX_STRING, sizeof(char));
        require(array[index] != NULL, "Memory initialization of array[index] in conversion of list to array failed\n");
        /* Bounds checking */
        /* No easy way to tell which it is, output generic message */
        require(index < MAX_ARRAY, "SCRIPT TOO LONG or TOO MANY ENVARS\nABORTING HARD\n");

        if(n->var == NULL)
        {
            /* It is a line */
            array[index] = n->value;
        }
        else
        {
            /* It is a var */
            /* prepend_string(n->var, prepend_string("=", n->value)) */
            var_length = strlen(n->var);

            for(i = 0; i < var_length; i = i + 1)
            {
                element[i] = n->var[i];
            }

            element[i] = '=';
            i = i + 1;
            offset = i;
            value_length = strlen(n->value);

            for(i = 0; i < value_length; i = i + 1)
            {
                element[i + offset] = n->value[i];
            }
        }

        /* Insert elements if not empty */
        if(!match("", element))
        {
            strcpy(array[index], element);
        }

        n = n->next;
        index = index + 1;

        /* Reset element */
        for(i = 0; i < MAX_STRING; i = i + 1)
        {
            element[i] = 0;
        }
    }

    return array;
}

/* Function to handle the correct options for escapes */
int handle_escape(int c)
{
    if(c == '\n')
    {
        /* Do nothing - eat up the newline */
        return -1;
    }
    else if('n' == c)
    {
        /* Add a newline to the token */
        return '\n';
    }
    else if('r' == c)
    {
        /* Add a return to the token */
        return '\r';
    }
    else if('\\' == c)
    {
        /* Add a real backslash to the token */
        return '\\';
    }
    else
    {
        /* Just add it to the token (eg, quotes) */
        return c;
    }
}

/*
 * TOKEN COLLECTION FUNCTIONS
 */

/* Function for skipping over line comments */
void collect_comment(FILE* input)
{
    int c;

    /* Eat up the comment, one character at a time */
    /*
     * Sanity check that the comment ends with \n.
     * Remove the comment from the FILE*
     */
    do
    {
        c = fgetc(input);
        /* We reached an EOF!! */
        require(EOF != c, "IMPROPERLY TERMINATED LINE COMMENT!\nABORTING HARD\n");
    } while('\n' != c); /* We can now be sure it ended with \n -- and have purged the comment */
}

/* Function for collecting strings and removing the "" pair that goes with them */
int collect_string(FILE* input, char* n, int index)
{
    int string_done = FALSE;
    int c;

    do
    {
        /* Bounds check */
        require(MAX_STRING > index, "LINE IS TOO LONG\nABORTING HARD\n");
        c = fgetc(input);
        require(EOF != c, "IMPROPERLY TERMINATED STRING!\nABORTING HARD\n");

        if('\\' == c)
        {
            /* We are escaping the next character */
            /* This correctly handles escaped quotes as it just returns the quote */
            c = fgetc(input);
            c = handle_escape(c);
            n[index] = c;
            index = index + 1;
        }
        else if('"' == c)
        {
            /* End of string */
            string_done = TRUE;
        }
        else
        {
            n[index] = c;
            index = index + 1;
        }
    } while(string_done == FALSE);

    return index;
}

/* Function to parse and assign token->value */
int collect_token(FILE* input, char* n, int last_index)
{
    int c;
    int cc;
    int token_done = FALSE;
    int index = 0;

    do
    {
        /* Loop over each character in the token */
        c = fgetc(input);
        /* Bounds checking */
        require(MAX_STRING > index, "LINE IS TOO LONG\nABORTING HARD\n");

        if(EOF == c)
        {
            /* End of file -- this means script complete */
            /* We don't actually exit here. This logically makes more sense;
             * let the code follow its natural path of execution and exit
             * sucessfuly at the end of main().
             */
            token_done = TRUE;
            command_done = TRUE;
            return -1;
        }
        else if((' ' == c) || ('\t' == c))
        {
            /* Space and tab are token separators */
            token_done = TRUE;
        }
        else if(('\n' == c) || (';' == c))
        {
            /* Command terminates at the end of a line or at semicolon */
            command_done = TRUE;
            token_done = TRUE;

            if(0 == index)
            {
                index = last_index;
            }
        }
        else if('"' == c)
        {
            /* Handle strings -- everything between a pair of "" */
            index = collect_string(input, n, index);
            token_done = TRUE;
        }
        else if('#' == c)
        {
            /* Handle line comments */
            collect_comment(input);
            command_done = TRUE;
            token_done = TRUE;

            if(0 == index)
            {
                index = last_index;
            }
        }
        else if('\\' == c)
        {
            /* Support for escapes */
            c = fgetc(input); /* Skips over \, gets the next char */
            cc = handle_escape(c);

            if(-1 != cc)
            {
                /* We need to put it into the token */
                n[index] = cc;
            }

            index = index + 1;
        }
        else if(0 == c)
        {
            /* We have come to the end of the token */
            token_done = TRUE;
        }
        else
        {
            /* It's a character to assign */
            n[index] = c;
            index = index + 1;
        }
    } while(token_done == FALSE);

    return index;
}

/* Function to parse string and assign token->value */
int collect_alias_token(char* input, char* n, int index)
{
    int c;
    int cc;
    int token_done = FALSE;
    int output_index = 0;

    do
    {
        /* Loop over each character in the token */
        c = input[index];
        index = index + 1;

        if((' ' == c) || ('\t' == c))
        {
            /* Space and tab are token separators */
            token_done = TRUE;
        }
        else if('\\' == c)
        {
            /* Support for escapes */
            c = input[index];
            index = index + 1;
            cc = handle_escape(c);

            /* We need to put it into the token */
            n[output_index] = cc;
            output_index = output_index + 1;
        }
        else if(0 == c)
        {
            /* We have come to the end of the token */
            token_done = TRUE;
            index = 0;
        }
        else
        {
            /* It's a character to assign */
            n[output_index] = c;
            output_index = output_index + 1;
        }
    } while(token_done == FALSE);

    return index;
}

/*
 * EXECUTION FUNCTIONS
 * Note: All of the builtins return SUCCESS (0) when they exit successfully
 * and FAILURE (1) when they fail.
 */

/* Function to check if the token is an envar */
int is_envar(char* token)
{
    int i = 0;
    int token_length = strlen(token);

    while(i < token_length)
    {
        if(token[i] == '=')
        {
            return FAILURE;
        }

        i = i + 1;
    }

    return SUCCESS;
}

/* Add an envar */
void add_envar(void)
{
    /* Pointers to strings we want */
    char* name = calloc(strlen(token->value) + 4, sizeof(char));
    char* value = token->value;
    char* newvalue;
    int i = 0;

    /* Isolate the name */
    while('=' != value[i])
    {
        name[i] = value[i];
        i = i + 1;
    }

    /* Isolate the value */
    newvalue = name + i + 2;
    value = value + i + 1;
    i = 0;
    require(0 != value[i], "add_envar received improper variable\n");

    while(0 != value[i])
    {
        newvalue[i] = value[i];
        i = i + 1;
    }

    /* If we are in init-mode and this is the first var env == NULL, rectify */
    if(env == NULL)
    {
        env = calloc(1, sizeof(struct Token));
        require(env != NULL, "Memory initialization of env failed\n");
        env->var = name; /* Add our first variable */
    }

    /*
     * If the name of the envar is PATH, then we need to set our (internal)
     * global PATH value.
     */
    if(match(name, "PATH"))
    {
        strcpy(PATH, newvalue);
    }

    struct Token* n = env;

    /* Find match if possible */
    while(!match(name, n->var))
    {
        if(NULL == n->next)
        {
            n->next = calloc(1, sizeof(struct Token));
            require(n->next != NULL, "Memory initialization of next env node in add_envar failed\n");
            n->next->var = name;
        } /* Loop will match and exit */

        n = n->next;
    }

    /* Since we found the variable we need only to set it to its new value */
    n->value = newvalue;
}

/* Add an alias */
void add_alias(void)
{
    token = token->next; /* Skip the actual alias */
    if(token->next == NULL)
    {
        /* No arguments */
        char** array = list_to_array(alias);
        int index = 0;
        while(array[index] != NULL) {
            fputs(array[index], stdout);
            fputc('\n', stdout);
            index = index + 1;
        }
        fflush(stdout);
        return;
    }
    if(!is_envar(token->value)) {
        char** array = list_to_array(token);
        int index = 0;
        while(array[index] != NULL) {
            fputs(array[index], stdout);
            fputc(' ', stdout);
            index = index + 1;
        }
        fputc('\n', stdout);
        fflush(stdout);
        return;
    }

    /* Pointers to strings we want */
    char* name = calloc(strlen(token->value) + 4, sizeof(char));
    char* value = token->value;
    char* newvalue;
    int i = 0;

    /* Isolate the name */
    while('=' != value[i])
    {
        name[i] = value[i];
        i = i + 1;
    }

    /* Isolate the value */
    newvalue = name + i + 2;
    value = value + i + 1;
    i = 0;
    require(0 != value[i], "add_alias received improper variable\n");

    while(0 != value[i])
    {
        newvalue[i] = value[i];
        i = i + 1;
    }

    /* If this is the first alias, rectify */
    if(alias == NULL)
    {
        alias = calloc(1, sizeof(struct Token));
        require(alias != NULL, "Memory initialization of alias failed\n");
        alias->var = name; /* Add our first variable */
    }

    struct Token* n = alias;

    /* Find match if possible */
    while(!match(name, n->var))
    {
        if(NULL == n->next)
        {
            n->next = calloc(1, sizeof(struct Token));
            require(n->next != NULL, "Memory initialization of next alias node in alias failed\n");
            n->next->var = name;
        } /* Loop will match and exit */

        n = n->next;
    }

    /* Since we found the variable we need only to set it to its new value */
    n->value = newvalue;
}

/* cd builtin */
int cd(void)
{
    if(NULL == token->next)
    {
        return FAILURE;
    }

    token = token->next;

    if(NULL == token->value)
    {
        return FAILURE;
    }

    int ret = chdir(token->value);

    if(0 > ret)
    {
        return FAILURE;
    }

    return SUCCESS;
}

/* pwd builtin */
int pwd(void)
{
    char* path = calloc(MAX_STRING, sizeof(char));
    require(path != NULL, "Memory initialization of path in pwd failed\n");
    getcwd(path, MAX_STRING);
    require(!match("", path), "getcwd() failed\n");
    fputs(path, stdout);
    fputs("\n", stdout);
    return SUCCESS;
}

/* set builtin */
int set(void)
{
    /* Get the options */
    int i;

    if(NULL == token->next)
    {
        goto cleanup_set;
    }

    token = token->next;

    if(NULL == token->value)
    {
        goto cleanup_set;
    }

    char* options = calloc(MAX_STRING, sizeof(char));
    require(options != NULL, "Memory initialization of options in set failed\n");
    int last_position = strlen(token->value) - 1;

    for(i = 0; i < last_position; i = i + 1)
    {
        options[i] = token->value[i + 1];
    }

    /* Parse the options */
    int options_length = strlen(options);

    for(i = 0; i < options_length; i = i + 1)
    {
        if(options[i] == 'a')
        {
            /* set -a is on by default and cannot be disabled at this time */
            if(WARNINGS)
            {
                fputs("set -a is on by default and cannot be disabled\n", stdout);
            }

            continue;
        }
        else if(options[i] == 'e')
        {
            /* Fail on failure */
            STRICT = TRUE;
        }
        else if(options[i] == 'x')
        {
            /* Show commands as executed */
            /* TODO: this currently behaves like -v. Make it do what it should */
            VERBOSE = TRUE;
            /*
             * Output the set -x because VERBOSE didn't catch it before.
             * We don't do just -x because we support multiple options in one command,
             * eg set -ex.
             */
            fputs(" +> set -", stdout);
            fputs(options, stdout);
            fputs("\n", stdout);
            fflush(stdout);
        }
        else
        {
            /* Invalid */
            fputc(options[i], stderr);
            fputs(" is an invalid set option!\n", stderr);
            exit(EXIT_FAILURE);
        }
    }

    return SUCCESS;
cleanup_set:
    return FAILURE;
}

/* echo builtin */
void echo(void)
{
    if(token->next == NULL)
    {
        /* No arguments */
        fputs("\n", stdout);
        return;
    }

    if(token->next->value == NULL)
    {
        /* No arguments */
        fputs("\n", stdout);
        return;
    }

    token = token->next; /* Skip the actual echo */

    while(token != NULL)
    {
        /* Output each argument to echo to stdout */
        if(token->value == NULL)
        {
            break;
        }

        fputs(token->value, stdout);
        if(NULL != token->next)
        {
            /* M2-Planet doesn't short circuit */
            if(NULL != token->next->value) fputc(' ', stdout);
        }
        token = token->next;
    }

    fputs("\n", stdout);
}

/* unset builtin */
void unset(void)
{
    struct Token* e;
    /* We support multiple variables on the same line */
    struct Token* t;
    t = token->next;

    while(t != NULL)
    {
        e = env;

        /* Look for the variable; we operate on ->next because we need to remove ->next */
        while(e->next != NULL)
        {
            if(NULL == t->value)
            {
                break;
            }

            if(match(e->next->var, t->value))
            {
                break;
            }

            e = e->next;
        }

        t = t->next;

        /* If it's NULL nothing was found */
        if(e->next == NULL)
        {
            continue;
        }

        /* Otherwise there is something to unset */
        e->next = e->next->next;
    }
}

void execute(FILE* script, char** argv);
int _execute(FILE* script, char** argv);
int collect_command(FILE* script, char** argv);

/* if builtin */
void if_cmd(FILE* script, char** argv)
{
    int index;
    int old_VERBOSE;
    token = token->next; /* Skip the actual if */
    /* Do not check for successful exit status */
    int if_status = _execute(script, argv);
    old_VERBOSE = VERBOSE;
    VERBOSE = VERBOSE && !if_status;

    do
    {
        index = collect_command(script, argv);
        require(index != -1, "Unexpected EOF, improperly terminated if statement.\n");

        if(0 == index)
        {
            continue;
        }

        if(0 == if_status)
        {
            /* Stuff to exec */
            execute(script, argv);
        }

        if(match(token->value, "else"))
        {
            if_status = !if_status;
        }
    } while(!match(token->value, "fi"));

    VERBOSE = old_VERBOSE;
}

int what_exit(char* program, int status)
{
    /***********************************************************************************
     * If the low-order 8 bits of w_status are equal to 0x7F or zero, the child        *
     * process has stopped. If the low-order 8 bits of w_status are non-zero and are   *
     * not equal to 0x7F, the child process terminated due to a signal otherwise, the  *
     * child process terminated due to an exit() call.                                 *
     *                                                                                 *
     * In the event it was a signal that stopped the process the top 8 bits of         *
     * w_status contain the signal that caused the process to stop.                    *
     *                                                                                 *
     * In the event it was terminated the bottom 7 bits of w_status contain the        *
     * terminating error number for the process.                                       *
     *                                                                                 *
     * If bit 0x80 of w_status is set, a core dump was produced.                       *
     ***********************************************************************************/

    int WIFEXITED = !(status & 0x7F);
    int WEXITSTATUS = (status & 0xFF00) >> 8;
    int WTERMSIG = status & 0x7F;
    int WCOREDUMP = status & 0x80;
    int WIFSIGNALED = !((0x7F == WTERMSIG) || (0 == WTERMSIG));
    int WIFSTOPPED = ((0x7F == WTERMSIG) && (0 == WCOREDUMP));

    if(WIFEXITED)
    {
        if(VERBOSE_EXIT)
        {
            fputc('\n', stderr);
            fputs(program, stderr);
            fputs(" normal termination, exit status = ", stderr);
            fputs(int2str(WEXITSTATUS, 10, TRUE), stderr);
            fputs("\n\n\n", stderr);
        }
        return WEXITSTATUS;
    }
    else if (WIFSIGNALED)
    {
        fputc('\n', stderr);
        fputs(program, stderr);
        fputs(" abnormal termination, signal number = ", stderr);
        fputs(int2str(WTERMSIG, 10, TRUE), stderr);
        fputc('\n', stderr);
        if(WCOREDUMP) fputs("core dumped\n", stderr);
        return WTERMSIG;
    }
    else if(WIFSTOPPED)
    {
        fputc('\n', stderr);
        fputs(program, stderr);
        fputs(" child stopped, signal number = ", stderr);
        fputs(int2str(WEXITSTATUS, 10, TRUE), stderr);
        fputc('\n', stderr);
        return WEXITSTATUS;
    }

    fputc('\n', stderr);
    fputs(program, stderr);
    fputs(" :: something crazy happened with execve\nI'm just gonna get the hell out of here\n", stderr);
    exit(EXIT_FAILURE);
}

/* Execute program and check for error */
void execute(FILE* script, char** argv)
{
    int status = _execute(script, argv);

    if(STRICT == TRUE && (0 != status))
    {
        /* Clearly the script hit an issue that should never have happened */
        fputs("Subprocess error ", stderr);
        fputs(int2str(status, 10, TRUE), stderr);
        fputs("\nABORTING HARD\n", stderr);
        exit(EXIT_FAILURE);
    }
}

/* Execute program */
int _execute(FILE* script, char** argv)
{
    /* Run the command */
    /* rc = return code */
    int rc;
    /* exec without forking */
    int exec = FALSE;

    /* Actually do the execution */
    if(is_envar(token->value) == TRUE)
    {
        add_envar();
        return 0;
    }
    else if(match(token->value, "cd"))
    {
        rc = cd();

        if(STRICT)
        {
            require(rc == SUCCESS, "cd failed!\n");
        }

        return 0;
    }
    else if(match(token->value, "set"))
    {
        rc = set();

        if(STRICT)
        {
            require(rc == SUCCESS, "set failed!\n");
        }

        return 0;
    }
    else if(match(token->value, "alias"))
    {
        add_alias();
        return 0;
    }
    else if(match(token->value, "pwd"))
    {
        rc = pwd();

        if(STRICT)
        {
            require(rc == SUCCESS, "pwd failed!\n");
        }

        return 0;
    }
    else if(match(token->value, "echo"))
    {
        echo();
        return 0;
    }
    else if(match(token->value, "unset"))
    {
        unset();
        return 0;
    }
    else if(match(token->value, "exec"))
    {
        token = token->next; /* Skip the actual exec */
        exec = TRUE;
    }
    else if(match(token->value, "if"))
    {
        if_cmd(script, argv);
        return 0;
    }
    else if(match(token->value, "then"))
    {
        /* ignore */
        return 0;
    }
    else if(match(token->value, "else"))
    {
        /* ignore */
        return 0;
    }
    else if(match(token->value, "fi"))
    {
        /* ignore */
        return 0;
    }

    /* If it is not a builtin, run it as an executable */
    int status; /* i.e. return code */
    char** array;
    char** envp;
    /* Get the full path to the executable */
    char* program = find_executable(token->value);

    /* Check we can find the executable */
    if(NULL == program)
    {
        if(STRICT == TRUE)
        {
            fputs("WHILE EXECUTING ", stderr);
            fputs(token->value, stderr);
            fputs(" NOT FOUND!\nABORTING HARD\n", stderr);
            exit(EXIT_FAILURE);
        }

        /* If we are not strict simply return */
        return 0;
    }

    int f = 0;

#ifdef __uefi__
    array = list_to_array(token);
    envp = list_to_array(env);
    return spawn(program, array, envp);
#else
    if(!exec)
    {
        f = fork();
    }

    /* Ensure fork succeeded */
    if(f == -1)
    {
        fputs("WHILE EXECUTING ", stderr);
        fputs(token->value, stderr);
        fputs(" fork() FAILED\nABORTING HARD\n", stderr);
        exit(EXIT_FAILURE);
    }
    else if(f == 0)
    {
        /* Child */
        /**************************************************************
         * Fuzzing produces random stuff; we don't want it running    *
         * dangerous commands. So we just don't execve.               *
         * But, we still do the list_to_array calls to check for      *
         * segfaults.                                                 *
         **************************************************************/
        array = list_to_array(token);
        envp = list_to_array(env);

        if(FALSE == FUZZING)
        {
            /* We are not fuzzing */
            /* execve() returns only on error */
            execve(program, array, envp);
        }

        /* Prevent infinite loops */
        exit(EXIT_FAILURE);
    }

    /* Otherwise we are the parent */
    /* And we should wait for it to complete */
    waitpid(f, &status, 0);
    return what_exit(program, status);
#endif
}

int collect_command(FILE* script, char** argv)
{
    command_done = FALSE;
    /* Initialize token */
    struct Token* n;
    n = calloc(1, sizeof(struct Token));
    require(n != NULL, "Memory initialization of token in collect_command failed\n");
    char* s = calloc(MAX_STRING, sizeof(char));
    require(s != NULL, "Memory initialization of token in collect_command failed\n");
    token = n;
    int index = 0;
    int alias_index;
    char* alias_string;

    /* Get the tokens */
    while(command_done == FALSE)
    {
        index = collect_token(script, s, index);
        /* Don't allocate another node if the current one yielded nothing, OR
         * if we are done.
         */

        if(match(s, ""))
        {
            continue;
        }

        alias_string = alias_lookup(s);
        alias_index = 0;
        do
        {
            if(alias_string != NULL)
            {
                alias_index = collect_alias_token(alias_string, s, alias_index);
            }

            /* add to token */
            n->value = s;
            s = calloc(MAX_STRING, sizeof(char));
            require(s != NULL, "Memory initialization of next token node in collect_command failed\n");
            /* Deal with variables */
            handle_variables(argv, n);

            /* If the variable expands into nothing */
            if(match(n->value, " "))
            {
                n->value = NULL;
                continue;
            }

            /* Prepare for next loop */
            n->next = calloc(1, sizeof(struct Token));
            require(n->next != NULL, "Memory initialization of next token node in collect_command failed\n");
            n = n->next;
        }
        while(alias_index != 0);
    }

    /* -1 means the script is done */
    if(EOF == index)
    {
        return index;
    }

    /* Output the command if verbose is set */
    /* Also if there is nothing in the command skip over */
    if(VERBOSE && !match(token->value, "") && !match(token->value, NULL))
    {
        n = token;
        fputs(" +>", stdout);

        while(n != NULL)
        {
            /* Print out each token token */
            fputs(" ", stdout);

            /* M2-Planet doesn't let us do this in the while */
            if(n->value != NULL)
            {
                if(!match(n->value, ""))
                {
                    fputs(n->value, stdout);
                }
            }

            n = n->next;
        }

        fputc('\n', stdout);
        fflush(stdout);
    }

    return index;
}

/* Function for executing our programs with desired arguments */
void run_script(FILE* script, char** argv)
{
    int index;

    while(TRUE)
    {
        /*
         * Tokens has to be reset each time, as we need a new linked-list for
         * each line.
         * See, the program flows like this as a high level overview:
         * Get line -> Sanitize line and perform variable replacement etc ->
         * Execute line -> Next.
         * We don't need the previous lines once they are done with, so tokens
         * are hence for each line.
         */
        index = collect_command(script, argv);

        /* -1 means the script is done */
        if(EOF == index)
        {
            break;
        }

        if(0 == index)
        {
            continue;
        }

        /* Stuff to exec */
        execute(script, argv);
    }
}

/* Function to populate env */
void populate_env(char** envp)
{
    /* You can't populate a NULL environment */
    if(NULL == envp)
    {
        return;
    }

    /* avoid empty arrays */
    int max = array_length(envp);

    if(0 == max)
    {
        return;
    }

    /* Initialize env and n */
    env = calloc(1, sizeof(struct Token));
    require(env != NULL, "Memory initialization of env failed\n");
    struct Token* n;
    n = env;
    int i;
    int j;
    int k;
    char* envp_line;

    for(i = 0; i < max; i = i + 1)
    {
        n->var = calloc(MAX_STRING, sizeof(char));
        require(n->var != NULL, "Memory initialization of n->var in population of env failed\n");
        n->value = calloc(MAX_STRING, sizeof(char));
        require(n->value != NULL, "Memory initialization of n->var in population of env failed\n");
        j = 0;
        /*
         * envp is weird.
         * When referencing envp[i]'s characters directly, they were all jumbled.
         * So just copy envp[i] to envp_line, and work with that - that seems
         * to fix it.
         */
        envp_line = calloc(MAX_STRING, sizeof(char));
        require(envp_line != NULL, "Memory initialization of envp_line in population of env failed\n");
        strcpy(envp_line, envp[i]);

        while(envp_line[j] != '=')
        {
            /* Copy over everything up to = to var */
            n->var[j] = envp_line[j];
            j = j + 1;
        }

        /* If we get strange input, we need to ignore it */
        if(n->var == NULL)
        {
            continue;
        }

        j = j + 1; /* Skip over = */
        k = 0; /* As envp[i] will continue as j but n->value begins at 0 */

        while(envp_line[j] != 0)
        {
            /* Copy everything else to value */
            n->value[k] = envp_line[j];
            j = j + 1;
            k = k + 1;
        }

        /* Sometimes, we get lines like VAR=, indicating nothing is in the variable */
        if(n->value == NULL)
        {
            n->value = "";
        }

        /* Advance to next part of linked list */
        n->next = calloc(1, sizeof(struct Token));
        require(n->next != NULL, "Memory initialization of n->next in population of env failed\n");
        n = n->next;
    }

    /* Get rid of node on the end */
    n = NULL;
    /* Also destroy the n->next reference */
    n = env;

    while(n->next->var != NULL)
    {
        n = n->next;
    }

    n->next = NULL;
}

int main(int argc, char** argv)
{
    char** envp = argv + (argc + 1);
    VERBOSE = FALSE;
    VERBOSE_EXIT = FALSE;
    STRICT = TRUE;
    FUZZING = FALSE;
    WARNINGS = FALSE;
    char* filename = "kaem.run";
    FILE* script = NULL;
    /* Initalize structs */
    token = calloc(1, sizeof(struct Token));
    require(token != NULL, "Memory initialization of token failed\n");
    if(NULL != argv[0]) KAEM_BINARY = argv[0];
    else KAEM_BINARY = "./bin/kaem";
    int i = 1;

    /* Loop over arguments */
    while(i <= argc)
    {
        if(NULL == argv[i])
        {
            /* Ignore the argument */
            i = i + 1;
        }
        else if(match(argv[i], "-h") || match(argv[i], "--help"))
        {
            /* Help information */
            fputs("Usage: ", stdout);
            fputs(argv[0], stdout);
            fputs(" [-h | --help] [-V | --version] [--file filename | -f filename] [-i | --init-mode] [-v | --verbose] [--non-strict] [--warn] [--fuzz]\n", stdout);
            exit(EXIT_SUCCESS);
        }
        else if(match(argv[i], "-f") || match(argv[i], "--file"))
        {
            /* Set the filename */
            if(argv[i + 1] != NULL)
            {
                filename = argv[i + 1];
            }

            i = i + 2;
        }
        else if(match(argv[i], "-i") || match(argv[i], "--init-mode"))
        {
            /* init mode does not populate env */
            INIT_MODE = TRUE;
            i = i + 1;
        }
        else if(match(argv[i], "-V") || match(argv[i], "--version"))
        {
            /* Output version */
            fputs("kaem version 1.4.0\n", stdout);
            exit(EXIT_SUCCESS);
        }
        else if(match(argv[i], "-v") || match(argv[i], "--verbose"))
        {
            /* Set verbose */
            VERBOSE = TRUE;
            i = i + 1;
        }
        else if(match(argv[i], "--strict"))
        {
            /* it is a NOP */
            STRICT = TRUE;
            i = i + 1;
        }
        else if(match(argv[i], "--non-strict"))
        {
            /* Set strict */
            STRICT = FALSE;
            i = i + 1;
        }
        else if(match(argv[i], "--warn"))
        {
            /* Set warnings */
            WARNINGS = TRUE;
            i = i + 1;
        }
        else if(match(argv[i], "--fuzz"))
        {
            /* Set fuzzing */
            FUZZING = TRUE;
            i = i + 1;
        }
        else if(match(argv[i], "--show-exit-codes"))
        {
            /* show exit codes */
            VERBOSE_EXIT = TRUE;
            i = i + 1;
        }
        else if(match(argv[i], "--"))
        {
            /* Nothing more after this */
            break;
        }
        else
        {
            /* We don't know this argument */
            fputs("UNKNOWN ARGUMENT\n", stdout);
            exit(EXIT_FAILURE);
        }
    }

    /* Populate env */
    if(INIT_MODE == FALSE)
    {
        populate_env(envp);
    }

    /* make sure SHELL is set */
    if(NULL == env_lookup("SHELL"))
    {
        struct Token* shell = calloc(1, sizeof(struct Token));
        require(NULL != shell, "unable to create SHELL environment variable\n");
        shell->next = env;
        shell->var = "SHELL";
        shell->value= KAEM_BINARY;
        env = shell;
    }

    /* Populate PATH variable
     * We don't need to calloc() because env_lookup() does this for us.
     */
    PATH = env_lookup("PATH");
    /* Populate USERNAME variable */
    char* USERNAME = env_lookup("LOGNAME");

    /* Handle edge cases */
    if((NULL == PATH) && (NULL == USERNAME))
    {
        /* We didn't find either of PATH or USERNAME -- use a generic PATH */
        PATH = calloc(MAX_STRING, sizeof(char));
        require(PATH != NULL, "Memory initialization of PATH failed\n");
        strcpy(PATH, "/root/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin");
    }
    else if(NULL == PATH)
    {
        /* We did find a username but not a PATH -- use a generic PATH but with /home/USERNAME */
        PATH = calloc(MAX_STRING, sizeof(char));
        PATH = strcat(PATH, "/home/");
        PATH = strcat(PATH, USERNAME);
        PATH = strcat(PATH, "/bin:/usr/local/bin:/usr/bin:/bin:/usr/local/games:/usr/games");
    }

    /* Open the script */
    script = fopen(filename, "r");

    if(NULL == script)
    {
        fputs("The file: ", stderr);
        fputs(filename, stderr);
        fputs(" can not be opened!\n", stderr);
        exit(EXIT_FAILURE);
    }

    /* Run the commands */
    run_script(script, argv);
    /* Cleanup */
    fclose(script);
    return EXIT_SUCCESS;
}

File /x86/check-tools.kaem

Source file is 'task3/check-tools.kaem'.
URL: https://github.com/FransFaase/MES-replacement/blob/64abad6a2a55cbef00ffa065e1c019c6a1932acf/task3/check-tools.kaem
#!/bin/sh

set +x

cd src

# Compile equal.c
/usr/bin/tcc_cc -o /tmp/equal.sl equal.c
/usr/bin/stack_c -i /x86/stack_c_intro.M1 /tmp/equal.sl -o /tmp/equal.M1
/usr/bin/blood-elf --file /tmp/equal.M1 --little-endian --output /tmp/equal.blood_elf
/usr/bin/M1 /tmp/equal.M1 -o /tmp/equal.macro
/usr/bin/hex2 -o /usr/bin/equal /x86/ELF-x86-debug.hex2 /tmp/equal.macro /tmp/equal.blood_elf

# Check tcc_cc.sl
/usr/bin/tcc_cc -o /tmp/tcc_cc.sl stdlib.c tcc_cc.c
/usr/bin/equal /src/tcc_cc.sl /tmp/tcc_cc.sl

# Check stack_c_s.M1
/usr/bin/tcc_cc -o /tmp/stack_c.sl stdlib.c stack_c.c
/usr/bin/stack_c -i /x86/stack_c_intro.M1 /tmp/stack_c.sl -o /tmp/stack_c.M1
/usr/bin/equal /x86/stack_c_s.M1 /tmp/stack_c.M1

# Check M1_s.blood_elf and M1_s.macro
/usr/bin/tcc_cc -o /tmp/M1.sl stdlib.c M1.c
/usr/bin/stack_c -i /x86/stack_c_intro.M1 /tmp/M1.sl -o /tmp/M1.M1
/usr/bin/blood-elf --file /tmp/M1.M1 --little-endian --output /tmp/M1.blood_elf
/usr/bin/M1 /tmp/M1.M1 -o /tmp/M1.macro
/usr/bin/equal /x86/M1_s.blood_elf /tmp/M1.blood_elf
/usr/bin/equal /x86/M1_s.macro /tmp/M1.macro

# Check blood-elf_s.blood_elf and blood-elf_s.macro
/usr/bin/tcc_cc -o /tmp/blood-elf.sl stdlib.c blood-elf.c
/usr/bin/stack_c -i /x86/stack_c_intro.M1 /tmp/blood-elf.sl -o /tmp/blood-elf.M1
/usr/bin/blood-elf --file /tmp/blood-elf.M1 --little-endian --output /tmp/blood-elf.blood_elf
/usr/bin/M1 /tmp/blood-elf.M1 -o /tmp/blood-elf.macro
/usr/bin/equal /x86/blood-elf_s.blood_elf /tmp/blood-elf.blood_elf
/usr/bin/equal /x86/blood-elf_s.macro /tmp/blood-elf.macro

# Check hex2_s.hex0
/usr/bin/tcc_cc -o /tmp/hex2.sl hex2.c
/usr/bin/stack_c -i /x86/stack_c_intro.M1 /tmp/hex2.sl -o /tmp/hex2.M1
/usr/bin/blood-elf --file /tmp/hex2.M1 --little-endian --output /tmp/hex2.blood_elf
/usr/bin/M1 /tmp/hex2.M1 -o /tmp/hex2.macro
/usr/bin/hex2 -o /tmp/hex2.hex0 /x86/ELF-x86-debug.hex2 /tmp/hex2.macro /tmp/hex2.blood_elf
/usr/bin/equal /x86/hex2_s.hex0 /tmp/hex2.hex0

# Check kaem-minimal_s.hex0
/usr/bin/tcc_cc -o /tmp/kaem-minimal.sl kaem-minimal.c
/usr/bin/stack_c -i /x86/stack_c_intro.M1 /tmp/kaem-minimal.sl -o /tmp/kaem-minimal.M1
/usr/bin/blood-elf --file /tmp/kaem-minimal.M1 --little-endian --output /tmp/kaem-minimal.blood_elf
/usr/bin/M1 /tmp/kaem-minimal.M1 -o /tmp/kaem-minimal.macro
/usr/bin/hex2 -o /tmp/kaem-minimal.hex0 /x86/ELF-x86-debug.hex2 /tmp/kaem-minimal.macro /tmp/kaem-minimal.blood_elf
/usr/bin/equal /x86/kaem-minimal_s.hex0 /tmp/kaem-minimal.hex0

# Check hex0_s.hex0
/usr/bin/tcc_cc -o /tmp/hex0.sl hex0.c
/usr/bin/stack_c -i /x86/stack_c_intro.M1 /tmp/hex0.sl -o /tmp/hex0.M1
/usr/bin/blood-elf --file /tmp/hex0.M1 --little-endian --output /tmp/hex0.blood_elf
/usr/bin/M1 /tmp/hex0.M1 -o /tmp/hex0.macro
/usr/bin/hex2 -o /tmp/hex0.hex0 /x86/ELF-x86-debug.hex2 /tmp/hex0.macro /tmp/hex0.blood_elf
/usr/bin/equal /x86/hex0_s.hex0 /tmp/hex0.hex0

cd ..

File /src/equal.c

Source file is 'src/equal.c'.
URL: https://github.com/FransFaase/MES-replacement/blob/64abad6a2a55cbef00ffa065e1c019c6a1932acf/src/equal.c
#include <fcntl.h>
#include <unistd.h>

#ifdef __TCC_CC__

char **_sys_env = 0;
int sys_int80(int a, int b, int c, int d);

#define O_RDONLY 0

#define open(pathname, mode) sys_int80(5, pathname, mode, 0777)
#define read(fd, buf, count) sys_int80(3, fd, buf, count)
#define close(fd) sys_int80(6, fd, 0, 0)

#endif

int fhgetc(int fh)
{
    unsigned char ch;
    if (read(fh, &ch, 1) != 1)
        return -1;
    return ch;
}

int main(int argc, char *argv[])
{
    int fh1 = open(argv[1], O_RDONLY);
    int fh2 = open(argv[2], O_RDONLY);

    int result = -1;
    for (;;)
    {
        int ch = fhgetc(fh1);
        if (fhgetc(fh2) != ch)
            break;
        if (ch == -1)
        {
            result = 0;
            break;
        }
    }

    close(fh1);
    close(fh2);
    
    return result;
}

File /src/tcc_cc.c

Source file is 'src/tcc_cc.c'.
URL: https://github.com/FransFaase/MES-replacement/blob/64abad6a2a55cbef00ffa065e1c019c6a1932acf/src/tcc_cc.c
#include <stdio.h>
#include <malloc.h>
#include <fcntl.h>
#include <unistd.h>
#include <string.h>
#include <stdlib.h>

// ----- bool -----

typedef char bool;
#define TRUE 1
#define FALSE 0

// ------ string -------

bool eqstr(char* s, char* t)
{
    return strcmp(s, t) == 0;
} 

// ----- Strings ----

char* copystr(const char* str)
{
    int len = strlen(str);
    char* new_str = malloc(len + 1);
    strcpy(new_str, str);

    return new_str;
}

char* copystrlen(const char* str, int len)
{
    char* new_str = malloc(len + 1);
    memcpy(new_str, str, len + 1);

    return new_str;
}

// Options

bool opt_trace_parser = FALSE;

// Preprocessor

// The preprocessor is implemented with the use of iterators.
// There are character iterators and token iterators.

// The base character iterator:

typedef struct char_iterator_s char_iterator_t;
typedef struct char_iterator_s* char_iterator_p;
typedef void (*char_next_p)(char_iterator_p);
struct char_iterator_s
{
    char ch;
    long line;
    long column;
    char* filename;
    char_next_p next;
};

// The file iterator

// On creation it points to the first character of the file
// and on each call to the next function it returns the next
// character of the file, where the file is thought to be
// extended with an infinite number of null ('\0') characters
// and carriage return characters ('\r') are skipped.
// The line and column members are updated according to
// line feed ('\n') characters in the file.

struct file_iterator_s
{
    char_iterator_t base;
    FILE* _f;
};
typedef struct file_iterator_s* file_iterator_p;

void file_iterator_next(char_iterator_p char_it)
{
    file_iterator_p it = (file_iterator_p)char_it;
    if (it->base.ch == 0)
    {
        return;
    }
    if (it->base.ch == '\n')
    {
        it->base.line = it->base.line + 1;
        it->base.column = 0;
    }
    it->base.column = it->base.column + 1;
    if (it->_f == NULL)
    {
        it->base.ch = 0;
        return;
    }       
    it->base.ch = fgetc(it->_f);
    if (feof(it->_f))
    {
        it->base.ch = '\0';
        fclose(it->_f);
        it->_f = NULL;
    }
    else if (it->base.ch == '\r')
    {
        file_iterator_next(char_it);
    }
}

file_iterator_p new_file_iterator(const char* fn)
{
    file_iterator_p it = malloc(sizeof(struct file_iterator_s));
    it->_f = fopen(fn, "r");
    it->base.ch = '\n';
    if (it->_f == 0)
    {
        it->base.ch = 0;
    }
    it->base.filename = copystr(fn);
    it->base.line = 0;
    it->base.column = 0;
    it->base.next = file_iterator_next;
    file_iterator_next(&it->base);
    return it;
}

// The line splice iterator

// The line splice iterator takes care that lines that end
// with a back-slash ('\\') character are joined with the
// next line. On creation the iterator points to the first
// character in the file, assuming that pairs of a
// back-slash charater and line-feed characters are ignored.
// On each call of the next function, the following character
// ignoring such pairs is returned.

struct line_splice_iterator_s
{
    char_iterator_t base;
    char_iterator_p _source_it;
    char _a;
};
typedef struct line_splice_iterator_s* line_splice_iterator_p;

void line_splice_iterator_next(char_iterator_p char_it)
{
    line_splice_iterator_p it = (line_splice_iterator_p)char_it;
    char_next_p _source_it_next; _source_it_next = it->_source_it->next;
    //fprintf(stderr, "line_splice_iterator_next\n");
    if (it->_a == 0)
    {
        it->base.ch = 0;
        return;
    }
    it->base.ch = it->_a;
    it->base.filename = it->_source_it->filename;
    it->base.line = it->_source_it->line;
    it->base.column = it->_source_it->column;
    _source_it_next(it->_source_it);
    it->_a = it->_source_it->ch;
    while (it->base.ch == '\\' && it->_a == '\n')
    {
        _source_it_next(it->_source_it);
        it->base.ch = it->_source_it->ch;
        it->base.filename = it->_source_it->filename;
        it->base.line = it->_source_it->line;
        it->base.column = it->_source_it->column;
        _source_it_next(it->_source_it);
        it->_a = it->_source_it->ch;
    }
}

line_splice_iterator_p new_line_splice_iterator(char_iterator_p source_it)
{
    line_splice_iterator_p it = malloc(sizeof(struct line_splice_iterator_s));
    it->_source_it = source_it;
    it->base.filename = source_it->filename;
    it->base.next = line_splice_iterator_next;
    it->_a = source_it->ch;
    line_splice_iterator_next(&it->base);
    return it;
}


// The comment strip iterator

// The comment strip iterator removes all comments from the input.
// It supports both the original comments which are delimited by
// '/*' and '*/' and the new comments with are delimited by '//'
// and a new-line character. The original comments are replaced
// by a space character and the new comments are replace by a
// new-line character.
// The function comment_strip_iterator_next is implemented as a
// co-routine with the help of goto statements.

struct comment_strip_iterator_s
{
    char_iterator_t base;
    char_iterator_p _source_it;
    char _a;
    int _state;
};
typedef struct comment_strip_iterator_s* comment_strip_iterator_p;

void comment_strip_iterator_next(char_iterator_p char_it)
{
    comment_strip_iterator_p it = (comment_strip_iterator_p)char_it;
    char_next_p _source_it_next; _source_it_next = it->_source_it->next;

    switch (it->_state)
    {
        case 0: goto s0;
        case 1: goto s1;
        case 2: goto s2;
        case 3: goto s3;
        case 4: goto s4;
        case 5: goto s5;
        case 6: goto s6;
        case 7: goto s7;
        case 8: goto s8;
        case 9: goto s9;
        default:
    }
    s0:
    if (it->_a == '\0')
    {
        it->base.ch = '\0';
        return;
    }
    it->base.ch = it->_a;
    it->base.filename = it->_source_it->filename;
    it->base.line = it->_source_it->line;
    it->base.column = it->_source_it->column;
    _source_it_next(it->_source_it);
    it->_a = it->_source_it->ch;
    if (it->base.ch == '/' && (it->_a == '/' || it->_a == '*'))
    {
        if (it->_a == '/')
        {
            while (it->_a != '\0' && it->_a != '\n')
            {
                _source_it_next(it->_source_it);
                it->_a = it->_source_it->ch;
            }
        }
        else
        {
            it->base.ch = ' ';
            it->_state = 1; return; s1:
            _source_it_next(it->_source_it);
            it->base.ch = it->_source_it->ch;
            _source_it_next(it->_source_it);
            it->_a = it->_source_it->ch;
            while (it->base.ch != '\0' && (it->base.ch != '*' || it->_a != '/'))
            {
                it->base.ch = it->_a;
                _source_it_next(it->_source_it);
                it->_a = it->_source_it->ch;
            }
            if (it->base.ch != '\0')
            {
                _source_it_next(it->_source_it);
                it->_a = it->_source_it->ch;
                it->base.line = it->_source_it->line;
                it->base.column = it->_source_it->column;
            }
        }
        it->_state = 0;
        goto s0;
    }
    if (it->base.ch == '"')
    {
        it->_state = 2; return; s2:
        it->base.ch = it->_a;
        it->base.line = it->_source_it->line;
        it->base.column = it->_source_it->column;
        
        while (it->base.ch != '\0' && it->base.ch != '"')
        {
            if (it->base.ch == '\\')
            {
                it->_state = 3; return; s3:
                _source_it_next(it->_source_it);
                it->base.ch = it->_source_it->ch;
                it->base.line = it->_source_it->line;
                it->base.column = it->_source_it->column;
            }
            
            it->_state = 4; return; s4:
            _source_it_next(it->_source_it);
            it->base.ch = it->_source_it->ch;
            it->base.line = it->_source_it->line;
            it->base.column = it->_source_it->column;
        }
        if (it->base.ch == '"')
        {
            it->_state = 5; return; s5:
            _source_it_next(it->_source_it);
            it->_a = it->_source_it->ch;
            it->base.line = it->_source_it->line;
            it->base.column = it->_source_it->column;
        }
        it->_state = 0;
        goto s0;
    }
    if (it->base.ch == '\'')
    {
        it->_state = 6; return; s6:
        it->base.ch = it->_a;
        it->base.line = it->_source_it->line;
        it->base.column = it->_source_it->column;
        if (it->base.ch == '\\')
        {
            it->_state = 7; return; s7:
            _source_it_next(it->_source_it);
            it->base.ch = it->_source_it->ch;
            it->base.line = it->_source_it->line;
            it->base.column = it->_source_it->column;
        }
        it->_state = 8; return; s8:
        _source_it_next(it->_source_it);
        it->base.ch = it->_source_it->ch;
        it->base.line = it->_source_it->line;
        it->base.column = it->_source_it->column;
        it->_state = 0;
        if (it->base.ch == '\'')
        {
            it->_state = 9; return; s9:
            _source_it_next(it->_source_it);
            it->_a = it->_source_it->ch;
            it->base.line = it->_source_it->line;
            it->base.column = it->_source_it->column;
        }
        it->_state = 0;
        goto s0;
    }
}

comment_strip_iterator_p new_comment_strip_iterator(char_iterator_p source_it)
{
    comment_strip_iterator_p it = malloc(sizeof(struct comment_strip_iterator_s));
    it->_source_it = source_it;
    it->base.filename = source_it->filename;
    it->base.next = comment_strip_iterator_next;
    it->_a = source_it->ch;
    it->_state = 0; 
    comment_strip_iterator_next(&it->base);
    return it;
}

// The include iterator

// The include iterator allows character of another character
// iterator to be included in an existing stream by calling
// the function 'include_iterator_add'. Recursive including
// is supported.

struct include_iterator_s
{
    char_iterator_t base;
    char_iterator_p _source_it;
    char_iterator_p _parent_source_its[10];
    int _nr_parents;
};
typedef struct include_iterator_s* include_iterator_p;

void include_iterator_next(char_iterator_p char_it)
{
    include_iterator_p it = (include_iterator_p)char_it;
    char_next_p _source_it_next; _source_it_next = it->_source_it->next;
    _source_it_next(it->_source_it);
    it->base.ch = it->_source_it->ch;
    if (it->base.ch == 0)
    {
        if (it->_nr_parents == 0)
        {
            it->base.ch = 0;
            return;
        }
        it->base.ch = '\n';
        it->_nr_parents = it->_nr_parents - 1;
        it->_source_it = it->_parent_source_its[it->_nr_parents];
        it->base.filename = it->_source_it->filename;
    }
    it->base.filename = it->_source_it->filename;
    it->base.line = it->_source_it->line;
    it->base.column = it->_source_it->column;
}           

void include_iterator_add(include_iterator_p it, char_iterator_p include_it)
{
    it->_parent_source_its[it->_nr_parents] = it->_source_it;
    it->_nr_parents = it->_nr_parents + 1;
    it->_source_it = include_it;
    it->base.filename = it->_source_it->filename;
    it->base.line = it->_source_it->line;
    it->base.column = it->_source_it->column;
    it->base.ch = it->_source_it->ch;
}

include_iterator_p new_include_iterator(char_iterator_p include_it)
{
    include_iterator_p it = malloc(sizeof(struct include_iterator_s));
    it->base.filename = include_it->filename;
    it->base.line = include_it->line;
    it->base.column = include_it->column;
    it->base.ch = include_it->ch;
    it->base.next = include_iterator_next;
    it->_source_it = include_it;
    it->_nr_parents = 0;
    return it;
}

// Token definitions

// Definition of defines for tokens that are not represented
// by a single character. 

#define TK_D_HASH    500
#define TK_EQ        501
#define TK_NE        502
#define TK_LE        503
#define TK_GE        504
#define TK_INC       505
#define TK_DEC       506
#define TK_ARROW     507
#define TK_DPERIOD   508
#define TK_DASHES    509

#define TK_ASS      600
#define TK_MUL_ASS  (600 + '*')
#define TK_DIV_ASS  (600 + '/')
#define TK_MOD_ASS  (600 + '%')
#define TK_ADD_ASS  (600 + '+')
#define TK_SUB_ASS  (600 + '-')
#define TK_SHL_ASS  (600 + '<')
#define TK_SHR_ASS  (600 + '>')
#define TK_XOR_ASS  (600 + '^')
#define TK_BAND_ASS (600 + '&')
#define TK_BOR_ASS  (600 + '|')

#define TK_DD_OPER  800
#define TK_SHL      (800 + '<')
#define TK_SHR      (800 + '>')
#define TK_AND      (800 + '&')
#define TK_OR       (800 + '|')

#define TK_KEYWORD      1000
#define TK_BREAK        1000
#define TK_CASE         1001
#define TK_CHAR         1002
#define TK_CONST        1003
#define TK_CONTINUE     1004
#define TK_DEFAULT      1005
#define TK_DO           1006
#define TK_DOUBLE       1007
#define TK_ELSE         1008
#define TK_ENUM         1009
#define TK_EXTERN       1010
#define TK_FLOAT        1011
#define TK_FOR          1012
#define TK_GOTO         1013
#define TK_IF           1014
#define TK_INLINE       1015
#define TK_INT          1016
#define TK_LONG         1017
#define TK_RETURN       1018
#define TK_SHORT        1019
#define TK_SIZEOF       1020
#define TK_STATIC       1021
#define TK_STRUCT       1022
#define TK_SWITCH       1023
#define TK_TYPEDEF      1024
#define TK_UNION        1025
#define TK_UNSIGNED     1026
#define TK_VOID         1027
#define TK_WHILE        1028
#define TK_H_ELSE       1029
#define TK_H_ELIF       1030
#define TK_H_ENDIF      1031
#define TK_H_DEFINE     1032
#define TK_DEFINED      1033
#define TK_H_IF         1034
#define TK_H_IFDEF      1035
#define TK_H_IFNDEF     1036
#define TK_H_INCLUDE    1037
#define TK_H_UNDEF      1038
#define TK_H_ERROR      1039

// The base token iterator

typedef struct token_iterator_s token_iterator_t;
typedef struct token_iterator_s* token_iterator_p;
typedef token_iterator_p (*token_next_p)(token_iterator_p, bool);
struct token_iterator_s
{
    int kind;
    char *token;
    unsigned int length;
    char *filename;
    int line;
    int column;
    token_next_p next;
};

// The tokenizer iterator

// The tokenizer iterator recognizes the C tokens from the
// stream of characters returned by a character iterator.
// On creation it is on the first recognized token and
// on each call to the next function it returns the next
// recognized token.

struct tokenizer_s
{
    token_iterator_t base;
    char_iterator_p _char_iterator;
};
typedef struct tokenizer_s *tokenizer_p;

void tokenizer_skip_white_space(tokenizer_p tokenizer, bool skip_nl)
{
    char_iterator_p it; it = tokenizer->_char_iterator;
    char_next_p it_next = it->next;
    char ch = it->ch;

    while (ch != 0 && ch <= ' ' && (skip_nl || ch != '\n'))
    {
        it_next(it); ch = it->ch;
    }
}

char tokenizer_parse_char_literal(tokenizer_p tokenizer)
{
    char_iterator_p it = tokenizer->_char_iterator;
    char_next_p it_next; it_next = it->next;
    char ch = it->ch;
    it_next(it);
    if (ch != '\\')
    {
         return ch;
    }
    ch = it->ch;
    it_next(it);
    if (ch == '0' || ch == '1')
    {
        int val = ch - '0';
        ch = it->ch;
        if ('0' <= ch && ch <= '7')
        {
            val = 8 * val + ch - '0';
            it_next(it);
            ch = it->ch;
            if ('0' <= ch && ch <= '7')
            {
                val = 8 * val + ch - '0';
                it_next(it);
            }
            return val;
        }
        else if (val == 0)
        {
            return 0;
        }
        else
        {
            return '1';
        }
    }
    if (ch == 'a')
    {
        ch = '\a';
    }
    else if (ch == 'b')
    {
        ch = '\b';
    }
    else if (ch == 'f')
    {
        ch = '\f';
    }
    else if (ch == 'n')
    {
        ch = '\n';
    }
    else if (ch == 'r')
    {
        ch = '\r';
    }
    else if (ch == 't')
    {
        ch = '\t';
    }
    else if (ch == 'v')
    {
        ch = '\v';
    }
    else if (ch == 'x')
    {
        int v = 0;
        ch = it->ch;
        if ('0' <= ch && ch <= '9')
            v = 16 * (ch - '0');
        else if ('A' <= ch && ch <= 'F')
            v = 16 * (ch - 'A' + 10);
        else if ('a' <= ch && ch <= 'f')
            v = 16 * (ch - 'a' + 10);
        else
            printf("%s:%d.%d Warning: Invalid character '%c' after \\x\n", it->filename, (int)it->line, (int)it->column, ch);
        it_next(it);
        ch = it->ch;
        if ('0' <= ch && ch <= '9')
            v += ch - '0';
        else if ('A' <= ch && ch <= 'F')
            v += ch - 'A' + 10;
        else if ('a' <= ch && ch <= 'f')
            v += ch - 'a' + 10;
        else
            printf("%s:%d.%d Warning: Invalid character '%c' after \\x\n", it->filename, (int)it->line, (int)it->column, ch);
        ch = v;
        it_next(it);
    }
    else if (ch == '\'' || ch == '"' || ch == '\\')
        ;
    else
        printf("%s:%d.%d Warning: Unknown escape sequence \\%c\n", it->filename, (int)it->line, (int)it->column, ch);
    return ch;
}

#define MAX_TOKEN_LEN 6000

token_iterator_p tokenizer_next(token_iterator_p token_it, bool skip_nl)
{
    tokenizer_p tokenizer = (tokenizer_p)token_it;
    tokenizer_skip_white_space(tokenizer, skip_nl);
    char_iterator_p it = tokenizer->_char_iterator;
    char_next_p it_next; it_next = it->next;
    int i = 0;
    char ch = it->ch;
    tokenizer->base.kind = 0;
    if (ch == 0)
    {
        goto done;
    }
    bool at_start_of_line =    token_it->filename != tokenizer->_char_iterator->filename
                            || token_it->line != tokenizer->_char_iterator->line;
    token_it->filename = it->filename;
    token_it->line = it->line;
    token_it->column = it->column;
    if (ch == '\n')
    {
        token_it->kind = '\n';
    }
    else if (ch == '#' && at_start_of_line)
    {
        token_it->token[i] = '#'; i = i + 1; it_next(it);
        tokenizer_skip_white_space(tokenizer, TRUE);
        ch = it->ch;
        while ('a' <= ch && ch <= 'z')
        {
            token_it->token[i] = ch; i = i + 1; it_next(it); ch = it->ch;
        }
        token_it->token[i] = '\0';
             if (eqstr("#else",    token_it->token)) token_it->kind = TK_H_ELSE;
        else if (eqstr("#elif",    token_it->token)) token_it->kind = TK_H_ELIF;
        else if (eqstr("#endif",   token_it->token)) token_it->kind = TK_H_ENDIF;
        else if (eqstr("#define",  token_it->token)) token_it->kind = TK_H_DEFINE;
        else if (eqstr("#if",      token_it->token)) token_it->kind = TK_H_IF;
        else if (eqstr("#ifdef",   token_it->token)) token_it->kind = TK_H_IFDEF;
        else if (eqstr("#ifndef",  token_it->token)) token_it->kind = TK_H_IFNDEF;
        else if (eqstr("#include", token_it->token)) token_it->kind = TK_H_INCLUDE;
        else if (eqstr("#undef",   token_it->token)) token_it->kind = TK_H_UNDEF;
        else if (eqstr("#error",   token_it->token)) token_it->kind = TK_H_ERROR;
    }
    else if (('a' <= ch && ch <= 'z') || ('A' <= ch && ch <= 'Z') || ch == '_')
    {
        token_it->kind = 'i';
        token_it->token[i] = ch; i = i + 1; it_next(it); ch = it->ch;
        while (('a' <= ch && ch <= 'z') || ('A' <= ch && ch <= 'Z') || ('0' <= ch && ch <= '9') || ch == '_')
        {
            token_it->token[i] = ch; i = i + 1; it_next(it); ch = it->ch;
        }
        token_it->token[i] = '\0';
             if (eqstr("break",    token_it->token)) token_it->kind = TK_BREAK;
        else if (eqstr("case",     token_it->token)) token_it->kind = TK_CASE;
        else if (eqstr("char",     token_it->token)) token_it->kind = TK_CHAR;
        else if (eqstr("continue", token_it->token)) token_it->kind = TK_CONTINUE;
        else if (eqstr("const",    token_it->token)) token_it->kind = TK_CONST;
        else if (eqstr("default",  token_it->token)) token_it->kind = TK_DEFAULT;
        else if (eqstr("defined",  token_it->token)) token_it->kind = TK_DEFINED;
        else if (eqstr("do",       token_it->token)) token_it->kind = TK_DO;
        else if (eqstr("double",   token_it->token)) token_it->kind = TK_DOUBLE;
        else if (eqstr("else",     token_it->token)) token_it->kind = TK_ELSE;
        else if (eqstr("enum",     token_it->token)) token_it->kind = TK_ENUM;
        else if (eqstr("extern",   token_it->token)) token_it->kind = TK_EXTERN;
        else if (eqstr("float",    token_it->token)) token_it->kind = TK_FLOAT;
        else if (eqstr("for",      token_it->token)) token_it->kind = TK_FOR;
        else if (eqstr("goto",     token_it->token)) token_it->kind = TK_GOTO;
        else if (eqstr("if",       token_it->token)) token_it->kind = TK_IF;
        else if (eqstr("inline",   token_it->token)) token_it->kind = TK_INLINE;
        else if (eqstr("int",      token_it->token)) token_it->kind = TK_INT;
        else if (eqstr("long",     token_it->token)) token_it->kind = TK_LONG;
        else if (eqstr("return",   token_it->token)) token_it->kind = TK_RETURN;
        else if (eqstr("short",    token_it->token)) token_it->kind = TK_SHORT;
        else if (eqstr("sizeof",   token_it->token)) token_it->kind = TK_SIZEOF;
        else if (eqstr("static",   token_it->token)) token_it->kind = TK_STATIC;
        else if (eqstr("struct",   token_it->token)) token_it->kind = TK_STRUCT;
        else if (eqstr("switch",   token_it->token)) token_it->kind = TK_SWITCH;
        else if (eqstr("typedef",  token_it->token)) token_it->kind = TK_TYPEDEF;
        else if (eqstr("union",    token_it->token)) token_it->kind = TK_UNION;
        else if (eqstr("unsigned", token_it->token)) token_it->kind = TK_UNSIGNED;
        else if (eqstr("void",     token_it->token)) token_it->kind = TK_VOID;
        else if (eqstr("while",    token_it->token)) token_it->kind = TK_WHILE;
    }
    else if ('0' <= ch && ch <= '9')
    {
        token_it->kind = '0';
        if (ch == '0')
        {
            token_it->token[i] = ch; i = i + 1; it_next(it); ch = it->ch;
            if (ch == 'x')
            {
                token_it->token[i] = ch; i = i + 1; it_next(it); ch = it->ch;
                while (('0' <= ch && ch <= '9') || ('a' <= ch && ch <= 'f') || ('A' <= ch && ch <= 'F'))
                {
                    token_it->token[i] = ch; i = i + 1; it_next(it); ch = it->ch;
                }
            }
            else
            {
                while ('0' <= ch && ch <= '7')
                {
                    token_it->token[i] = ch; i = i + 1; it_next(it); ch = it->ch;
                }
            }
        }
        else
        {
            while ('0' <= ch && ch <= '9')
            {
                token_it->token[i] = ch; i = i + 1; it_next(it); ch = it->ch;
            }
        }
        if (ch == 'U')
        {
            token_it->token[i] = ch; i = i + 1; it_next(it); ch = it->ch;
        }
        while (ch == 'L')
        {
            token_it->token[i] = ch; i = i + 1; it_next(it); ch = it->ch;
        }
    }
    else if (ch == '\'')
    {
        token_it->kind = ch;
        it_next(it);
        token_it->token[0] = tokenizer_parse_char_literal(tokenizer);
        i = 1;
        if (it->ch == '\'')
        {
            it_next(it);
        }
    }
    else if (ch == '"')
    {
        token_it->kind = ch; it_next(it); ch = it->ch;
        while (ch != '\0' && ch != '\n' && ch != '"')
        {
            if (i == MAX_TOKEN_LEN)
            {
                fprintf(stderr, "MAX_TOKEN_LEN %d exceeded\n", i);
                exit(-1);
            }
            token_it->token[i] = tokenizer_parse_char_literal(tokenizer);
            i++;
            ch = it->ch;
        }
        if (ch == '"')
        {
            it_next(it);
        }
    }
    else
    {
        token_it->kind = ch;
        token_it->token[0] = ch;
        i = 1;
        if (ch == '#')
        {
            it_next(it);
            if (it->ch == '#')
            {
                it_next(it);
                token_it->kind = TK_D_HASH;
                token_it->token[1] = '#';
                i = 2;
            }
        }
        else if (ch == '=')
        {
            it_next(it);
            if (it->ch == '=')
            {
                it_next(it);
                token_it->kind = TK_EQ;
                token_it->token[1] = '=';
                i = 2;
            }
        }
        else if (ch == '*' || ch == '/' || ch == '%' || ch == '^')
        {
            it_next(it);
            if (it->ch == '=')
            {
                it_next(it);
                token_it->kind = TK_ASS + ch;
                token_it->token[1] = '=';
                i = 2;
            }
        }
        else if (ch == '-')
        {
            it_next(it); ch = it->ch;
            if (ch == '-')
            {
                it_next(it);
                token_it->kind = TK_DEC;
                token_it->token[1] = ch;
                i = 2;
            }
            else if (ch == '=')
            {
                it_next(it);
                token_it->kind = TK_SUB_ASS;
                token_it->token[1] = ch;
                i = 2;
            }
            else if (ch == '>')
            {
                it_next(it);
                token_it->kind = TK_ARROW;
                token_it->token[1] = ch;
                i = 2;
            }
        }           
        else if (ch == '+' || ch == '-')
        {
            it_next(it);
            ch = it->ch;
            if (ch == token_it->token[0] || ch == '=')
            {
                it_next(it);
                token_it->token[1] = ch;
                if (ch == '+')
                {
                    token_it->kind = TK_INC;
                }
                else if (ch == '-')
                {
                    token_it->kind = TK_DEC;
                }
                else
                {
                    token_it->kind = TK_ASS + token_it->token[0];
                }
                i = 2;
            }
        }
        else if (ch == '<' || ch == '>' || ch == '|' || ch == '&')
        {
            it_next(it);
            if (it->ch == ch)
            {
                it_next(it);
                token_it->kind = TK_DD_OPER + ch;
                token_it->token[1] = ch;
                i = 2;
            }
            if (it->ch == '=' && (ch == '<' || ch == '>' || ch == '&' || ch == '|')) 
            {
                it_next(it);
                if (i == 2)
                {
                    token_it->kind = TK_ASS + ch;
                }
                else if (ch == '&')
                {
                    token_it->kind = TK_BAND_ASS;
                }
                else if (ch == '|')
                {
                    token_it->kind = TK_BOR_ASS;
                }
                else if (ch == '<')
                {
                    token_it->kind = TK_LE;
                }
                else
                {
                    token_it->kind = TK_GE;
                }
                token_it->token[i] = '=';
                i = i + 1;
            }
        }
        else if (ch == '!')
        {
            it_next(it);
            if (it->ch == '=')
            {
                it_next(it);
                token_it->kind = TK_NE;
                token_it->token[1] = '=';
                i = 2;
            }
        }
        else if (ch == '.')
        {
            it_next(it);
            if (it->ch == '.')
            {
                it_next(it);
                token_it->kind = TK_DPERIOD;
                token_it->token[1] = '.';
                i = 2;
                if (it->ch == '.')
                {
                    it_next(it);
                    token_it->kind = TK_DASHES;
                    token_it->token[2] = '.';
                    i = 3;
                }
            }
        }
        else
        {
            it_next(it);
        }
    }
    done:
    token_it->token[i] = '\0';
    token_it->length = i;
    if (opt_trace_parser)
        printf("tokenizer_next %d: %d '%s'\n", token_it->line, token_it->kind, token_it->token);
    return token_it;
}

int string_int_value(const char *s)
{
    int int_value = 0;
    if (*s == '0')
    {
        s++;
        if (*s == 'x')
        {
            s++;
            while (1)
            {
                if ('0' <= *s && *s <= '9')
                    int_value = 16 * int_value + *s - '0';
                else if ('a' <= *s && *s <= 'f')
                    int_value = 16 * int_value + *s - 'a' + 10;
                else if ('A' <= *s && *s <= 'F')
                    int_value = 16 * int_value + *s - 'A' + 10;
                else
                    break;
                s++;
            }
        }
        else
        {
            while ('0' <= *s && *s <= '7')
            {
                int_value = 8 * int_value + *s - '0';
                s++;
            }
        }
    }
    else
    {
        while ('0' <= *s && *s <= '9')
        {
            int_value = 10 * int_value + *s - '0';
            s++;
        }
    }
    if (*s == 'U')
    {
        s++;
    }
    while (*s == 'L')
    {
        s++;
    }
    return int_value;
}

int token_it_int_value(token_iterator_p it)
{
    return string_int_value(it->token);
}

tokenizer_p new_tokenizer(char_iterator_p char_iterator)
{
    tokenizer_p tokenizer = malloc(sizeof(struct tokenizer_s));
    tokenizer->_char_iterator = char_iterator;
    tokenizer->base.token = malloc(MAX_TOKEN_LEN);
    tokenizer->base.filename = NULL;
    tokenizer->base.next = tokenizer_next;
    return tokenizer;
}

// List of tokens

struct tokens_s
{
    int kind;
    char *token;
    int length;
    char *filename;
    int line;
    int column;
    struct tokens_s* next;
};
typedef struct tokens_s* tokens_p;

tokens_p new_token(int kind)
{
    tokens_p token = malloc(sizeof(struct tokens_s));
    token->kind = kind;
    token->token = 0;
    token->length = 0;
    token->filename = "<env>";
    token->line = 0;
    token->column = 0;
    token->next = 0;
    return token;
}
tokens_p new_int_token(const char *str)
{
    tokens_p token = new_token('0');
    token->token = copystr(str);
    return token;
}
tokens_p new_str_token(char *str)
{
    tokens_p token = new_token('"');
    token->token = copystr(str);
    token->length = strlen(str);
    return token;
}
tokens_p new_token_from_it(token_iterator_p it)
{
    tokens_p token = new_token(it->kind);
    token->token = copystrlen(it->token, it->length);
    token->length = it->length;
    token->filename = it->filename;
    token->line = it->line;
    token->column = it->column;
    return token;
}

// The enironment for defined symbols and macros

struct env_s {
    char* name;
    int nr_args;
    char* args[10];
    tokens_p tokens;
    struct env_s* next;
};
typedef struct env_s env_t;
typedef struct env_s *env_p;

env_p environment = NULL;

env_p get_env(char* name, bool create)
{
    env_p prev_env = NULL;
    env_p env = environment;
    while (env != NULL)
    {
        if (eqstr(env->name, name))
            return env;
        prev_env = env;
        env = env->next;
    }
    if (!create)
        return NULL;
    env = malloc(sizeof(struct env_s));
    env->name = copystr(name);
    env->nr_args = 0;
    env->tokens = NULL;
    env->next = NULL;
    if (prev_env == NULL)
    {
        environment = env;
    }
    else
    {
        prev_env->next = env;
    }
    return env;
}

void del_env(char* name)
{
    env_p prev_env = NULL;
    env_p env = environment;
    while (env != 0)
    {
        if (eqstr(env->name, name))
        {
            if (prev_env == NULL)
            {
                environment = environment->next;
            }
            else
            {
                prev_env->next = env->next;
            }
            return;
        }
        prev_env = env;
        env = env->next;
    }
}

// The conditional iterator

// The conditional iterator deals with all conditional compilation
// directives, such as '#if', and also the directives
// `#define`, `#undef`, `#include`, and `#error`.

typedef struct conditional_iterator_s* conditional_iterator_p;
typedef int (*parse_expr_function_p)(conditional_iterator_p it);

struct conditional_iterator_s
{
    token_iterator_t base;
    include_iterator_p _source_it;
    token_iterator_p _token_it;
    parse_expr_function_p _parse_or_expr;
    
    bool _skip_level;
    bool _if_done[40];
    int _if_level;
};

/*
    conditional_primary
        : '(' conditional_or_exp ')'
        | 'defined' ( '(' ident ')' |  ident )
        | integer
        | ident
        .
*/

int conditional_iterator_parse_primary(conditional_iterator_p it)
{
    token_next_p token_it_next = it->_token_it->next;
    int result = 0;
    if (it->_token_it->kind == '(')
    {
        token_it_next(it->_token_it, FALSE);
        parse_expr_function_p parse_or_expr = it->_parse_or_expr;
        result = parse_or_expr(it);
        if (it->_token_it->kind == ')')
        {
            token_it_next(it->_token_it, FALSE);
        }
    }
    else if (it->_token_it->kind == TK_DEFINED)
    {
        token_it_next(it->_token_it, FALSE);
        if (it->_token_it->kind == '(')
        {
            token_it_next(it->_token_it, FALSE);
            //printf("defined(%s) = %d\n", it->_token_it->token, get_env(it->_token_it->token, FALSE) != NULL);
            if (get_env(it->_token_it->token, FALSE) != NULL)
            {
                result = 1;
            }
            token_it_next(it->_token_it, FALSE);
            if (it->_token_it->kind == ')')
            {
                token_it_next(it->_token_it, FALSE);
            }
        }
        else
        {
            if (get_env(it->_token_it->token, FALSE) != NULL)
            {
                result = 1;
            }
            token_it_next(it->_token_it, FALSE);
        }
    }
    else if (it->_token_it->kind == '0')
    {
        result = token_it_int_value(it->_token_it);
        token_it_next(it->_token_it, FALSE);
    }
    else if (it->_token_it->kind == 'i')
    {
        env_p env = get_env(it->_token_it->token, FALSE);
        if (env != NULL && env->tokens != NULL && env->tokens->kind == '0')
        {
            result = string_int_value(env->tokens->token);
        }
        token_it_next(it->_token_it, FALSE);
    }
    return result;
}

/*
    conditional_unary_expr
        : '!' conditional_primary
        | conditional_primary
        .
*/

int conditional_iterator_parse_unary_expr(conditional_iterator_p it)
{
    token_next_p token_it_next = it->_token_it->next;
    if (it->_token_it->kind == '!')
    {
        token_it_next(it->_token_it, FALSE);
        int result = conditional_iterator_parse_primary(it);
        return !result; //!conditional_iterator_parse_primary(it);
    }
    return conditional_iterator_parse_primary(it);
}

/*
    conditional_compare_expr
        : conditional_unary_expr
          ('==' conditional_unary_expr 
          |'!=' conditional_unary_expt ) OPT
        .
*/

int conditional_iterator_parse_compare_expr(conditional_iterator_p it)
{
    token_next_p token_it_next = it->_token_it->next;
    int value = conditional_iterator_parse_unary_expr(it);
    if (it->_token_it->kind == TK_EQ)
    {
        token_it_next(it->_token_it, FALSE);
        return value == conditional_iterator_parse_unary_expr(it);
    }
    if (it->_token_it->kind == TK_NE)
    {
        token_it_next(it->_token_it, FALSE);
        return value != conditional_iterator_parse_unary_expr(it);
    }
    return value;
}

/*
    conditional_and_expr : conditional_compare_expr CHAIN '&&' .
*/

int conditional_iterator_parse_and_expr(conditional_iterator_p it)
{
    token_next_p token_it_next = it->_token_it->next;
    int value = conditional_iterator_parse_compare_expr(it);
    while (it->_token_it->kind == TK_AND)
    {
        token_it_next(it->_token_it, FALSE);
        int value2 = conditional_iterator_parse_compare_expr(it);
        value = value && value2;
    }
    return value;
}

/*
    conditional_or_expr : conditional_and_expr CHAIN '||' .
*/

int conditional_iterator_parse_or_expr(conditional_iterator_p it)
{
    token_next_p token_it_next = it->_token_it->next;
    int value = conditional_iterator_parse_and_expr(it);
    while (it->_token_it->kind == TK_OR)
    {
        token_it_next(it->_token_it, FALSE);
        int value2 = conditional_iterator_parse_and_expr(it);
        value = value || value2;
    }
    return value;
}

char *include_path = 0;
char *end_include_prefix = 0;

token_iterator_p conditional_iterator_next(token_iterator_p token_it, bool dummy)
{
    conditional_iterator_p it = (conditional_iterator_p)token_it;
    //printf("conditional_iterator_next\n");
    token_next_p token_it_next = it->_token_it->next;
    int kind;
    int value = 0;
    tokens_p prev_token;
    env_p env;
    tokens_p token;
    file_iterator_p input_it;
    line_splice_iterator_p splice_it;
    comment_strip_iterator_p comment_it;
    
    token_it_next(it->_token_it, TRUE);
    while (TRUE)
    {
        //if (it->_token_it->token[0] == '#')
        //  printf("%s.%d %s (%d)\n", it->_token_it->filename, it->_token_it->line, it->_token_it->token, it->_skip_level);
        kind = it->_token_it->kind;
        if (it->_skip_level > 0)
        {
            if (kind == TK_H_IF || kind == TK_H_IFDEF || kind == TK_H_IFNDEF)
            {
                it->_skip_level = it->_skip_level + 1;
            }
            else if (kind == TK_H_ENDIF)
            {
                it->_skip_level = it->_skip_level - 1;
                if (it->_skip_level == 0)
                {
                    it->_if_level = it->_if_level - 1;
                }
            }
            else if (kind == TK_H_ELSE)
            {
                if (it->_skip_level == 1)
                {
                    if (it->_if_done[it->_if_level] == FALSE)
                    {
                        it->_skip_level = 0;
                    }
                }
            }
            else if (kind == TK_H_ELIF)
            {
                token_it_next(it->_token_it, FALSE);
                value = conditional_iterator_parse_or_expr(it);
                if (it->_skip_level == 1)
                {
                    if (it->_if_done[it->_if_level] == FALSE)
                    {
                        token_it_next(it->_token_it, FALSE);
                        if (value)
                        {
                            it->_skip_level = 0;
                            it->_if_done[it->_if_level] = TRUE;
                        }
                    }
                }
            }
            token_it_next(it->_token_it, TRUE);
        }
        else if (kind == TK_H_IFDEF || kind == TK_H_IFNDEF)
        {
            token_it_next(it->_token_it, TRUE);
            it->_if_level = it->_if_level + 1;
            if (it->_token_it->kind == 'i')
            {
                //int defined = value = get_env(it->_token_it->token, FALSE) != 0;
                //printf("for %s is defined %d\n", it->_token_it->token, defined);
                if ((get_env(it->_token_it->token, FALSE) != 0) == (kind == TK_H_IFDEF))
                {
                    it->_if_done[it->_if_level] = TRUE;
                }
                else
                {
                    it->_if_done[it->_if_level] = FALSE;
                    it->_skip_level = 1;
                }
                token_it_next(it->_token_it, TRUE);
            }
        }
        else if (kind == TK_H_IF)
        {
            token_it_next(it->_token_it, TRUE);
            it->_if_level = it->_if_level + 1;
            if (conditional_iterator_parse_or_expr(it))
            {
                it->_if_done[it->_if_level] = TRUE;
            }
            else
            {
                it->_if_done[it->_if_level] = FALSE;
                it->_skip_level = 1;
            }
            token_it_next(it->_token_it, TRUE);
        }
        else if (kind == TK_H_ELSE || kind == TK_H_ELIF)
        {
            it->_skip_level = 1;
            while (it->_token_it->kind == '\n')
            {
                token_it_next(it->_token_it, FALSE);
            }
            token_it_next(it->_token_it, TRUE);
        }
        else if (kind == TK_H_ENDIF)
        {   
            it->_if_level = it->_if_level - 1;
            token_it_next(it->_token_it, TRUE);
        }
        else if (kind == TK_H_DEFINE)
        {
            prev_token = NULL;
            token_it_next(it->_token_it, FALSE);
            env = get_env(it->_token_it->token, TRUE);
            if (it->_source_it->base.ch == '(')
            {
                token_it_next(it->_token_it, FALSE);
                while (TRUE)
                {
                    token_it_next(it->_token_it, FALSE);
                    env->args[env->nr_args] = copystr(it->_token_it->token);
                    env->nr_args = env->nr_args + 1;
                    token_it_next(it->_token_it, FALSE);
                    if (it->_token_it->kind != ',')
                    {
                        break;
                    }
                }
                if (it->_token_it->kind == ')')
                {
                    token_it_next(it->_token_it, FALSE);
                }
            }
            else
            {
                token_it_next(it->_token_it, FALSE);
            }
            while (it->_token_it->kind != '\n')
            {
                token = new_token_from_it(it->_token_it);
                if (prev_token == NULL)
                {
                    env->tokens = token;
                }
                else
                {
                    prev_token->next = token;
                }
                prev_token = token;
                token_it_next(it->_token_it, FALSE);
            }
            token_it_next(it->_token_it, TRUE);
        }
        else if (kind == TK_H_UNDEF)
        {
            token_it_next(it->_token_it, TRUE);
            del_env(it->_token_it->token);
            token_it_next(it->_token_it, TRUE);
        }
        else if (kind == TK_H_INCLUDE)
        {
            token_it_next(it->_token_it, TRUE);
            if (it->_token_it->kind == '"')
            {
                strcpy(end_include_prefix, it->_token_it->token);
                while (it->_token_it->kind != '\n')
                {
                    token_it_next(it->_token_it, FALSE);
                }
                //printf("INCLUDE '%s'\n", include_path);
                input_it = new_file_iterator(include_path);
                if (input_it->base.ch != 0)
                {
                    splice_it = new_line_splice_iterator(&input_it->base);
                    comment_it = new_comment_strip_iterator(&splice_it->base);
                    include_iterator_add(it->_source_it, &comment_it->base);
                    token_it_next(it->_token_it, TRUE);
                }
                else
                {
                    token_it_next(it->_token_it, TRUE);
                }
            }
            else
            {
                while (it->_token_it->kind != '\n')
                {
                    token_it_next(it->_token_it, FALSE);
                }
                token_it_next(it->_token_it, TRUE);
            }
        }
        else if (kind == TK_H_ERROR)
        {
            it->base.kind = it->_token_it->kind;
            it->base.token = it->_token_it->token;
            it->base.length = it->_token_it->length;
            it->base.filename = it->_token_it->filename;
            it->base.line  = it->_token_it->line;
            it->base.column = it->_token_it->column;
            return token_it;
        }
        else
        {
            it->base.kind = it->_token_it->kind;
            it->base.token = it->_token_it->token;
            it->base.length = it->_token_it->length;
            it->base.filename = it->_token_it->filename;
            it->base.line  = it->_token_it->line;
            it->base.column = it->_token_it->column;
            return token_it;
        }
    }
    return token_it;
}   

conditional_iterator_p new_conditional_iterator(include_iterator_p source_it, token_iterator_p token_it)
{
    conditional_iterator_p it = malloc(sizeof(struct conditional_iterator_s));
    it->_source_it = source_it;
    it->_token_it = token_it;
    it->_parse_or_expr = conditional_iterator_parse_or_expr;
    it->_skip_level = 0;
    it->_if_level = 0;
    it->base.next = conditional_iterator_next;
    return it;
}

// The expand macro iterator

// This iterator implements the expansion of a macro with a list
// of tokens for the arguments. It also implements processing of
// the '#' and `##` operators during expansion. After expansion
// has been completed, it returns the token iterator for the
// remaining part.

#define APPENDED_TOKEN_LEN 50

typedef struct expand_macro_iterator_s* expand_macro_iterator_p;
struct expand_macro_iterator_s
{
    token_iterator_t base;
    tokens_p param_tokens;
    tokens_p tokens;
    token_iterator_p _rest_it;
    bool stringify;
    char appended_token[APPENDED_TOKEN_LEN];
    env_p _macro;
    tokens_p args[10];
};

token_iterator_p expand_macro_iterator_next(token_iterator_p token_it, bool dummy)
{
    expand_macro_iterator_p it = (expand_macro_iterator_p)token_it;
    if (it->param_tokens != 0)
    {
        token_it->kind = it->stringify ? '"' : it->param_tokens->kind;
        token_it->token = it->param_tokens->token;
        token_it->length = it->param_tokens->length;
        token_it->filename = it->param_tokens->filename;
        token_it->line = it->param_tokens->line;
        token_it->column = it->param_tokens->column;
        if (opt_trace_parser)
            printf("token from arg %d %s\n", token_it->kind, token_it->token == 0 ? "?" : token_it->token);
        it->param_tokens = it->param_tokens->next;
        return token_it;
    }
    
    for (;;)
    {
        tokens_p token = it->tokens;
        if (token == 0)
        {
            token_iterator_p rest_it = it->_rest_it;
            free(it);
            return rest_it->next(rest_it, dummy);
        }
        
        if (opt_trace_parser)
            printf("token from macro %d %s\n", token->kind, token->token == 0 ? "?" : token->token);
        it->tokens = token->next;
        it->stringify = FALSE;
        
        if (token->next != NULL && token->next->kind == TK_D_HASH)
        {
            token_it->kind = 'i';
            token_it->filename = token->filename;
            token_it->line = token->line;
            token_it->column = token->column;
            int p = 0;
            for (;;)
            {
                const char *s = token->token;
                if (token->kind == 'i')
                {
                    int nr_args = it->_macro->nr_args;
                    int i = 0;
                    for (; i < nr_args; i++)
                        if (strcmp(token->token, it->_macro->args[i]) == 0)
                            break;
                    if (i < nr_args)
                    {
                        tokens_p tokens = it->args[i];
                        if (tokens == NULL)
                        {
                            if (opt_trace_parser)
                                printf("INFO: append arg no value\n");
                            s = "";
                        }
                        else if (tokens->next != NULL)
                        {
                            printf("ERROR: append arg more than one value\n");
                            s = "";
                        }
                        else
                            s = tokens->token;
                    }
                }
                for (; *s != '\0'; s++)
                    if (p < APPENDED_TOKEN_LEN - 1)
                        it->appended_token[p++] = *s;
                token = token->next;
                if (token == NULL || token->kind != TK_D_HASH)
                    break;
                token = token->next;
            }
            it->tokens = token;
            it->appended_token[p] = '\0';
            if (opt_trace_parser)
                printf("INFO: Appended token '%s'\n", it->appended_token);
            token_it->token = it->appended_token;
            token_it->length = p;
            
            return token_it;
        }
        else
        {
            if (token->kind == '#')
            {
                it->stringify = TRUE;
                it->tokens = token = token->next;
                if (it->tokens == 0)
                    return it->_rest_it->next(it->_rest_it, dummy);
            }
            
            if (token->kind == 'i')
            {
                int nr_args = it->_macro->nr_args;
                int i = 0;
                for (; i < nr_args; i++)
                    if (strcmp(token->token, it->_macro->args[i]) == 0)
                        break;
                if (i < nr_args)
                {
                    tokens_p tokens = it->args[i];
                    if (tokens == 0)
                        continue;
                    token_it->kind = it->stringify ? '"' : tokens->kind;
                    token_it->token = tokens->token;
                    token_it->length = tokens->length;
                    token_it->filename = tokens->filename;
                    token_it->line = tokens->line;
                    token_it->column = token->column;
                    it->param_tokens = tokens->next;
                    it->tokens = token->next;
                    return token_it;
                }
            }
            token_it->kind = it->stringify ? '"' : token->kind;
            token_it->token = token->token;
            token_it->length = token->length;
            token_it->filename = token->filename;
            token_it->line = token->line;
            token_it->column = token->column;
            
            return token_it;
        }
    }
}

token_iterator_p new_exapnd_macro_iterator(env_p macro, tokens_p *args, token_iterator_p rest_it)
{
    expand_macro_iterator_p it = malloc(sizeof(struct expand_macro_iterator_s));
    it->base.next = expand_macro_iterator_next;
    it->param_tokens = NULL;
    it->tokens = macro->tokens;
    it->_rest_it = rest_it;
    it->_macro = macro;
    for (int arg_nr = 0; arg_nr < macro->nr_args; arg_nr++)
        it->args[arg_nr] = args[arg_nr];
    return expand_macro_iterator_next(&it->base, FALSE);
}

// The expand iterator

// This iterator takes care of expanding all defined symbols and macros.
// For the expansion of these the expand macro iterator is used.

typedef struct expand_iterator_s* expand_iterator_p;
struct expand_iterator_s
{
    token_iterator_t base;
    token_iterator_p _source_it;
};

token_iterator_p expand_iterator_next(token_iterator_p token_it, bool dummy)
{
    expand_iterator_p it = (expand_iterator_p)token_it;
    token_iterator_p source_it = it->_source_it;

    source_it = source_it->next(source_it, dummy);
    
    for (bool go = TRUE; go;)
    {
        go = FALSE;
        if (source_it->kind == 'i')
        {
            env_p macro = get_env(source_it->token, FALSE);
            if (macro != NULL)
            {
                go = TRUE;
                if (opt_trace_parser)
                    printf("Expand token %s %d: ", source_it->token, macro->nr_args);
                tokens_p args[10];
                int nr_args = 0;
                if (macro->nr_args > 0)
                {
                    source_it = source_it->next(source_it, dummy);
                    if (source_it->kind != '(')
                    {
                        printf("ERROR: No arguments for %s when parameters (%d) are expected\n", macro->name, macro->nr_args);
                        continue;
                    }
                    do
                    {
                        source_it = source_it->next(source_it, dummy);
                        args[nr_args] = NULL;
                        tokens_p *ref_tokens = &args[nr_args];
                        nr_args++;
                        char stack[20];
                        int stack_depth = 0;
                        while (stack_depth > 0 || (source_it->kind != 0 && source_it->kind != ',' && source_it->kind != ')'))
                        {
                            *ref_tokens = new_token_from_it(source_it);
                            ref_tokens = &(*ref_tokens)->next;
                            if (source_it->kind == '(')
                                stack[stack_depth++] = ')';
                            else if (source_it->kind == '{')
                                stack[stack_depth++] = '}';
                            else if (source_it->kind == '[')
                                stack[stack_depth++] = ']';
                            else if (stack_depth > 0 && source_it->kind == stack[stack_depth - 1])
                                stack_depth--;
                            source_it = source_it->next(source_it, dummy);
                        }
                    }
                    while (source_it->kind == ',');
                }
                if (macro->nr_args != nr_args)
                {
                    printf("ERROR: Number arguments (%d) for %s does not match parameters (%d)\n", nr_args, macro->name, macro->nr_args);
                    source_it = source_it->next(source_it, dummy);
                }
                else if (macro->tokens == NULL)
                    source_it = source_it->next(source_it, dummy);
                else                        
                    source_it = new_exapnd_macro_iterator(macro, args, source_it);
            }
        }
        it->_source_it = source_it;
    }
    
    token_it->kind = source_it->kind;
    token_it->token = source_it->token;
    token_it->length = source_it->length;
    token_it->filename = source_it->filename;
    token_it->line = source_it->line;
    token_it->column = source_it->column;
            
    return token_it;
}

expand_iterator_p new_expand_iterator(token_iterator_p source_it)
{
    expand_iterator_p it = malloc(sizeof(struct expand_iterator_s));
    it->_source_it = source_it;
    it->base.next = expand_iterator_next;
    return it;
}

token_iterator_p token_it = NULL;

// Output the C-preprocessor output.

void output_preprocessor(const char *filename)
{
    FILE *fout = fopen(filename, "w");
    if (fout == NULL)
        return;
    token_it = token_it->next(token_it, TRUE);
    
    char *prev_file = 0;
    int prev_line = 0;
    while (token_it->kind != 0)
    {
        if (token_it->filename != prev_file || token_it->line != prev_line)
        {
            fprintf(fout, "\n%s: %d", token_it->filename, token_it->line);
            for (int i = 0; i < token_it->column; i++)
                fputc(' ', fout);
            prev_file = token_it->filename;
            prev_line = token_it->line;
        }
        fputc(' ', fout);
        if (token_it->kind == 'i')
        {
            fputs(token_it->token, fout);
        }
        else if (token_it->kind == '"' || token_it->kind == '\'')
        {
            char strsep = token_it->kind;
            fputc(strsep, fout);
            for (int i = 0; i < token_it->length ; i = i + 1)
            {
                char ch = token_it->token[i];
                if (ch == '\n')
                    fputs("\\n", fout);
                else if (ch == '\r')
                    fputs("\\r", fout);
                else if (ch == '\t')
                    fputs("\\t", fout);
                else if (ch == '\0')
                    fputs("\\0", fout);
                else if (' ' <= ch && ch < 127)
                    fputc(ch, fout);
                else
                {
                    fputs("\\", fout);
                    fputc(ch, fout);
                }
            }
            fputc(strsep, fout);
        }
        else if (token_it->kind == '0')
        {
            fputs(token_it->token, fout);
        }
        else if (token_it->kind < 127)
        {
            fputc(token_it->kind, fout);
        }
        else if (token_it->kind >= TK_KEYWORD)
            fputs(token_it->token, fout);
        else if (token_it->kind == TK_D_HASH)   fputs("##", fout);
        else if (token_it->kind == TK_EQ)       fputs("==", fout);
        else if (token_it->kind == TK_NE)       fputs("!=", fout);
        else if (token_it->kind == TK_LE)       fputs("<=", fout);
        else if (token_it->kind == TK_GE)       fputs(">=", fout);
        else if (token_it->kind == TK_INC)      fputs("++", fout);
        else if (token_it->kind == TK_DEC)      fputs("--", fout);
        else if (token_it->kind == TK_ARROW)    fputs("->", fout);
        else if (token_it->kind == TK_MUL_ASS)  fputs("*=", fout);
        else if (token_it->kind == TK_DIV_ASS)  fputs("/=", fout);
        else if (token_it->kind == TK_MOD_ASS)  fputs("%%=", fout);
        else if (token_it->kind == TK_ADD_ASS)  fputs("+=", fout);
        else if (token_it->kind == TK_SUB_ASS)  fputs("-=", fout);
        else if (token_it->kind == TK_SHL_ASS)  fputs("<<=", fout);
        else if (token_it->kind == TK_SHR_ASS)  fputs(">>=", fout);
        else if (token_it->kind == TK_XOR_ASS)  fputs("^=", fout);
        else if (token_it->kind == TK_BAND_ASS) fputs("&=", fout);
        else if (token_it->kind == TK_BOR_ASS)  fputs("|=", fout);
        else if (token_it->kind == TK_SHL)      fputs("<<", fout);
        else if (token_it->kind == TK_SHR)      fputs(">>", fout);
        else if (token_it->kind == TK_AND)      fputs("&&", fout);
        else if (token_it->kind == TK_OR)       fputs("||", fout);
        else fputs("????", fout);

        token_it = token_it->next(token_it, TRUE);
    }

    fprintf(fout, "\n\nDone\n");    
    fclose(fout);
}

// Types

#define BT_UNSIGNED_INT (1)
#define BT_SIGNED_INT (1 | 2)
#define BT_TYPE(X)  ((X) << 2)
#define BT_GET_TYPE(X) ((X) >> 2)

typedef enum
{
    BT_VOID = 0,
    BT_S8  = BT_SIGNED_INT   | BT_TYPE(1),
    BT_U8  = BT_UNSIGNED_INT | BT_TYPE(1),
    BT_S16 = BT_SIGNED_INT   | BT_TYPE(2),
    BT_U16 = BT_UNSIGNED_INT | BT_TYPE(2),
    BT_S32 = BT_SIGNED_INT   | BT_TYPE(3),
    BT_U32 = BT_UNSIGNED_INT | BT_TYPE(3),
    BT_S64 = BT_SIGNED_INT   | BT_TYPE(4),
    BT_U64 = BT_UNSIGNED_INT | BT_TYPE(4),
    BT_F   = BT_SIGNED_INT   | BT_TYPE(5),  // Treat float and double as integer
    BT_DF  = BT_SIGNED_INT   | BT_TYPE(6),
    BT_JMP_BUF =               BT_TYPE(7),
    BT_FILE    =               BT_TYPE(8),
    BT_TIME_T  =               BT_TYPE(9),
} base_type_e;

typedef enum
{
    TYPE_KIND_BASE,
    TYPE_KIND_STRUCT,
    TYPE_KIND_UNION,
    TYPE_KIND_POINTER,
    TYPE_KIND_ARRAY,
    TYPE_KIND_FUNCTION,
} type_kind_e;

typedef struct decl_s *decl_p;

typedef struct type_s *type_p;
struct type_s
{
    type_kind_e kind;
    base_type_e base_type;
    int size;
    int nr_members;  // TYPE_KIND_STRUCT or TYPE_KIND_UNION
    type_p *members;
    int nr_decls;    // TYPE_KIND_FUNCTION
    decl_p *decls;
    int nr_elems;    // TYPE_KIND_ARRAY
    decl_p typedef_decl;
};

type_p new_type(type_kind_e kind, int size, int nr_members)
{
    type_p type = (type_p)malloc(sizeof(struct type_s));
    type->kind = kind;
    type->base_type = 0;
    type->size = size;
    type->nr_members = nr_members;
    if (nr_members > 0)
    {
        type->members = (type_p*)malloc(nr_members * sizeof(type_p));
        for (int i = 0; i < nr_members; i++)
            type->members[i] = NULL;
    }
    else
        type->members = NULL;
    type->nr_decls = 0;
    type->decls = NULL;
    type->nr_elems = 0;
    type->typedef_decl = NULL;
    return type;
}

bool type_is_integer(type_p type)
{
    return type != NULL && type->kind == TYPE_KIND_BASE && (type->base_type & 1) == 1;
}

bool type_is_signed_integer(type_p type)
{
    return type != NULL && type->kind == TYPE_KIND_BASE && (type->base_type & 3) == 3;
}

bool type_is_pointer(type_p type)
{
    return type != NULL && (type->kind == TYPE_KIND_POINTER || type->kind == TYPE_KIND_ARRAY);
}

void type_set_decls(type_p type, int nr_decls, decl_p* decls)
{
    if (nr_decls >= type->nr_decls)
    {
        type->nr_decls = nr_decls;
        type->decls = (decl_p*)malloc(nr_decls * sizeof(decl_p));
    }
    for (int i = 0; i < nr_decls; i++)
        type->decls[i] = decls[i];
}

type_p base_type_void = NULL;
type_p base_type_S8 = NULL;
type_p base_type_U8 = NULL;
type_p base_type_S16 = NULL;
type_p base_type_U16 = NULL;
type_p base_type_S32 = NULL;
type_p base_type_U32 = NULL;
type_p base_type_S64 = NULL;
type_p base_type_U64 = NULL;
type_p base_type_float = NULL;
type_p base_type_double = NULL;
type_p base_type_jmp_buf = NULL;
type_p base_type_file = NULL;
type_p base_type_time_t = NULL;
type_p base_type_bool = NULL;
type_p type_char_ptr = NULL;

type_p new_base_type(base_type_e base)
{
    int size = 4;
    switch (BT_GET_TYPE(base))
    {
        case  1: size = 1; break;
        case  2: size = 2; break;
        case  3: size = 4; break;
        case  4: size = 4; break; // Map int 64 to int 32
        case  5: size = 4; break; // Map float to int 32
        case  6: size = 4; break; // Map float to int 32
    }
    type_p type = new_type(TYPE_KIND_BASE, size, 0);
    type->base_type = base;
    return type;
}

void define_base_types(void)
{
    base_type_void = new_base_type(BT_VOID);
    base_type_S8 = new_base_type(BT_S8);
    base_type_U8 = new_base_type(BT_U8);
    base_type_S16 = new_base_type(BT_S16);
    base_type_U16 = new_base_type(BT_U16);
    base_type_S32 = new_base_type(BT_S32);
    base_type_U32 = new_base_type(BT_U32);
    base_type_S64 = new_base_type(BT_S64);
    base_type_U64 = new_base_type(BT_U64);
    base_type_float = new_base_type(BT_F);
    base_type_double = new_base_type(BT_DF);
    base_type_jmp_buf = new_base_type(BT_JMP_BUF);
    base_type_file = new_base_type(BT_FILE);
    base_type_time_t = new_base_type(BT_TIME_T);
    base_type_bool = new_base_type(BT_U32);
    type_char_ptr = new_type(TYPE_KIND_POINTER, 4, 1);
    type_char_ptr->members[0] = base_type_S8;
}

type_p base_signed_type(type_p int_type)
{
    if (int_type == base_type_U8)
        return base_type_S8;
    if (int_type == base_type_U16)
        return base_type_S16;
    if (int_type == base_type_U32)
        return base_type_S32;
    if (int_type == base_type_U64)
        return base_type_S64;
    return int_type;
}

// Expressions

#define LOCATION_IN_EXPR 

// The expression kind uses the token type or one of the following:

#define OPER_POST_INC    2000
#define OPER_POST_DEC    2001
#define OPER_PRE_INC     2002
#define OPER_PRE_DEC     2003
#define OPER_PLUS        2004
#define OPER_MIN         2005
#define OPER_STAR        2006
#define OPER_ADDR        2007

typedef struct expr_s *expr_p;
struct expr_s
{
    int kind;
    int int_val;
    char *str_val;
    type_p type;
#ifdef LOCATION_IN_EXPR
    const char *filename;
    int line;
    int column;
#endif
    int nr_children;
    expr_p children[0];
};

char token_it_pos_buffer[101];

const char *token_it_pos(void)
{
    snprintf(token_it_pos_buffer, 100, "%s: %d.%d", token_it->filename, token_it->line, token_it->column);
    token_it_pos_buffer[100] = '\0';
    return token_it_pos_buffer;
}

#ifdef LOCATION_IN_EXPR
const char *filename_for_expr;
int line_for_expr;
int column_for_expr;

void store_pos_for_expr(void)
{
    filename_for_expr = token_it->filename;
    line_for_expr = token_it->line;
    column_for_expr = token_it->column;
}

static char expr_pos_buffer[101];

const char *expr_pos(expr_p expr)
{
    if (expr->kind > ' ' && expr->kind < 127)
        snprintf(expr_pos_buffer, 100, "%s: %d.%d expr '%c ", expr->filename, expr->line, expr->column, expr->kind);
    else
        snprintf(expr_pos_buffer, 100, "%s: %d.%d expr %d ", expr->filename, expr->line, expr->column, expr->kind);
    expr_pos_buffer[100] = '\0';
    return expr_pos_buffer;
}
#else
void store_pos_for_expr(void) {}
const char *expr_pos(expr_p expr) {
    static char buffer[101];
    if (expr->kind > ' ' && expr->kind < 127)
        snprintf(buffer, 100, "%sexpr '%c ", token_pos(), expr->kind);
    else
        snprintf(buffer, 100, "%s expr %d ", token_pos(), expr->kind);
    buffer[100] = '\0';
    return buffer;
}
#endif

expr_p new_expr(int kind, int nr_children)
{
    expr_p expr = (expr_p)malloc(sizeof(struct expr_s) + nr_children * sizeof(expr_p));
    expr->kind = kind;
    expr->int_val = 0;
    expr->str_val = NULL;
    expr->nr_children = nr_children;
    for (int i = 0; i < nr_children; i++)
        expr->children[i] = NULL;
    expr->type = NULL;
#ifdef LOCATION_IN_EXPR
    expr->filename = filename_for_expr;
    expr->line = line_for_expr;
    expr->column = column_for_expr;
#endif
    return expr;
}

expr_p new_expr_int_value(int value)
{
    expr_p expr = new_expr('0', 0);
    expr->int_val = value;
    expr->type = base_type_S32;
    return expr;
}

bool expr_is_pointer_size_gt_1(expr_p expr)
{
    return type_is_pointer(expr->type) && expr->type->members[0]->size > 1;
}

int expr_inc_dec_value(expr_p expr)
{
    return type_is_pointer(expr->type) ? expr->type->members[0]->size : 1;
}

void expr_print(FILE *f, expr_p expr)
{
    if (expr == NULL)
    {
        fprintf(f, "NULL");
        return;
    }
    if (' ' < expr->kind && expr->kind < 127)
        fprintf(f, "%c(", expr->kind);
    else
        fprintf(f, "%d(", expr->kind);
    for (int i = 0; i < expr->nr_children; i++)
    {
        if (i > 0)
            fprintf(f, ", ");
        expr_print(f, expr->children[i]);
    }
    fprintf(f, ")");
}

// Declarations

typedef enum {
    DK_IDENT,
    DK_STRUCT,
    DK_UNION,
    DK_ENUM,
} decl_kind_e;

typedef enum {
    ST_NONE,
    ST_STATIC,
    ST_TYPEDEF,
    ST_CONST,
} storage_type_e;

struct decl_s
{
    decl_kind_e kind;
    char *name;
    type_p type;
    storage_type_e storage_type;
    expr_p value;
    int pos;
    int su_nr;
    decl_p prev;
};

bool trace_decls = FALSE;

decl_p cur_ident_decls = NULL;
decl_p cur_decls = NULL;

decl_p add_decl(decl_kind_e kind, const char *name, type_p type)
{
    if (trace_decls)
    {
        printf("add_decl '%s' %d", name, kind);
        if (type != NULL)
            printf(" Type %d", type->kind);
        printf("\n");
    }
    decl_p decl = (decl_p)malloc(sizeof(struct decl_s));
    decl->kind = kind;
    decl->name = copystr(name);
    decl->type = type;
    decl->storage_type = ST_NONE;
    decl->value = NULL;
    decl->pos = 0;
    decl->su_nr = 0;
    if (kind == DK_IDENT)
    {
        decl->prev = cur_ident_decls;
        cur_ident_decls = decl;
    }
    else
    {
        decl->prev = cur_decls;
        cur_decls = decl;
    }
    return decl;
}

void remove_decl(decl_p decl)
{
    for (decl_p *ref_decl = &cur_decls; *ref_decl != 0; ref_decl = &(*ref_decl)->prev)
        if (*ref_decl == decl)
        {
            *ref_decl = (*ref_decl)->prev;
            break;
        }
}

void add_decl_clone(decl_p decl)
{
    decl_p decl_clone = add_decl(decl->kind, decl->name, decl->type);
    decl_clone->storage_type = decl->storage_type;
}

decl_p find_decl(decl_kind_e kind, char *name)
{
    for (decl_p decls = kind == DK_IDENT ? cur_ident_decls : cur_decls; decls != NULL; decls = decls->prev)
        if (strcmp(decls->name, name) == 0)
            return decls;
    return NULL;
}

decl_p find_or_add_decl(decl_kind_e kind, char *name)
{
    decl_p decl = find_decl(kind, name);
    if (decl != NULL)
        return decl;
    return add_decl(kind, name, NULL);
}

// Labels

typedef struct label_s *label_p;
struct label_s
{
    char *name;
    label_p next;
};

label_p cur_labels = NULL;

label_p find_label(const char *name)
{
    for (label_p label = cur_labels; label != NULL; label = label->next)
        if (strcmp(label->name, name) == 0)
            return label;
    return NULL;
}

label_p find_or_add_label(const char *name)
{
    label_p label = find_label(name);
    if (label != NULL)
        return label;
    label = (label_p)malloc(sizeof(struct label_s));
    label->name = copystr(name);
    label->next = cur_labels;
    cur_labels = label;
    return label;
}

// Eval expression

int expr_eval(expr_p expr)
{
    switch (expr->kind)
    {
        case '0': return expr->int_val;
        case '+': return expr_eval(expr->children[0]) + expr_eval(expr->children[1]);
        case '-': return expr_eval(expr->children[0]) - expr_eval(expr->children[1]);
        case '/': return expr_eval(expr->children[0]) / expr_eval(expr->children[1]);
        case '|': return expr_eval(expr->children[0]) | expr_eval(expr->children[1]);
        case OPER_MIN: return -expr_eval(expr->children[0]);
        case TK_SHL: return expr_eval(expr->children[0]) << expr_eval(expr->children[1]);
        case 'i':
        {
            decl_p expr_decl = find_decl(DK_IDENT, expr->str_val);
            if (   expr_decl->storage_type == ST_CONST
                && type_is_integer(expr_decl->value->type))
                return expr_decl->value->int_val;
            printf("Error: storage type of %s = %d\n", expr->str_val, expr_decl->storage_type);
            break;
        }
    }
    printf("%s Error: expr_eval\n", expr_pos(expr));
    exit(1);
    return 0;
}

// Type functions

type_p expr_type_member(expr_p expr, int nr)
{
    if (expr->type != NULL && nr < expr->type->nr_members)
        return expr->type->members[nr];
    if (expr->kind == 'i')
        printf("%s: Error identifier '%s': ", expr_pos(expr), expr->str_val);
    else
        printf("%s: Error expression: ", expr_pos(expr));
    if (expr->type == NULL)
        printf("Has no type\n");
    else
        printf("Type has no member %d (%d)\n", nr, expr->type->nr_members);
    return NULL;
}

decl_p type_decl(type_p type, const char *name)
{
    for (int i = 0; i < type->nr_decls; i++)
        if (type->decls[i] != NULL && strcmp(type->decls[i]->name, name) == 0)
            return type->decls[i];
    fprintf(stderr, "%s: Error Type %p has no field %s\n", token_it_pos(), type, name);
    return NULL;
}

decl_p expr_type_decl(expr_p expr, const char *name)
{
    if (expr->type != NULL)
    {
        decl_p decl = type_decl(expr->type, name);
        if (decl != NULL)
            return decl;
    }
    printf("%s: Error expression: ", expr_pos(expr));
    if (expr->type == NULL)
        printf("Has no type\n");
    else
    {
        printf("Type %p has no field %s\n", expr->type, name);
    }
    return NULL;
}

// Code generation forward declarations

void gen_start_struct_or_union(void);
void gen_struct_or_union_member(decl_p decl);
void gen_variable_decl(decl_p decl);
void gen_function_start(decl_p decl);
void gen_function_end(void);
void gen_stats_open(void);
void gen_stats_close(void);
void gen_stat_expr(expr_p expr);
void gen_expr(expr_p expr, bool as_value);
void gen_indent(void);

FILE *fcode = NULL;

// Parse functions

void next_token(void)
{
    store_pos_for_expr();
    token_it = token_it->next(token_it, FALSE);
}

bool accept_term(int kind)
{
    if (token_it->kind == kind)
    {
        next_token();
        return TRUE;
    }
    return FALSE;
}

#define FAIL_FALSE { if (opt_trace_parser) fprintf(stderr, "Fail in %s at %d\n", __func__, __LINE__); return FALSE; }
#define FAIL_NULL  { if (opt_trace_parser) fprintf(stderr, "Fail in %s at %d\n", __func__, __LINE__); return NULL; }

expr_p parse_expr(void);
type_p parse_type_specifier(storage_type_e *ref_storage_type);
expr_p parse_unary_expr(void);

#define MAX_CONST_STRLEN 8000

static char strbuf[MAX_CONST_STRLEN];

/*
    primary_expr 
        : identifier
        | integer
        | char
        | string
        | '(' expr ')'
        .
*/

expr_p parse_primary_expr(void)
{
    if (token_it->kind == 'i')
    {
        decl_p decl = find_decl(DK_IDENT, token_it->token);
        if (decl != NULL && decl->storage_type != ST_TYPEDEF)
        {
            store_pos_for_expr();
            expr_p expr = new_expr('i', 0);
            expr->str_val = copystr(token_it->token);
            expr->type = decl->type;
            if (decl->type == NULL)
                printf("Identifier %s has no type\n", expr->str_val);
            next_token();
            return expr;
        }
    }
    if (token_it->kind == '0')
    {
        store_pos_for_expr();
        expr_p expr = new_expr_int_value(token_it_int_value(token_it));
        int nr_L = 0;
        for (char *s = token_it->token; *s != '\0'; s++)
            if (*s == 'L')
                nr_L++;
        expr->type = nr_L > 1 ? base_type_U64 : base_type_U32;
        next_token();
        return expr;
    }
    if (token_it->kind == '\'')
    {
        store_pos_for_expr();
        expr_p expr = new_expr_int_value(token_it->token[0]);
        expr->type = base_type_S8;
        next_token();
        return expr;
    }
    if (token_it->kind == '"')
    {
        store_pos_for_expr();
        int len = 0;
        while (token_it->kind == '"')
        {
            if (len + token_it->length < MAX_CONST_STRLEN - 1)
                memcpy(strbuf + len, token_it->token, token_it->length);
            len += token_it->length;
            next_token();
        }
        if (len >= MAX_CONST_STRLEN - 1)
        {
            printf("MAX_CONST_STRLEN < %d\n", len + 1);
            exit(1);
        }
        strbuf[len] = '\0';
        expr_p expr = new_expr('"', 0);
        expr->str_val = (char*)malloc(len + 1);
        expr->type = type_char_ptr;
        memcpy(expr->str_val, strbuf, len + 1);
        expr->int_val = len;
        return expr;
    }
    if (accept_term('('))
    {
        type_p type = parse_type_specifier(NULL);
        if (type != NULL)
        {
            if (opt_trace_parser)
                printf("Cast expr\n");
            while (accept_term('*'))
            {
                type_p ptr_type = new_type(TYPE_KIND_POINTER, 4, 1);
                ptr_type->members[0] = type;
                type = ptr_type;
            }
            if (!accept_term(')'))
                FAIL_NULL
            expr_p subj_expr = parse_unary_expr();
            if (subj_expr == NULL)
                FAIL_NULL;
            expr_p expr = new_expr('c', 1);
            expr->children[0] = subj_expr;
            expr->type = type;
            return expr;
        }
        expr_p expr = parse_expr(); 
        if (expr == NULL)
            FAIL_NULL
        if (!accept_term(')'))
            FAIL_NULL
        return expr;
    }
    FAIL_NULL
}

expr_p parse_assignment_expr(void);

/*
    postfix_expr
        : primary_expr
        | postfix_expr '[' expr ']'
        | postfix_expr '(' assignment_expr LIST ')'
        | postfix_expr '.' ident
        | postfix_expr '->' ident
        | postfix_expr '++'
        | postfix_expr '--'
        .
*/

expr_p parse_postfix_expr(void)
{
    expr_p expr = parse_primary_expr();
    if (expr == NULL)
        FAIL_NULL
    for (;;)
    {
        expr_p subj_expr = expr;
        if (accept_term('['))
        {
            expr_p index_expr = parse_expr();
            if (index_expr == NULL)
                FAIL_NULL
            if (!accept_term(']'))
                FAIL_NULL
            expr = new_expr('[', 2);
            expr->children[0] = subj_expr;
            expr->children[1] = index_expr;
            expr->type = expr_type_member(subj_expr, 0);
        }
        else if (accept_term('('))
        {
            int nr_children = 1;
            expr_p children[20];
            children[0] = expr;
            if (token_it->kind != ')')
            {
                do
                {
                    expr_p child = parse_assignment_expr();
                    if (child == NULL)
                        FAIL_NULL
                    children[nr_children++] = child;
                } while (accept_term(','));
            }
            if (!accept_term(')'))
                FAIL_NULL
            expr = new_expr('(', nr_children);
            for (int i = 0; i < nr_children; i++)
                expr->children[i] = children[i];
            expr->type = expr_type_member(subj_expr, 0);
        }
        else if (accept_term('.'))
        {
            if (token_it->kind != 'i')
                FAIL_NULL
            expr = new_expr('.', 1);
            expr->str_val = copystr(token_it->token);
            expr->children[0] = subj_expr;
            decl_p mem_decl = expr_type_decl(subj_expr, token_it->token);
            if (mem_decl != NULL)
            {
                expr->type = mem_decl->type;
                expr->int_val = mem_decl->su_nr;
            }
            next_token();
        }
        else if (accept_term(TK_ARROW))
        {
            if (token_it->kind != 'i')
                FAIL_NULL
            expr = new_expr(TK_ARROW, 1);
            expr->str_val = copystr(token_it->token);
            expr->children[0] = subj_expr;
            if (subj_expr->type != NULL && subj_expr->type->kind == TYPE_KIND_POINTER)
            {
                decl_p mem_decl = type_decl(subj_expr->type->members[0], token_it->token);
                if (mem_decl != NULL)
                {
                    expr->type = mem_decl->type;
                    expr->int_val = mem_decl->su_nr;
                }
            }
            else
                printf("-> does not have pointer type\n");
            next_token();
        }
        else if (accept_term(TK_INC))
        {
            expr = new_expr(OPER_POST_INC, 1);
            expr->children[0] = subj_expr;
            expr->type = subj_expr->type;
        }
        else if (accept_term(TK_DEC))
        {
            expr = new_expr(OPER_POST_DEC, 1);
            expr->children[0] = subj_expr;
            expr->type = subj_expr->type;
        }
        else
            break;
    }
    if (expr->type == NULL) printf("parse_postfix_expr has no type\n");
    return expr;
}

type_p parse_sizeof_type(void);

/*
    unary_expr
        : '++' unary_expr
        | '--' unary_expr
        | '&' cast_expr
        | '*' cast_expr
        | '+' cast_expr
        | '-' cast_expr
        | '~' cast_expr
        | '!' cast_expr
        | 'sizeof' '(' sizeof_type ')'
        | 'sizeof' unary_expr
        | postfix_expr
        .
*/

expr_p parse_unary_expr(void)
{
    if (accept_term(TK_INC))
    {
        expr_p expr = parse_unary_expr();
        if (expr == NULL)
            FAIL_NULL
        expr_p pre_oper_expr = new_expr(OPER_PRE_INC, 1);
        pre_oper_expr->children[0] = expr;
        pre_oper_expr->type = expr->type;
        return pre_oper_expr;
    }
    if (accept_term(TK_DEC))
    {
        expr_p expr = parse_unary_expr();
        if (expr == NULL)
            FAIL_NULL
        expr_p pre_oper_expr = new_expr(OPER_PRE_DEC, 1);
        pre_oper_expr->children[0] = expr;
        pre_oper_expr->type = expr->type;
        return pre_oper_expr;
    }
    if (accept_term('&'))
    {
        expr_p expr = parse_unary_expr();
        if (expr == NULL)
            FAIL_NULL
        expr_p pre_oper_expr = new_expr(OPER_ADDR, 1);
        pre_oper_expr->children[0] = expr;
        pre_oper_expr->type = new_type(TYPE_KIND_POINTER, 4, 1);
        pre_oper_expr->type->members[0] = expr->type;
        return pre_oper_expr;
    }
    if (accept_term('*'))
    {
        expr_p expr = parse_unary_expr();
        if (expr == NULL)
            FAIL_NULL
        expr_p pre_oper_expr = new_expr(OPER_STAR, 1);
        pre_oper_expr->children[0] = expr;
        pre_oper_expr->type = expr_type_member(expr, 0);
        return pre_oper_expr;
    }
    if (accept_term('+'))
    {
        expr_p expr = parse_unary_expr();
        if (expr == NULL)
            FAIL_NULL
        expr_p pre_oper_expr = new_expr(OPER_PLUS, 1);
        pre_oper_expr->children[0] = expr;
        pre_oper_expr->type = expr->type;
        return pre_oper_expr;
    }
    if (accept_term('-'))
    {
        expr_p expr = parse_unary_expr();
        if (expr == NULL)
            FAIL_NULL
        if (expr->kind == '0')
        {
            expr_p neg_num = new_expr_int_value(-expr->int_val);
            neg_num->type = base_signed_type(expr->type);
            return neg_num; 
        }
        expr_p pre_oper_expr = new_expr(OPER_MIN, 1);
        pre_oper_expr->children[0] = expr;
        pre_oper_expr->type = expr->type;
        return pre_oper_expr;
    }
    if (accept_term('~'))
    {
        expr_p expr = parse_unary_expr();
        if (expr == NULL)
            FAIL_NULL
        expr_p pre_oper_expr = new_expr('~', 1);
        pre_oper_expr->children[0] = expr;
        pre_oper_expr->type = expr->type;
        return pre_oper_expr;
    }
    if (accept_term('!'))
    {
        expr_p expr = parse_unary_expr();
        if (expr == NULL)
            FAIL_NULL
        expr_p pre_oper_expr = new_expr('!', 1);
        pre_oper_expr->children[0] = expr;
        pre_oper_expr->type = base_type_bool;
        return pre_oper_expr;
    }
    if (accept_term(TK_SIZEOF))
    {
        type_p type = NULL;
        if (accept_term('('))
        {
            type = parse_sizeof_type();
            if (type == NULL)
            {
                expr_p sizeof_expr = parse_expr();
                if (sizeof_expr == NULL)
                    FAIL_NULL
                type = sizeof_expr->type;
            }
            if (!accept_term(')'))
                FAIL_NULL
        }
        else
        {
            expr_p sizeof_expr = parse_unary_expr();
            if (sizeof_expr == NULL)
                FAIL_NULL
            type = sizeof_expr->type;
        }
        int size = 0;
        if (type == NULL)
            printf("%s Error: sizeof expression has not size\n", token_it_pos());
        else
            size = type->size;
        return new_expr_int_value(size);
    }
    
    return parse_postfix_expr();
}

/*
    sizeof_type
        : 'char'
        | 'int'
        | 'unsigned' ('int') OPT
        | 'double'
        | 'void' ('*') OPT
        | 'struct' ident
        | ident
        | sizeof_type '*'
        .
*/

type_p parse_sizeof_type(void)
{
    type_p type = NULL;
    if (accept_term(TK_CHAR))
        type = base_type_S8;
    else if (accept_term(TK_INT))
        type = base_type_S32;
    else if (accept_term(TK_UNSIGNED))
    {
        if (accept_term(TK_INT))
            type = base_type_U32;
        type = base_type_U32;
    }
    else if (accept_term(TK_DOUBLE))
        type = base_type_double;
    else if (accept_term(TK_VOID))
    {
        if (accept_term('*'))
            type = type_char_ptr; // Missuse char pointer here
    }
    else if (accept_term(TK_STRUCT))
    {
        if (token_it->kind == 'i')
        {
            decl_p decl = find_decl(DK_STRUCT, token_it->token);
            if (decl != NULL && decl->type != NULL)
            {
                type = decl->type;
                next_token();
            }
        }
    }
    else if (token_it->kind == 'i')
    {
        decl_p decl = find_decl(DK_IDENT, token_it->token);
        if (decl != NULL && decl->type != NULL && decl->storage_type == ST_TYPEDEF)
        {
            type = decl->type;
            next_token();
        }
    }
    if (type == NULL)
        return NULL;
    while (accept_term('*'))
        type = type_char_ptr; // Missuse char pointer here
    return type;
}

/*
    cast_expr
        : '(' abstract_declaration ')' cast_expr
        | unary_expr
        .
*/

void expr_dioper_set_type(expr_p expr)
{
    type_p type_lhs = expr->children[0]->type;
    type_p type_rhs = expr->children[1]->type;
    if (type_is_integer(type_lhs) && type_is_integer(type_rhs))
    {
        int size = type_lhs->size > type_rhs->size ? type_lhs->size : type_rhs->size;
        bool signed_int = (((int)type_lhs->base_type | (int)type_lhs->base_type) & 2) == 2;
        if (size == 8)
            expr->type = signed_int ? base_type_S64 : base_type_U64;
        else if (size == 4)
            expr->type = signed_int ? base_type_S32 : base_type_U32;
        else if (size == 2)
            expr->type = signed_int ? base_type_S16 : base_type_U16;
        else
            expr->type = signed_int ? base_type_S8 : base_type_U8;
    }
    else if (type_is_pointer(type_lhs) && type_is_integer(type_rhs))
        expr->type = type_lhs;
    else if (type_is_integer(type_lhs) && type_is_pointer(type_rhs))
        expr->type = type_rhs;
    else if (expr->kind == '-' && type_is_pointer(type_lhs) && type_is_pointer(type_rhs))
        expr->type = base_type_S32;
    if (expr->type == NULL)
    {
        printf("%s: Error dioper expression: Has no type.", expr_pos(expr));
        if (!type_is_integer(type_lhs)) printf(" LHS not an integer %d", type_lhs == NULL ? -1 : type_lhs->kind);
        if (!type_is_integer(type_rhs)) printf(" RHS not an integer %d", type_rhs == NULL ? -1 : type_rhs->kind);
        printf("\n");
    }
}

/*
    l_expr1 : cast_expr (('*' | '/' | '%') cast_expr) SEQ OPT .
*/

expr_p parse_expr1(void)
{
    expr_p expr = parse_unary_expr();
    for (;;)
    {
        int kind = token_it->kind;
        if (accept_term('*') || accept_term('/') || accept_term('%'))
        {
            expr_p lhs = expr;
            expr_p rhs = parse_unary_expr();
            if (rhs == NULL)
                FAIL_NULL
            expr = new_expr(kind, 2);
            expr->children[0] = lhs;
            expr->children[1] = rhs;
            expr_dioper_set_type(expr);
        }
        else
            break;
    }
    
    if (expr != NULL && expr->type == NULL) printf("parse_expr1 has no type\n");
    return expr;
}

/*
    l_expr2 : l_expr1 (('+' | '-') l_expr1) SEQ OPT .
*/

expr_p parse_expr2(void)
{
    expr_p expr = parse_expr1();
    for (;;)
    {
        int kind = token_it->kind;
        if (accept_term('+') || accept_term('-'))
        {
            expr_p lhs = expr;
            expr_p rhs = parse_expr1();
            if (rhs == NULL)
                FAIL_NULL
            expr = new_expr(kind, 2);
            expr->children[0] = lhs;
            expr->children[1] = rhs;
            expr_dioper_set_type(expr);
        }
        else
            break;
    }
    
    return expr;
}

/*
    l_expr3 : l_expr2 (('<<' | '>>') l_expr2) SEQ OPT .
*/

expr_p parse_expr3(void)
{
    expr_p expr = parse_expr2();
    for (;;)
    {
        int kind = token_it->kind;
        if (accept_term(TK_SHL) || accept_term(TK_SHR))
        {
            expr_p lhs = expr;
            expr_p rhs = parse_expr2();
            if (rhs == NULL)
                FAIL_NULL
            expr = new_expr(kind, 2);
            expr->children[0] = lhs;
            expr->children[1] = rhs;
            expr->type = expr->children[0]->type;
        }
        else
            break;
    }
    
    return expr;
}

/*
    l_expr4 : l_expr3 (('<=' | '>=' | '<' | '>' | '==' | '!=') l_expr3) SEQ OPT .
*/

expr_p parse_expr4(void)
{
    expr_p expr = parse_expr3();
    for (;;)
    {
        int kind = token_it->kind;
        if (   accept_term(TK_EQ) || accept_term(TK_NE)
            || accept_term(TK_LE) || accept_term(TK_GE)
            || accept_term('<')   || accept_term('>'))
        {
            expr_p lhs = expr;
            expr_p rhs = parse_expr3();
            if (rhs == NULL)
                FAIL_NULL
            expr = new_expr(kind, 2);
            expr->children[0] = lhs;
            expr->children[1] = rhs;
            expr->type = base_type_bool;
        }
        else
            break;
    }
    
    return expr;
}

/*
    l_expr5 : l_expr4 ('^' l_expr4) SEQ OPT .
*/

expr_p parse_expr5(void)
{
    expr_p expr = parse_expr4();
    while (accept_term('^'))
    {
        expr_p lhs = expr;
        expr_p rhs = parse_expr4();
        if (rhs == NULL)
            FAIL_NULL
        expr = new_expr('^', 2);
        expr->children[0] = lhs;
        expr->children[1] = rhs;
        expr_dioper_set_type(expr);
    }
    
    return expr;
}

/*
    l_expr6 : l_expr5 ('&' l_expr5) SEQ OPT .
*/

expr_p parse_expr6(void)
{
    expr_p expr = parse_expr5();
    while (accept_term('&'))
    {
        expr_p lhs = expr;
        expr_p rhs = parse_expr5();
        if (rhs == NULL)
            FAIL_NULL
        expr = new_expr('&', 2);
        expr->children[0] = lhs;
        expr->children[1] = rhs;
        expr_dioper_set_type(expr);
    }
    
    return expr;
}

/*
    l_expr7 : l_expr6 ('|' l_expr6) SEQ OPT .
*/

expr_p parse_expr7(void)
{
    expr_p expr = parse_expr6();
    while (accept_term('|'))
    {
        expr_p lhs = expr;
        expr_p rhs = parse_expr6();
        if (rhs == NULL)
            FAIL_NULL
        expr = new_expr('|', 2);
        expr->children[0] = lhs;
        expr->children[1] = rhs;
        expr_dioper_set_type(expr);
    }
    
    return expr;
}

/*
    l_expr8 : l_expr7 ('&&' l_expr7) SEQ OPT .
*/

expr_p parse_expr8(void)
{
    expr_p expr = parse_expr7();
    while (accept_term(TK_AND))
    {
        expr_p lhs = expr;
        expr_p rhs = parse_expr7();
        if (rhs == NULL)
            FAIL_NULL
        expr = new_expr(TK_AND, 2);
        expr->children[0] = lhs;
        expr->children[1] = rhs;
        expr->type = base_type_bool;
    }
    
    return expr;
}

/*
    l_expr9 : l_expr8 ('||' l_expr8) SEQ OPT .
*/

expr_p parse_expr9(void)
{
    expr_p expr = parse_expr8();
    while (accept_term(TK_OR))
    {
        expr_p lhs = expr;
        expr_p rhs = parse_expr8();
        if (rhs == NULL)
            FAIL_NULL
        expr = new_expr(TK_OR, 2);
        expr->children[0] = lhs;
        expr->children[1] = rhs;
        expr->type = base_type_bool;
    }
    
    return expr;
}

/*
    conditional_expr
        : l_expr9 '?' l_expr9 ':' conditional_expr
        | l_expr9
        .
*/

expr_p parse_conditional_expr(void)
{
    expr_p expr = parse_expr9();
    if (accept_term('?'))
    {
        expr_p cond_expr = expr;
        expr_p then_expr = parse_expr9();
        if (then_expr == NULL)
            FAIL_NULL
        if (!accept_term(':'))
            FAIL_NULL
        expr_p else_expr = parse_conditional_expr();
        if (else_expr == NULL)
            FAIL_NULL
        expr = new_expr('?', 3);
        expr->children[0] = cond_expr;
        expr->children[1] = then_expr;
        expr->children[2] = else_expr;
        expr->type = then_expr->type;
    }
    
    return expr;
}

/*
    assignment_expr
        : conditional_expr 
          (( '=' | '*=' | '/=' | '%=' | '+=' | '-=' | '<<=' | '>>=' | '&=' | '|=' | '^=')
           assignment_expr
          ) SEQ
        .
*/

expr_p parse_assignment_expr(void)
{
    expr_p expr = parse_conditional_expr();
    if (expr == NULL)
        FAIL_NULL
    for (;;)
    {
        if (token_it->kind == '=' || (token_it->kind >= TK_ASS && token_it->kind < TK_ASS + 127))
        {
            int kind = token_it->kind;
            next_token();
            expr_p lhs = expr;
            expr_p rhs = parse_assignment_expr();
            if (rhs == NULL)
                FAIL_NULL
            expr = new_expr(kind, 2);
            expr->children[0] = lhs;
            expr->children[1] = rhs;
            expr->type = lhs->type;
            //fprintf(fcode, "# %s %d: type of = is %d\n", token_it->filename, token_it->line, expr->type->base_type);
        }
        else
            break;
    }
    
    return expr;
}

/*
    expr : assignment_expr LIST
*/

expr_p parse_expr(void)
{
    expr_p expr = parse_assignment_expr();
    if (expr == NULL)
        FAIL_NULL
    if (accept_term(','))
    {
        int nr_children = 1;
        expr_p children[20];
        children[0] = expr;
        do
        {
            expr_p child = parse_assignment_expr();
            if (child == NULL)
                FAIL_NULL
            children[nr_children++] = child;
        } while (accept_term(','));
        expr = new_expr(',', nr_children);
        for (int i = 0; i < nr_children; i++)
            expr->children[i] = children[i];
        expr->type = expr->children[nr_children-1]->type;
    }
    return expr;
}

bool parse_statements(expr_p continue_expr);
expr_p parse_initializer(void);

typedef struct struct_or_union_constructor_s struct_or_union_constructor_t;
struct struct_or_union_constructor_s
{
    bool is_struct;
    int pos;
    int size;
};

struct_or_union_constructor_t *cur_struct_or_union = NULL;

int save_decl_depth = 0;
bool inside_function = FALSE;
bool inside_argument_list = FALSE;

int round_up_word(int size) { return (size + 3) & ~3; }

int array_element_size(type_p type)
{
    return   type->size == 1 && (type->base_type == BT_S8 || type->base_type == BT_U8)
           ? 1
           : round_up_word(type->size);
}

/*
    array_indexes : expr ']' ('[' array_indexes) OPT .
*/

bool parse_array_indexes(type_p type, type_p *arr_type)
{
    expr_p expr = parse_expr();
    if (expr == NULL)
        return FALSE;
    int nr_elems = expr_eval(expr);
    if (!accept_term(']'))
        FAIL_FALSE
    if (accept_term('['))
    {
        type_p result_type = NULL;
        if (!parse_array_indexes(type, &result_type))
            FAIL_FALSE
        type = result_type;
    }
    (*arr_type) = new_type(TYPE_KIND_ARRAY, nr_elems * type->size, 1);
    (*arr_type)->members[0] = type;
    (*arr_type)->nr_elems = nr_elems;
    (*arr_type)->size = nr_elems * array_element_size(type);
    return TRUE;
}

/*
    declaration
        : ('typedef' | 'extern' | 'inline' | 'static' ) SEQ OPT
          type_specifier
          ( ';'
          | func_declarator '(' declaration LIST (',' '...') OPT ')'
            ( ';'
            | '{' statements '}'
            )
          | ( declarator ( '=' initializer ) OPT ) LIST ";"
          )
        .
    func_declarator
        : '*' OPT SEQ ( ident | '(' '*' ident ')')
        .
    declarator
        : '*' OPT SEQ
          ( ident | '(' '*' ident ')')
          ( ('[' ']') OPT '[' array_indexes ) OPT
        .
*/

bool parse_declaration(bool is_param)
{
    storage_type_e storage_type = ST_NONE;
    for (;;)
    {
        if (accept_term(TK_TYPEDEF))
        {
            storage_type = ST_TYPEDEF;
            if (inside_function)
                fprintf(stderr, "%s: typedef inside function\n", token_it_pos());
        }
        else if (accept_term(TK_EXTERN))
        {
        }
        else if (accept_term(TK_INLINE))
        {
        }
        else if (accept_term(TK_STATIC))
        {
            if (inside_function)
                storage_type = ST_STATIC;
        }
        else
            break;
    }
    type_p type_specifier = parse_type_specifier(&storage_type);
    if (type_specifier == NULL)
        FAIL_FALSE
    if (accept_term(';'))
    {
        if (   cur_struct_or_union != NULL
            && (type_specifier->kind == TYPE_KIND_STRUCT || type_specifier->kind == TYPE_KIND_UNION))
        {
            for (int i = 0; i < type_specifier->nr_decls; i++)
            {
                decl_p decl = type_specifier->decls[i];
                decl_p decl_clone = add_decl(decl->kind, decl->name, decl->type);
                decl_clone->storage_type = decl->storage_type;
                decl_clone->pos = cur_struct_or_union->pos + decl->pos;
            }
            if (cur_struct_or_union->is_struct)
            {
                cur_struct_or_union->pos += round_up_word(type_specifier->size);
                cur_struct_or_union->size = cur_struct_or_union->pos;
            }
            else
            {
                int size = round_up_word(type_specifier->size);
                if (size > cur_struct_or_union->size)
                    cur_struct_or_union->size = size;
            }
        }
        return TRUE;
    }
    do
    {
        type_p type = type_specifier;
        while (accept_term('*'))
        {
            type_p pointer_type = new_type(TYPE_KIND_POINTER, 4, 1);
            pointer_type->members[0] = type;
            type = pointer_type;
        }
        decl_p prev_decl = NULL;
        decl_p decl = NULL;
        bool as_pointer = FALSE;
        if (token_it->kind == 'i')
        {
            if (!inside_function && !inside_argument_list && cur_struct_or_union == NULL)
                prev_decl = find_decl(DK_IDENT, token_it->token);
            decl = add_decl(DK_IDENT, token_it->token, NULL);
            next_token();
        }
        else if (accept_term('('))
        {
            if (accept_term('*'))
            {
                if (token_it->kind == 'i')
                {
                    as_pointer = TRUE;
                    if (!inside_function && !inside_argument_list && cur_struct_or_union == NULL)
                        prev_decl = find_decl(DK_IDENT, token_it->token);
                    decl = add_decl(DK_IDENT, token_it->token, NULL);
                    next_token();
                }
            }

            if (!accept_term(')'))
                FAIL_FALSE
        }
        if (decl != NULL)
        {
            for (;;)
            {
                type_p subj_type = type;
                if (accept_term('('))
                {
                    inside_argument_list = TRUE;
                    cur_labels = NULL;
                    decl_p save_ident_decls = cur_ident_decls;
                    bool var_params = FALSE;
                    do
                    {
                        if (accept_term(TK_DASHES))
                        {
                            var_params = TRUE;
                            break;
                        }
                        if (!parse_declaration(TRUE))
                            FAIL_FALSE;
                    } while (accept_term(','));
                    if (!accept_term(')'))
                        FAIL_FALSE;
                    inside_argument_list = FALSE;
                    type = new_type(TYPE_KIND_FUNCTION, 4, 1);
                    type->members[0] = subj_type;
                    int nr_parameters = 0;
                    for (decl_p decl1 = cur_ident_decls; decl1 != save_ident_decls; decl1 = decl1->prev)
                        nr_parameters++;
                    decl_p parameters[20];
                    int i = nr_parameters;
                    if (var_params)
                    {
                        nr_parameters++;
                        parameters[i] = NULL;
                    }
                    for (decl_p decl1 = cur_ident_decls; decl1 != save_ident_decls; decl1 = decl1->prev)
                        parameters[--i] = decl1;
                    type_set_decls(type, nr_parameters, parameters);
                    decl->type = type;
                    if (accept_term('{'))
                    {
                        inside_function = TRUE;
                        gen_function_start(decl);
                        if (!parse_statements(NULL))
                            FAIL_FALSE
                        if (!accept_term('}'))
                            FAIL_FALSE
                        cur_ident_decls = save_ident_decls;
                        gen_function_end();
                        inside_function = FALSE;
                        return TRUE;
                    }
                    if (!inside_function && cur_struct_or_union == NULL)
                        fprintf(fcode, "void %s ;\n", decl->name);
                    cur_ident_decls = save_ident_decls;
                    break;
                }
                else if (accept_term('['))
                {
                    if (accept_term(']'))
                    {
                        type_p ptr_type = new_type(TYPE_KIND_POINTER, 4, 1);
                        if (accept_term('['))
                        {
                            type_p result_type = NULL;
                            if (!parse_array_indexes(type, &result_type))
                                FAIL_FALSE
                            type = result_type;
                        }
                        ptr_type->members[0] = type;
                        type = ptr_type;
                    }
                    else
                    {
                        type_p result_type = NULL;
                        if (!parse_array_indexes(type, &result_type))
                            FAIL_FALSE
                        type = result_type;
                    }
                }
                else
                    break;
            }
            if (as_pointer)
            {
                type_p ptr_type = new_type(TYPE_KIND_POINTER, 4, 1);
                ptr_type->members[0] = type;
                type = ptr_type;
            }
            if (prev_decl != NULL && type->kind != TYPE_KIND_FUNCTION)
            {
                fprintf(stderr, "%s: Warning: declaration of %s repeated\n", token_it_pos(), decl->name);
                remove_decl(decl);
            }
            decl->type = type;
            decl->storage_type = storage_type;
            if (cur_struct_or_union != NULL)
            {
                decl->pos = cur_struct_or_union->pos;
                if (cur_struct_or_union->is_struct)
                {
                    cur_struct_or_union->pos += round_up_word(type->size);
                    cur_struct_or_union->size = cur_struct_or_union->pos;
                }
                else
                {
                    int size = round_up_word(type->size);
                    if (size > cur_struct_or_union->size)
                        cur_struct_or_union->size = size;
                }
            }
            if (storage_type == ST_TYPEDEF && type->typedef_decl == NULL)
            {
                type->typedef_decl = decl;
                if (   type->kind == TYPE_KIND_STRUCT
                    && (   strcmp(decl->name, "Stab_Sym") == 0
                        || strncmp(decl->name, "Elf32_", 6) == 0
                        || strcmp(decl->name, "ArchiveHeader") == 0
                        || strcmp(decl->name, "ArHdr") == 0))
                {
                    int pos = 0;
                    for (int i = 0; i < type->nr_decls; i++)
                    {
                        type->decls[i]->pos = pos;
                        pos += type->decls[i]->type->size;
                    }
                    if (pos < type->size)
                    {
                        printf("%s Info: %s is 'packed' with size reduced from %d to %d\n", token_it_pos(), decl->name, type->size, pos);
                        type->size = pos;
                        gen_start_struct_or_union();
                        for (int i = 0; i < type->nr_decls; i++)
                            gen_struct_or_union_member(type->decls[i]);
                    }
                }
            }
            if (accept_term('='))
            {
                decl->value = parse_initializer();
                if (!as_pointer && decl->type->kind == TYPE_KIND_POINTER && decl->value != NULL && decl->value->kind == 'l')
                {
                    // Fix type:
                    int nr_elems = decl->value->nr_children;
                    decl->type->kind = TYPE_KIND_ARRAY;
                    decl->type->size = nr_elems * array_element_size(decl->type->members[0]);
                    decl->type->nr_elems = nr_elems;
                }
            }
            if (!is_param && cur_struct_or_union == NULL && decl->storage_type != ST_TYPEDEF && type->kind != TYPE_KIND_FUNCTION)
                gen_variable_decl(decl);
        }
    } while (!is_param && accept_term(','));

    return is_param || accept_term(';');
}

/*
    type_specifier
        : 'const' OPT
          ( 'char' 'const' OPT
          | 'unsigned' ('char' | 'short' | 'long' 'long' OPT | 'int') OPT
          | 'short'
          | 'int'
          | 'long' ('double' | 'long') OPT
          | 'float'
          | 'double'
          | 'void'
          | 'struct' struct_or_union_specifier
          | 'union' struct_or_union_specifier
          | 'enum' enum_specifier
          | ident
          )
        .
*/

type_p parse_struct_or_union_specifier(decl_kind_e decl_kind);
type_p parse_enum_specifier(void);

type_p parse_type_specifier(storage_type_e *ref_storage_type)
{
    if (accept_term(TK_CONST))
    {
        if (ref_storage_type != NULL) *ref_storage_type = ST_CONST;
    }
    if (accept_term(TK_CHAR))
    {
        if (accept_term(TK_CONST))
        {
            if (ref_storage_type != NULL) *ref_storage_type = ST_CONST;
        }
        return base_type_S8;
    }
    if (accept_term(TK_UNSIGNED))
    {
        if (accept_term(TK_CHAR))
        {
            return base_type_U8;
        }
        if (accept_term(TK_SHORT))
        {
            return base_type_U16;
        }
        if (accept_term(TK_LONG))
        {
            if (accept_term(TK_LONG))
            {
                return base_type_U64;
            }
            return base_type_U32;
        }
        if (accept_term(TK_INT))
        {
            return base_type_U32;
        }
        return base_type_U32;
    }
    if (accept_term(TK_SHORT))
    {
        return base_type_U16;
    }
    if (accept_term(TK_INT))
    {
        return base_type_S32;
    }
    if (accept_term(TK_LONG))
    {
        if (accept_term(TK_DOUBLE))
        {
            return base_type_double;
        }
        if (accept_term(TK_LONG))
        {
            return base_type_S64;
        }
        return base_type_S32; 
    }
    if (accept_term(TK_FLOAT))
    {
        return base_type_float;
    }
    if (accept_term(TK_DOUBLE))
    {
        return base_type_double;
    }
    if (accept_term(TK_VOID))
    {
        return base_type_void;
    }
    if (accept_term(TK_STRUCT))
    {
        return parse_struct_or_union_specifier(DK_STRUCT);
    }
    if (accept_term(TK_UNION))
    {
        return parse_struct_or_union_specifier(DK_UNION);
    }
    if (accept_term(TK_ENUM))
    {
        return parse_enum_specifier();
    }
    if (token_it->kind == 'i')
    {
        decl_p decl = find_decl(DK_IDENT, token_it->token);
        if (decl == NULL)
        {
            if (opt_trace_parser)
                printf("Ident %s has no declaration\n", token_it->token);
            FAIL_NULL
        }
        if (decl->type == NULL)
            FAIL_NULL
        if (decl->storage_type == ST_TYPEDEF)
        {
            if (opt_trace_parser)
                printf("Ident %s is typedef\n", decl->name);
            next_token();
            return decl->type;
        }
        else
        {
            if (opt_trace_parser)
                printf("Ident %s is not a typedef\n", token_it->token);
            FAIL_NULL
        }
    }
    FAIL_NULL
}

/*
    struct_or_union_specifier : ident OPT ('{' declaration SEQ OPT "}") OPT .
*/

type_p parse_struct_or_union_specifier(decl_kind_e decl_kind)
{
    type_kind_e type_kind = decl_kind == DK_STRUCT ? TYPE_KIND_STRUCT : TYPE_KIND_UNION;
    type_p type = NULL;
    if (token_it->kind == 'i')
    {
        decl_p decl = find_or_add_decl(decl_kind, token_it->token);
        if (decl->type == NULL)
        {
            decl->type = new_type(type_kind, 0, 0);
        }
        type = decl->type;
        next_token();
    }
    if (accept_term('{'))
    {
        struct_or_union_constructor_t *parent = cur_struct_or_union;
        struct_or_union_constructor_t this_struct_or_union;
        this_struct_or_union.is_struct = decl_kind == DK_STRUCT;
        this_struct_or_union.pos = 0;
        this_struct_or_union.size = 0;
        cur_struct_or_union = &this_struct_or_union;
        decl_p save_ident_decls = cur_ident_decls;
        do
        {
            if (!parse_declaration(FALSE))
                FAIL_NULL
        } while (!accept_term('}'));
        int nr_decls = 0;
        for (decl_p decl1 = cur_ident_decls; decl1 != save_ident_decls; decl1 = decl1->prev)
            nr_decls++;
        if (type == NULL)
        {
            type = new_type(type_kind, this_struct_or_union.size, 0);
        }
        else
            type->size = this_struct_or_union.size;
        decl_p decls[200];
        int i = nr_decls;
        for (decl_p decl1 = cur_ident_decls; decl1 != save_ident_decls; decl1 = decl1->prev)
            decls[--i] = decl1;
        {
            gen_start_struct_or_union();
            for (int i = 0; i < nr_decls; i++)
                gen_struct_or_union_member(decls[i]);
        }
        type_set_decls(type, nr_decls, decls);
        cur_ident_decls = save_ident_decls;
        cur_struct_or_union = parent;
    }
    return type;
}

/*
    enum_specifier : ident OPT ('{' ident ('=' constant_expr) OPT ) LIST '}') OPT .
*/

void gen_enum_decl(decl_p decl);

type_p parse_enum_specifier(void)
{
    type_p type = NULL;
    if (token_it->kind == 'i')
    {
        decl_p decl = find_or_add_decl(DK_ENUM, token_it->token);
        if (decl->type == NULL)
        {
            decl->type = new_type(DK_ENUM, 4, 0);
        }
        type = decl->type;
        next_token();
    }
    int next_enum_val = 0;
    if (accept_term('{'))
    {
        for (;;)
        {
            if (token_it->kind != 'i')
                FAIL_NULL
            decl_p const_decl = add_decl(DK_IDENT, token_it->token, base_type_S32);
            next_token();
            if (accept_term('='))
            {
                expr_p expr = parse_conditional_expr();
                if (expr == NULL)
                    FAIL_NULL
                next_enum_val = expr_eval(expr);
            }
            const_decl->value = new_expr_int_value(next_enum_val);
            const_decl->storage_type = ST_CONST;
            gen_enum_decl(const_decl);
            next_enum_val++;
            if (!accept_term(','))
                break;
            if (token_it->kind == '}')
                break;
        }
        if (!accept_term('}'))
            FAIL_NULL
    }
    if (type == NULL)
        type = new_type(DK_ENUM, 4, 0);
    return type;
}

/*
    initializer
        : '{' initializer LIST OPT ',' OPT '}'
        | assignment_expr
        .
*/

expr_p parse_initializer(void)
{
    if (accept_term('{'))
    {
        expr_p exprs[2000];
        int nr_exprs = 0;
        for (;;)
        {
            exprs[nr_exprs++] = parse_initializer();
            if (!accept_term(','))
                break;
            if (token_it->kind == '}')
                break;
        }
        if (!accept_term('}'))
            FAIL_NULL
        expr_p expr_list = new_expr('l', nr_exprs);
        for (int i = 0; i < nr_exprs; i++)
            expr_list->children[i] = exprs[i];
        return expr_list;
    }
    return parse_assignment_expr();
}

bool add_tracing = FALSE;

/*
    statement
        : (ident ':') SEQ OPT
          ( 'if' '(' expr ')' statement ('else' statement) OPT
          | 'while' '(' expr ')' statement
          | 'do' statement 'while' '(' expr ')' ';'
          | 'for' '(' (declaration | expr ';') expr ';' expr ')' statement
          | 'break' ';'
          | 'continue' ';'
          | 'switch' '(' expr ')' '{'
             ( ( 'case' expr ':' | 'default' ':') SEQ statement SEQ ) SEQ '}'
          | 'return' expr OPT ';'
          | 'goto' ident ';'
          | '{' statements '}'
          | expr ';'
          )
        .
*/

int default_case_nr = 0;
int fall_through_case_nr = 0;
bool label_statement = FALSE;

bool parse_statement(bool in_block, expr_p continue_expr)
{
    for (;;)
    {
        if (token_it->kind == 'i')
        {
            label_p label = find_label(token_it->token);
            if (label == NULL && find_decl(DK_IDENT, token_it->token) == NULL)
                label = find_or_add_label(token_it->token);
            if (label != NULL)
            {
                label_statement = TRUE;
                gen_indent();
                fprintf(fcode, ":%s\n", label->name);
                next_token();
                if (!accept_term(':'))
                    FAIL_FALSE
                continue;
            }
        }
        break;
    }
    fprintf(fcode, "# %s %d\n", token_it->filename, token_it->line);
    if (accept_term(TK_IF))
    {
        if (!accept_term('('))
            FAIL_FALSE
        expr_p cond = parse_expr();
        if (cond == NULL)
            FAIL_FALSE
        if (!accept_term(')'))
            FAIL_FALSE
        gen_indent();
        gen_expr(cond, TRUE);
        fprintf(fcode, "if\n");
        gen_stats_open();
        if (!parse_statement(TRUE, continue_expr))
            FAIL_FALSE
        gen_stats_close();
        if (accept_term(TK_ELSE))
        {
            gen_indent();
            fprintf(fcode, "else\n");
            gen_stats_open();
            if (!parse_statement(TRUE, continue_expr))
                FAIL_FALSE
            gen_stats_close();
        }
        return TRUE;
    }
    if (accept_term(TK_WHILE))
    {
        gen_indent();
        fprintf(fcode, "do\n");
        gen_stats_open();
        if (!accept_term('('))
            FAIL_FALSE
        expr_p cond = parse_expr();
        if (cond == NULL)
            FAIL_FALSE
        if (!accept_term(')'))
            FAIL_FALSE
        gen_indent();
        gen_expr(cond, TRUE);
        fprintf(fcode, "! if { break }\n");
        if (!parse_statement(TRUE, NULL))
            FAIL_FALSE
        gen_stats_close();
        return TRUE;
    }
    if (accept_term(TK_DO))
    {
        gen_indent();
        fprintf(fcode, "do\n");
        gen_stats_open();
        if (!parse_statement(TRUE, NULL))
            FAIL_FALSE
        if (!accept_term(TK_WHILE))
            FAIL_FALSE
        if (!accept_term('('))
            FAIL_FALSE
        expr_p cond = parse_expr(); 
        if (cond == NULL)
            FAIL_FALSE
        if (!accept_term(')'))
            FAIL_FALSE
        if (!accept_term(';'))
            FAIL_FALSE
        gen_indent();
        gen_expr(cond, TRUE);
        fprintf(fcode, "! if { break }\n");
        gen_stats_close();
        return TRUE;
    }
    if (accept_term(TK_FOR))
    {
        gen_stats_open();
        decl_p save_ident_decls = cur_ident_decls;
        if (!accept_term('('))
            FAIL_FALSE
        if (!parse_declaration(FALSE))
        {
            expr_p init_expr = parse_expr();
            gen_stat_expr(init_expr);
            if (!accept_term(';'))
                FAIL_FALSE
        }
        gen_indent();
        fprintf(fcode, "do\n");
        gen_stats_open();
        expr_p cond = parse_expr();
        if (cond != 0)
        {
            gen_indent();
            gen_expr(cond, TRUE);
            fprintf(fcode, "! if { break }\n");
        }
        if (!accept_term(';'))
            FAIL_FALSE
        expr_p next_expr = parse_expr();
        if (!accept_term(')'))
            FAIL_FALSE
        if (!parse_statement(TRUE, next_expr))
            FAIL_FALSE
        gen_stat_expr(next_expr);
        cur_ident_decls = save_ident_decls;
        gen_stats_close();
        gen_stats_close();
        return TRUE;
    }
    if (accept_term(TK_BREAK))
    {
        if (!accept_term(';'))
            FAIL_FALSE
        gen_indent();
        fprintf(fcode, "break\n");
        return TRUE;
    }
    if (accept_term(TK_CONTINUE))
    {
        if (!accept_term(';'))
            FAIL_FALSE
        gen_stat_expr(continue_expr);
        gen_indent();
        fprintf(fcode, "continue\n");
        return TRUE;
    }
    if (accept_term(TK_SWITCH))
    {
        if (!accept_term('('))
            FAIL_FALSE
        expr_p switch_expr = parse_expr();
        if (switch_expr == NULL)
            FAIL_FALSE
        if (!accept_term(')'))
            FAIL_FALSE
        if (!accept_term('{'))
            FAIL_FALSE
        gen_indent();
        gen_expr(switch_expr, TRUE);
        fprintf(fcode, "do\n");
        gen_stats_open();
        bool fall_through = FALSE;
        bool has_default = FALSE;
        while (token_it->kind == TK_CASE || token_it->kind == TK_DEFAULT)
        {
            int case_labels[100];
            int nr_case_labels = 0;
            bool default_case = FALSE;
            for (;;)
            {
                if (accept_term(TK_CASE))
                {
                    expr_p expr = parse_expr(); 
                    if (expr == NULL)
                        FAIL_FALSE
                    if (!accept_term(':'))
                        FAIL_FALSE
                    if (nr_case_labels < 100)
                        case_labels[nr_case_labels++] = expr_eval(expr);
                    else
                        printf("Error: more than 50 case label\n");
                }
                else if (accept_term(TK_DEFAULT))
                {
                    if (!accept_term(':'))
                        FAIL_FALSE
                    default_case = TRUE;
                    has_default = TRUE;
                }
                else
                    break;
            }
            if (nr_case_labels == 0)
            {
                gen_indent();
                fprintf(fcode, "0 ");
            }
            else
            {
                for (int i = 0; i < nr_case_labels; i++)
                {
                    gen_indent();
                    if (i > 0)
                    {
                        fprintf(fcode, "|| { ");
                    }
                    //gen_expr(switch_expr, TRUE);
                    fprintf(fcode, "$ %u == ", case_labels[i]);
                    if (i + 1 < nr_case_labels)
                        fprintf(fcode, "\n");
                }
                for (int i = 1; i < nr_case_labels; i++)
                    fprintf(fcode, "} ");
                if (nr_case_labels > 1)
                    fprintf(fcode, " ");
            }
            fprintf(fcode, "if\n");
            gen_stats_open();
            if (nr_case_labels > 0)
            {
                gen_indent();
                fprintf(fcode, ";\n");
            }
            if (fall_through)
            {
                gen_indent();
                fprintf(fcode, ":_fall_through_case_%d\n", fall_through_case_nr);
            }
            if (default_case)
            {
                gen_indent();
                fprintf(fcode, ":_default_case_%d\n", default_case_nr);
            }

            bool has_break = FALSE;
            for (bool go = TRUE; go;)
            {
                if (token_it->kind == TK_BREAK || token_it->kind == TK_RETURN || token_it->kind == TK_GOTO)
                    has_break = TRUE;
                label_statement = FALSE;
                go = parse_statement(FALSE, continue_expr);
                if (label_statement)
                    has_break = FALSE;
            }
            if (token_it->kind == '}' && !has_break)
            {
                gen_indent();
                fprintf(fcode, "break\n");
                has_break = TRUE;
            }
            fall_through = !has_break;
            if (fall_through)
            {
                fall_through_case_nr++;
                gen_indent();
                fprintf(fcode, "goto _fall_through_case_%d\n", fall_through_case_nr);
            }
            gen_stats_close();
        }
        if (!accept_term('}'))
            FAIL_FALSE
        gen_indent();
        if (has_default)
        {
            fprintf(fcode, "; goto _default_case_%d\n", default_case_nr);
            default_case_nr++;
        }
        else
            fprintf(fcode, "; break\n");
        gen_stats_close();
        return TRUE;
    }
    if (accept_term(TK_RETURN))
    {
        gen_indent();
        expr_p ret_value = parse_expr();
        if (ret_value != NULL)
            gen_expr(ret_value, TRUE);
        else
            fprintf(fcode, "0 ");
        if (add_tracing)
            fprintf(fcode, "\"Exit\\n\" stdout ? fputs () ; \n");
        fprintf(fcode, "return\n");
        if (!accept_term(';'))
            FAIL_FALSE
        return TRUE;
    }
    if (accept_term(TK_GOTO))
    {
        find_or_add_label(token_it->token);
        gen_indent();
        fprintf(fcode, "goto %s\n", token_it->token);
        next_token();
        if (!accept_term(';'))
            FAIL_FALSE
        return TRUE;
    }
    if (accept_term('{'))
    {
        if (!in_block)
            gen_stats_open();
        if (!parse_statements(continue_expr))
            FAIL_FALSE;
        if (!accept_term('}'))
            FAIL_FALSE
        if (!in_block)
            gen_stats_close();
        return TRUE;
    }
    expr_p expr = parse_expr();
    gen_stat_expr(expr);
    if (!accept_term(';'))
        FAIL_FALSE
    return TRUE;
}

/*
    statements : (declaration | statement) SEQ OPT .
*/

bool parse_statements(expr_p continue_expr)
{
    decl_p save_ident_decls = cur_ident_decls;
    do
    {
    } while (token_it->kind != '}' && (parse_declaration(FALSE) || parse_statement(FALSE, continue_expr)));
    cur_ident_decls = save_ident_decls;
    return TRUE;
}



void add_base_type(const char *name, type_p base_type)
{
    add_decl(DK_IDENT, name, base_type);
    cur_ident_decls->storage_type = ST_TYPEDEF;
}

void add_function(const char *name, type_p result_type)
{
    type_p type = new_type(TYPE_KIND_FUNCTION, 4, 1);
    type->members[0] = result_type;
    add_decl(DK_IDENT, name, type);
}

void add_predefined_types(void)
{
    add_base_type("uint32_t", base_type_U32);
    add_base_type("int32_t", base_type_S32);
    add_base_type("uint16_t", base_type_U16);
    add_base_type("uint8_t", base_type_U8);
    add_base_type("int8_t", base_type_S8);
    add_base_type("size_t", base_type_U32);
    // Need to verify the following:
    add_base_type("ssize_t", base_type_U32);
    add_base_type("jmp_buf", base_type_jmp_buf);
}

bool parse_file(const char *input_filename, bool only_preprocess)
{
    strcpy(include_path, input_filename);
    end_include_prefix = include_path;
    for (char *s = include_path; *s != '\0'; s++)
        if (*s == '/')
            end_include_prefix = s + 1;

    file_iterator_p input_it = new_file_iterator(input_filename);
    if (input_it->base.ch == '\0')
    {
        printf("ERROR: Could not open file %s or it was empty\n", input_filename);
        return FALSE;
    }
    line_splice_iterator_p splice_it = new_line_splice_iterator(&input_it->base);
    comment_strip_iterator_p comment_it = new_comment_strip_iterator(&splice_it->base);
    include_iterator_p include_it = new_include_iterator(&comment_it->base);
    tokenizer_p tokenizer_it = new_tokenizer(&include_it->base);
    conditional_iterator_p conditional_it = new_conditional_iterator(include_it, &tokenizer_it->base);
    expand_iterator_p expand_it = new_expand_iterator(&conditional_it->base);
    
    token_it = (token_iterator_p)expand_it;

    token_it = token_it->next(token_it, TRUE);

    if (only_preprocess)
    {
        output_preprocessor("tcc_p.c");
        return TRUE;
    }

    while (parse_declaration(FALSE))
    {
    }

    if (token_it != 0 && token_it->kind != 0)
    {
        printf("Parsed %s till %s:%d.%d: kind:%d token:'%s'\n", input_filename, token_it->filename, token_it->line, token_it->column, token_it->kind, token_it->token);
        return FALSE;
    }
    return TRUE;
}

// Code generation function

int indent = 0;
void gen_indent(void)
{
    for (int i = 0; i < indent; i++)
        fprintf(fcode, "    ");
}

void gen_newline(void)
{
    fprintf(fcode, "\n");
}

int struct_union_nr = 0;

void gen_start_struct_or_union(void)
{
    struct_union_nr++;
}

void gen_enum_decl(decl_p decl)
{
    fprintf(fcode, "int %s\n", decl->name);
}

void gen_struct_or_union_member(decl_p decl)
{
    decl->su_nr = struct_union_nr;
    fprintf(fcode, "const s%d_m_%s %d\n", struct_union_nr, decl->name, decl->pos);
}

void gen_initializer(expr_p expr, type_p type);

void gen_variable_decl(decl_p decl)
{
    gen_indent();
    if (decl->storage_type == ST_STATIC)
        fprintf(fcode, "static ");
    else
        fprintf(fcode, "int ");
    if (decl->type->size > 4)
        fprintf(fcode, "%d ", (decl->type->size + 3) / 4);
    fprintf(fcode, "%s", decl->name);
    if (inside_function && decl->value != 0)
    {
        fprintf(fcode, " %s ", decl->name);
        gen_initializer(decl->value, decl->type);
    }
    fprintf(fcode, "\n");
}

void gen_function_start(decl_p decl)
{
    bool is_main = strcmp(decl->name, "main") == 0;
    if (is_main)
        fprintf(fcode, "void __init_globals__ ;\n");
    type_p type = decl->type;
    if (type->members[0]->size > 4)
        printf("Warning: return type %s has size %d\n", decl->name, type->members[0]->size);
    fprintf(fcode, "void %s\n{\n", decl->name);
    indent++;
    for (int i = type->nr_decls - 1; i >= 0; i--)
    {
        decl_p mem_decl = type->decls[i];
        if (mem_decl == NULL)
        {
            gen_indent();
            fprintf(fcode, "int __var_args __var_args =:\n");
        }
        else
        {
            if (mem_decl->type->size > 4)
                printf("Warning: argument %s of %s has size %d\n", mem_decl->name, decl->name, mem_decl->type->size);
            gen_indent();
            fprintf(fcode, "int %s %s =:\n", mem_decl->name, mem_decl->name);
        }
    }
    if (is_main)
    {
        gen_indent();
        fprintf(fcode, "__init_globals__ ()\n");
        gen_indent();
        fprintf(fcode, "_sys_env argv ? argc ? 4 * 4 + + = ;\n");
    }
    if (add_tracing)
    {
        gen_indent();
        fprintf(fcode, "\"Enter %s\\n\" stdout ? fputs () ;\n", decl->name);
    }
    inside_function = TRUE;
}

void gen_function_end(void)
{
    inside_function = FALSE;
    indent--;
    fprintf(fcode, "\t");
    if (add_tracing)
        fprintf(fcode, "\"Exit\\n\" stdout ? fputs () ; \n");
    fprintf(fcode, "0 return\n}\n");
}

void gen_stats_open(void)
{
    gen_indent();
    fprintf(fcode, "{\n");
    indent++;
}

void gen_stats_close(void)
{
    indent--;
    gen_indent();
    fprintf(fcode, "}\n");
}

bool is_lvalue(expr_p expr)
{
    return     (   expr->kind == 'i'
                || expr->kind == TK_ARROW
                || expr->kind == '.'
                || expr->kind == '['
                || expr->kind == OPER_STAR)
            && expr->type->kind != TYPE_KIND_ARRAY
            && expr->type->kind != TYPE_KIND_FUNCTION;
}

bool has_error = FALSE;

void expr_print_error(expr_p expr, const char *mesg)
{
    printf("%s %d.%d: Error: %s\n", expr->filename, expr->line, expr->column, mesg);
    for (int i = 0; i < expr->nr_children; i++)
    {
        printf("Operand %d: ", i);
        expr_print(stdout, expr->children[i]);
        printf("\n");
    }
    has_error = TRUE;
}

void gen_expr(expr_p expr, bool as_value)
{
    if (expr == NULL)
        return; // TODO: Warning
    const char *expr_size_ind = expr->type == NULL ? "" : expr->type->size == 1 ? "1" : expr->type->size == 2 ? "2" : "";
    bool multiple = expr->type != NULL && expr->type->size > 4;
    switch (expr->kind) {
        case 'i':
            fprintf(fcode, "%s ", expr->str_val);
            break;
        case '0':
            fprintf(fcode, "%u ", expr->int_val);
            break;
        case '"':
            fprintf(fcode, "\"");
            for (int i = 0; i < expr->int_val; i++)
            {
                const unsigned char ch = expr->str_val[i];
                if (ch == '\0')
                    fprintf(fcode, "\\0");
                else if (ch == '\n')
                    fprintf(fcode, "\\n");
                else if (ch == '\r')
                    fprintf(fcode, "\\r");
                else if (ch == '\t')
                    fprintf(fcode, "\\t");
                else if (ch == '\"' || ch == '\\')
                    fprintf(fcode, "\\%c", ch);
                else if (ch < ' ' || ch >= 127)
                    fprintf(fcode, "\\x%x%x", (ch >> 4) & 0xF, ch & 0xF);
                else
                    fprintf(fcode, "%c", ch);
            }
            fprintf(fcode, "\" ");
            break;
        case 'c': // cast
            gen_expr(expr->children[0], TRUE);
            if (expr->type->kind == TYPE_KIND_BASE)
            {
                switch (expr->type->base_type)
                {
                    case BT_U8: fprintf(fcode, "0xFF & "); break;
                    case BT_S8: fprintf(fcode, "char "); break;
                    case BT_U16: fprintf(fcode, "0xFFFF & "); break;
                    default: break;
                }
            }
            break;
        case ',':
            for (int i = 0; i < expr->nr_children; i++)
            {
                gen_expr(expr->children[i], TRUE);
                if (i < expr->nr_children - 1)
                    fprintf(fcode, "; ");
            }
            break;
        case '!':
        case '~':
            gen_expr(expr->children[0], TRUE);
            fprintf(fcode, "%c ", expr->kind);
            break;
        case TK_SHR:
            if (expr->children[1]->kind == '0' && expr->children[1]->int_val > 31)
            {
                fprintf(fcode, "0 ");
                break;
            }
            // Fall through
        case '+':
        case '-':
        case '*':
        case '^':
        case '&':
        case '|':
        case TK_NE:
        case TK_SHL:
        case TK_EQ:
            gen_expr(expr->children[0], TRUE);
            gen_expr(expr->children[1], TRUE);
            switch (expr->kind)
            {
                case '+':
                    if (expr_is_pointer_size_gt_1(expr->children[0]))
                        fprintf(fcode, "%d * ", expr->children[0]->type->members[0]->size);
                    else if (expr_is_pointer_size_gt_1(expr->children[1]))
                        fprintf(fcode, ">< %d * ", expr->children[1]->type->members[0]->size);
                    fprintf(fcode, "+ ");
                    break;
                case '-':
                    if (type_is_pointer(expr->children[0]->type))
                    {
                        int base_size = expr->children[0]->type->members[0]->size;
                        if (type_is_pointer(expr->children[1]->type))
                        {
                            fprintf(fcode, "-p ");
                            if (base_size > 1)
                                fprintf(fcode, "%d / ", base_size);
                        }
                        else
                        {
                            if (base_size > 1)
                                fprintf(fcode, "%d * ", base_size);
                            fprintf(fcode, "- ");
                        }
                    }
                    else
                        fprintf(fcode, "- ");
                    break;
                case TK_SHL: fprintf(fcode, "<< "); break;
                case TK_SHR: fprintf(fcode, ">> "); break;
                case TK_EQ: fprintf(fcode, "== "); break;
                case TK_NE: fprintf(fcode, "!= "); break;
                default: fprintf(fcode, "%c ", expr->kind); break;
            }
            break;
        case '=':
            gen_expr(expr->children[0], FALSE);
            if (multiple)
            {
                gen_expr(expr->children[1], FALSE);
                fprintf(fcode, "{ int src src =: int trg trg =: ");
                fprintf(fcode, "trg ? src ? ? = ; ");
                for (int i = 4; i < expr->type->size; i += 4)
                    fprintf(fcode, "trg ? %d + src ? %d + ? = ; ", i, i);
                fprintf(fcode, "trg ? } ");
            }
            else
            {
                gen_expr(expr->children[1], TRUE);
                fprintf(fcode, "=%s ", expr_size_ind);
            }
            break;
        case '/':
        case '%':
        case '<':
        case '>':
        case TK_LE:
        case TK_GE:
            gen_expr(expr->children[0], TRUE);
            gen_expr(expr->children[1], TRUE);
            switch (expr->kind)
            {
                case TK_LE: fprintf(fcode, "<="); break;
                case TK_GE: fprintf(fcode, ">="); break;
                default: fprintf(fcode, "%c", expr->kind); break;
            }
            if (   type_is_signed_integer(expr->children[0]->type)
                || type_is_signed_integer(expr->children[1]->type))
                fprintf(fcode, "s");
            fprintf(fcode, " ");
            break;
        case TK_MUL_ASS:
        case TK_DIV_ASS:
        case TK_MOD_ASS:
        case TK_ADD_ASS:
        case TK_SUB_ASS:
        case TK_SHL_ASS:
        case TK_SHR_ASS:
        case TK_XOR_ASS:
        case TK_BAND_ASS:
        case TK_BOR_ASS: 
            if (multiple)
                expr_print_error(expr, "multiple assignment");
            gen_expr(expr->children[0], FALSE);
            fprintf(fcode, "$ ?%s ", expr_size_ind);
            gen_expr(expr->children[1], TRUE);
            if (   (expr->kind == TK_ADD_ASS || expr->kind == TK_SUB_ASS)
                && expr_is_pointer_size_gt_1(expr->children[0]))
                fprintf(fcode, "%d * ", expr->children[0]->type->members[0]->size);
            switch (expr->kind)
            {
                case TK_SHL_ASS: fprintf(fcode, "<<"); break;
                case TK_SHR_ASS: fprintf(fcode, ">>"); break;
                default: fprintf(fcode, "%c", expr->kind - TK_ASS); break;
            }
            if (   (expr->kind == TK_DIV_ASS || expr->kind == TK_MOD_ASS)
                && (   type_is_signed_integer(expr->children[0]->type)
                    || type_is_signed_integer(expr->children[1]->type)))
                fprintf(fcode, "s");
            fprintf(fcode, " =%s ", expr_size_ind);
            break;
        case TK_ARROW:
            gen_expr(expr->children[0], FALSE);
            if (is_lvalue(expr->children[0]))
                fprintf(fcode, "->s%d_m_%s ", expr->int_val, expr->str_val);
            else
                fprintf(fcode, "s%d_m_%s + ", expr->int_val, expr->str_val);
            break;
        case '.':
            gen_expr(expr->children[0], FALSE);
            fprintf(fcode, "s%d_m_%s + ", expr->int_val, expr->str_val);
            break;
        case '[':
            gen_expr(expr->children[0], TRUE);
            gen_expr(expr->children[1], TRUE);
            {
                int elem_size = array_element_size(expr->type);
                if (elem_size > 1)
                    fprintf(fcode, "%d * ", elem_size);
            }
            fprintf(fcode, "+ ");
            break;
        case '(':
            if (   expr->children[0]->kind == 'i' && strcmp(expr->children[0]->str_val, "va_start") == 0
                && expr->nr_children > 1 && expr->children[1]->kind == 'i')
            {
                fprintf(fcode, "%s __var_args ? = ", expr->children[1]->str_val);
            }
            else
            {
                type_p func_type = expr->children[0]->type;
                int nr_decls = func_type->nr_decls;
                bool close_bracket = FALSE;
                if (nr_decls > 0 && func_type->decls[nr_decls - 1] == NULL)
                {
                    for (int i = 1; i < nr_decls; i++)
                        gen_expr(expr->children[i], TRUE);
                    int nr_var_args = expr->nr_children - nr_decls;
                    if (nr_var_args == 0)
                        fprintf(fcode, "0 ");
                    else
                    {
                        fprintf(fcode, "{ int %d __var_args ", nr_var_args);
                        for (int i = 0; i < nr_var_args; i++)
                        {
                            fprintf(fcode, "__var_args ");
                            if (i > 0)
                                fprintf(fcode, "%d + ", i * 4);
                            gen_expr(expr->children[nr_decls + i], TRUE);
                            fprintf(fcode, "= ; ");
                        }
                        fprintf(fcode, "__var_args ");
                        close_bracket = TRUE;
                    }
                }
                else
                {
                    for (int i = 1; i < expr->nr_children; i++)
                        gen_expr(expr->children[i], TRUE);
                }
                gen_expr(expr->children[0], FALSE);
                if (expr->children[0]->type->kind == TYPE_KIND_POINTER)
                    fprintf(fcode, "? ");
                fprintf(fcode, "() ");
                if (close_bracket)
                    fprintf(fcode, "} ");
            }
            break;
        case OPER_POST_INC:
        {
            if (multiple)
                expr_print_error(expr, "multiple post increment");
            gen_expr(expr->children[0], FALSE);
            int size = expr_inc_dec_value(expr->children[0]);
            fprintf(fcode, "$ ?%s %d + =%s %d - ", expr_size_ind, size, expr_size_ind, size);
            break;
        }
        case OPER_POST_DEC:
        {
            if (multiple)
                expr_print_error(expr, "multiple post decrement");
            gen_expr(expr->children[0], FALSE);
            int size = expr_inc_dec_value(expr->children[0]);
            fprintf(fcode, "$ ?%s %d - =%s %d + ", expr_size_ind, size, expr_size_ind, size);
            break;
        }
        case OPER_PRE_INC:
            if (multiple)
                expr_print_error(expr, "multiple pre increment");
            gen_expr(expr->children[0], FALSE);
            fprintf(fcode, "$ ?%s %d + =%s ", expr_size_ind, expr_inc_dec_value(expr->children[0]), expr_size_ind);
            break;
        case OPER_PRE_DEC:
            if (multiple)
                expr_print_error(expr, "multiple pre decrement");
            gen_expr(expr->children[0], FALSE);
            fprintf(fcode, "$ ?%s %d - =%s ", expr_size_ind, expr_inc_dec_value(expr->children[0]), expr_size_ind);
            break;
        case OPER_MIN:
            fprintf(fcode, "0 ");
            gen_expr(expr->children[0], TRUE);
            fprintf(fcode, "- ");
            break;
        case OPER_STAR:
            gen_expr(expr->children[0], TRUE);
            break;
        case OPER_ADDR:
            gen_expr(expr->children[0], FALSE);
            break;
        case TK_OR:
            gen_expr(expr->children[0], TRUE);
            fprintf(fcode, "|| { ");
            gen_expr(expr->children[1], TRUE);
            fprintf(fcode, "} ");
            break;
        case TK_AND:
            gen_expr(expr->children[0], TRUE);
            fprintf(fcode, "&& { ");
            gen_expr(expr->children[1], TRUE);
            fprintf(fcode, "} ");
            break;
        case '?':
            gen_expr(expr->children[0], TRUE);
            fprintf(fcode, "if { ");
            gen_expr(expr->children[1], as_value);
            fprintf(fcode, "} else { ");
            gen_expr(expr->children[2], as_value);
            fprintf(fcode, "} ");
            break;
        case 'l':
            for (int i = 0; i < expr->nr_children; i++)
            {
                gen_expr(expr->children[i], TRUE);
                if (i < expr->nr_children - 1)
                    fprintf(fcode, "; ");
            }
            break;
        default:
            if (expr->kind > ' ' && expr->kind < 127)
                printf("Warning: expr '%c' not implemented yet\n", expr->kind);
            else
                printf("Warning: expr %d not implemented yet\n", expr->kind);
            fprintf(fcode, "$ ");
            break;
    }
    if (as_value && is_lvalue(expr))
    {
        if (multiple)
            expr_print_error(expr, "multiple get value");
        fprintf(fcode, "?%s ", expr_size_ind);
        if (expr->type != NULL && expr->type->base_type == BT_S8)
            fprintf(fcode, "char ");
    }
}

void gen_stat_expr(expr_p expr)
{
    if (expr != NULL)
    {
        gen_indent();
        gen_expr(expr, TRUE);
        fprintf(fcode, ";"); // ignore_value_expr(expr);
        gen_newline();
    }
}

void gen_initializer(expr_p expr, type_p type)
{
    if (expr->kind == 'l')
    {
        if (type->kind == TYPE_KIND_ARRAY)
        {
            for (int i = 0; i < expr->nr_children; i++)
            {
                if (i + 1 < expr->nr_children)
                    fprintf(fcode, "$ ");
                gen_initializer(expr->children[i], type->members[0]);
                if (i + 1 < expr->nr_children)
                {
                    gen_indent();
                    fprintf(fcode, "%u + ", array_element_size(type->members[0]));
                }
            }
        }
        else if (type->kind == TYPE_KIND_STRUCT)
        {
            int pos = 0;
            for (int i = 0; i < expr->nr_children; i++)
            {
                if (i + 1 < expr->nr_children)
                    fprintf(fcode, "$ ");
                gen_initializer(expr->children[i], type->decls[i]->type);
                if (i + 1 < expr->nr_children)
                {
                    gen_indent();
                    int pos_inc = type->decls[i + 1]->pos - pos;
                    fprintf(fcode, "%u + ", pos_inc);
                    pos += pos_inc;
                }
            }
        }
        else
            fprintf(stderr, "%s Error: unfit type %d for initializer\n", token_it_pos(), type->kind);
    }
    else
    {
        gen_expr(expr, TRUE);
        if (expr->type == type_char_ptr && type->kind == TYPE_KIND_ARRAY)
            fprintf(fcode, "%d strncpy () ;\n", type->size);
        else
            fprintf(fcode, "=%s ;\n", type != NULL && type->size == 1 ? "1" : "");
    }
}

void gen_init_globals(void)
{
    fprintf(fcode, "void __init_globals__\n{\n");
    indent++;

    // Reverse the list of declarations
    decl_p next = NULL;
    for (decl_p decl = cur_ident_decls; decl != NULL;)
    {
        decl_p prev = decl->prev;
        decl->prev = next;
        next = decl;
        decl = prev;
    }
    cur_ident_decls = next;

    for (decl_p decl = cur_ident_decls; decl != NULL; decl = decl->prev)
        if (decl->value != NULL)
        {
            gen_indent();
            fprintf(fcode, "%s ", decl->name);
            gen_initializer(decl->value, decl->type);
        }
    
    indent--;
    fprintf(fcode, "    0 return\n}\n");
}

// Main

int main(int argc, char *argv[])
{
    include_path = malloc(100);

    get_env("__TCC_CC__", TRUE);
    define_base_types();
    add_predefined_types();

    fcode = stdout;
    bool only_preprocess = FALSE;

    for (int i = 1; i < argc; i++)
        if (strcmp(argv[i], "-E") == 0)
            only_preprocess = TRUE;
        else if (strcmp(argv[i], "-T") == 0)
            add_tracing = TRUE;
        else if (strcmp(argv[i], "-dp") == 0)
            opt_trace_parser = TRUE;
        else if (strcmp(argv[i], "-D") == 0 && i + 1 < argc)
        {
            i++;
            const char *s = argv[i];
            char name[100];
            int j = 0;
            for (; *s != '\0' && *s != '='; s++)
                if (j < 99)
                    name[j++] = *s;
            name[j] = '\0';
            env_p env = get_env(name, TRUE);
            if (*s == '=')
            {
                s++;
                char value[200];
                j = 0;
                if (*s == '"')
                {
                    s++;
                    for (; *s != '"' && *s != '\0'; s++)
                        if (j < 199)
                            value[j++] = *s;
                    value[j] = '\0';
                    env->tokens = new_str_token(value);
                }
                else
                {
                    for (; '0' <= *s && *s <= '9'; s++)
                        if (j < 199)
                            value[j++] = *s;
                    value[j] = '\0';
                    env->tokens = new_int_token(value);
                }
            }
        }
        else if (i + 1 < argc && strcmp(argv[i],"-o") == 0)
        {   
            fcode = fopen(argv[++i], "w");
            if (fcode == 0)
            {
                fprintf(fcode, "ERROR: Cannot open file '%s' for writing\n", argv[i]);
                return 1;
            }
        }
        else
        {
            if (!parse_file(argv[i], only_preprocess))
                return 1;
        }

    if (has_error)
        return -1;

    if (only_preprocess)
        return 0;

    gen_init_globals();

    return 0;
}

File /src/stack_c.c

Source file is 'src/stack_c.c'.
URL: https://github.com/FransFaase/MES-replacement/blob/64abad6a2a55cbef00ffa065e1c019c6a1932acf/src/stack_c.c
/*  Stack_C: Compiler for Stack C language to i386 Assembly

    This is to adapted to parse output produced by the tcc_cc.c
    C compiler. For that reason, it only uses keywords that are
    also used in C, where the following keywords are used in a
    slightly different way:
    - void: A function definition
    - int: A variable definition (default 32 bits)


    Assembly generation
    - ebp register contains pointer to local variable stack
    - first location of variable stack used for return address function
Notes:
- http://www.unixwiz.net/techtips/x86-jumps.html
- http://ref.x86asm.net/geek.html
- https://www.felixcloutier.com/x86/
- https://faculty.nps.edu/cseagle/assembly/sys_call.html
- https://defuse.ca/online-x86-assembler.htm

*/

#include <stdio.h>
#include <string.h>
#include <malloc.h>

// Constants

#define MAX_TOKEN_LENGTH 8000
#define MAX_NR_VARIABLES 4000
#define MAX_NR_STATICS 10
#define MAX_VARIABLE_LENGTH 50
#define MAX_NESTING 100

// Boolean definition

#define TRUE 1
#define FALSE 0
typedef int bool;

// Global variables

FILE *fin;
FILE *fout;
FILE *ferr;
char cur_char = '\0';
int cur_char_line = 1;
int cur_char_column = 1;

// Read charachter

void read_char(void)
{
    if (feof(fin))
        cur_char = '\0';
    else
    {
        if (cur_char == '\n')
        {
            cur_char_line++;
            cur_char_column = 0;
        }
        cur_char = fgetc(fin);
        if (feof(fin))
            cur_char = '\0';
        else
        {
            cur_char_column++;
            if (cur_char == '\t')
                cur_char_column += 4 - ((cur_char_column - 1) % 4);
        }
    }
}

char sym;
char token[MAX_TOKEN_LENGTH+1];
int token_len = 0;
int int_value;
int cur_line = 0;
int cur_column = 0;

typedef struct
{
    const char *name;
    char sym;
} Mapping;
#define NR_KEYWORDS 12
Mapping keywords[NR_KEYWORDS] = {
    { "void",       'F' },
    { "const",      'C' },
    { "int",        'V' },
    { "do",         'L' },
    { "break",      'B' },
    { "continue",   'D' },
    { "if",         'I' },
    { "else" ,      'E' },
    { "return",     'R' },
    { "goto",       'G' },
    { "static",     'S' },
    { "char",       'K' }
};

#define SYMBOL(X) ('a' + (X))

#define NR_SYMBOLS 23
Mapping symbols[NR_SYMBOLS] = {
#define SYM_REV_ASS SYMBOL(0)
    { "=:",         SYM_REV_ASS },
#define SYM_GET_BYTE SYMBOL(1)
    { "?1",         SYM_GET_BYTE },
#define SYM_GET_WORD SYMBOL(2)
    { "?2",         SYM_GET_WORD },
#define SYM_ASS_BYTE SYMBOL(3)
    { "=1",         SYM_ASS_BYTE },
#define SYM_ASS_WORD SYMBOL(4)
    { "=2",         SYM_ASS_WORD },
#define SYM_CALL SYMBOL(5)
    { "()",         SYM_CALL },
#define SYM_DIV_SIGNED SYMBOL(6)
    { "/s",         SYM_DIV_SIGNED },
#define SYM_MOD_SIGNED SYMBOL(7)
    { "%s",         SYM_MOD_SIGNED },
#define SYM_EQ SYMBOL(8)
    { "==",         SYM_EQ },
#define SYM_NE SYMBOL(9)
    { "!=",         SYM_NE },
#define SYM_LE SYMBOL(10)
    { "<=",         SYM_LE },
#define SYM_GE SYMBOL(11)
    { ">=",         SYM_GE },
#define SYM_LT_SIGNED SYMBOL(12)
    { "<s",         SYM_LT_SIGNED },
#define SYM_LE_SIGNED SYMBOL(13)
    { "<=s",         SYM_LE_SIGNED },
#define SYM_GT_SIGNED SYMBOL(14)
    { ">s",         SYM_GT_SIGNED },
#define SYM_GE_SIGNED SYMBOL(15)
    { ">=s",         SYM_GE_SIGNED },
#define SYM_SHL SYMBOL(16)
    { "<<",         SYM_SHL },
#define SYM_SHR SYMBOL(17)
    { ">>",         SYM_SHR },
#define SYM_LOG_AND SYMBOL(18)
    { "&&",         SYM_LOG_AND },
#define SYM_LOG_OR SYMBOL(19)
    { "||",         SYM_LOG_OR },
#define SYM_ARROW SYMBOL(20)
    { "->",         SYM_ARROW },
#define SYM_SWAP SYMBOL(21)
    { "><",         SYM_SWAP },
#define SYM_SUB_PTRS SYMBOL(22)
    { "-p",         SYM_SUB_PTRS }
};

int error = 0;

void get_token(void)
{
    token_len = 0;
    // Skip white spaces, but echo comments starting with # till end of the line
    while ((cur_char != '\0' && cur_char <= ' ') || cur_char == '#')
    {
        if (cur_char == '#')
        {
            do
            {
                fputc(cur_char, fout);
                read_char();
            }
            while (cur_char != '\0' && cur_char != '\n');
            fputc('\n', fout);
        }
        else
            read_char();
    }

    // Check for end of file
    if (cur_char == '\0')
    {
        sym = '\0';
        return;
    }

    // Store starting position
    cur_line = cur_char_line;
    cur_column = cur_char_column;

    // Check for identifier
    if (('a' <= cur_char && cur_char <= 'z') || ('A' <= cur_char && cur_char <= 'Z') || cur_char == '_')
    {
        sym = 'A';
        do
        {
            token[token_len++] = cur_char;
            read_char();
        }
        while (('a' <= cur_char && cur_char <= 'z') || ('A' <= cur_char && cur_char <= 'Z') || cur_char == '_' || ('0' <= cur_char && cur_char <= '9'));
        token[token_len] = '\0';

        if (token_len > MAX_VARIABLE_LENGTH)
        {
            fprintf(ferr, "ERROR %d: Variable '%s' is longer than %d characters\n", cur_line, token, MAX_VARIABLE_LENGTH);
            error = 1;
            sym = '\0';
            return;
        }

        // Recognize keywords
        for (int i = 0; i < NR_KEYWORDS; i++)
            if (strcmp(keywords[i].name, token) == 0)
            {
                sym = keywords[i].sym;
                break;
            }
        return;
    }

    // Check for character or string
    if (cur_char == '\'' || cur_char == '"')
    {
        sym = cur_char;
        char quote = cur_char;
        for (;;)
        {
            read_char();
            if (cur_char == '\0')
                break;
            if (cur_char == quote)
            {
                read_char();
                break;
            }
            if (token_len > MAX_TOKEN_LENGTH)
            {
                fprintf(ferr, "ERROR %d: String longer than %d characters\n", cur_line, MAX_TOKEN_LENGTH);
                error = 1;
                sym = '\0';
                return;
            }
            if (cur_char == '\\')
            {
                read_char();
                if (cur_char == '0')
                    cur_char = '\0';
                else if (cur_char == 'n')
                    cur_char = '\n';
                else if (cur_char == 'r')
                    cur_char = '\r';
                else if (cur_char == 't')
                    cur_char = '\t';
                else if (cur_char == 'x')
                {
                    read_char();
                    int v = 0;
                    if ('0' <= cur_char && cur_char <= '9')
                        v = 16 * (cur_char - '0');
                    else if ('A' <= cur_char && cur_char <= 'F')
                        v = 16 * (cur_char - 'A' + 10);
                    else if ('a' <= cur_char && cur_char <= 'f')
                        v = 16 * (cur_char - 'a' + 10);
                    else
                        fprintf(ferr, "ERROR %d.%d: Illegal character '%c' after \\x\n", cur_line, cur_column, cur_char);
                    read_char();
                    if ('0' <= cur_char && cur_char <= '9')
                        v += cur_char - '0';
                    else if ('A' <= cur_char && cur_char <= 'F')
                        v += cur_char - 'A' + 10;
                    else if ('a' <= cur_char && cur_char <= 'f')
                        v += cur_char - 'a' + 10;
                    else
                        fprintf(ferr, "ERROR %d.%d: Illegal character '%c' after \\x\n", cur_line, cur_column, cur_char);
                    cur_char = v;
                }
                token[token_len++] = cur_char;
            }
            else
                token[token_len++] = cur_char;
        }
        token[token_len] = '\0';
        return;
    }

    // Check for number or '->' symbol
    if (('0' <= cur_char && cur_char <= '9') || cur_char == '-')
    {
        token[token_len++] = cur_char;
        int sign = 1;
        if (cur_char == '-')
        {
            sign = -1;
            read_char();
            // check of '->' symbol
            if (cur_char == '>')
            {
                sym = SYM_ARROW;
                token[token_len++] = cur_char;
                token[token_len] = '\0';
                read_char();
                return;
            }
            if (cur_char == 'p')
            {
                sym = SYM_SUB_PTRS;
                token[token_len++] = cur_char;
                token[token_len] = '\0';
                read_char();
                return;
            }
            if (cur_char <= ' ')
            {
                sym = '-';
                token[token_len] = '\0';
                return;
            }
        }
        // Check for number
        if ('0' <= cur_char && cur_char <= '9')
        {
            sym = '0';
            int_value = 0;
            if (cur_char == '0')
            {
                read_char();
                if (cur_char == 'x')
                {
                    read_char();
                    // Parse hexadecimal number
                    while (1)
                    {
                        if ('0' <= cur_char && cur_char <= '9')
                            int_value = 16 * int_value + cur_char - '0';
                        else if ('a' <= cur_char && cur_char <= 'f')
                            int_value = 16 * int_value + cur_char - 'a' + 10;
                        else if ('A' <= cur_char && cur_char <= 'F')
                            int_value = 16 * int_value + cur_char - 'A' + 10;
                        else
                            break;
                        read_char();
                    }
                }
                else
                {
                    // Parse octal number
                    while ('0' <= cur_char && cur_char <= '7')
                    {
                        int_value = 8 * int_value + cur_char - '0';
                        read_char();
                    }
                }
            }
            else
            {
                // Parse decimal number
                while ('0' <= cur_char && cur_char <= '9')
                {
                    int_value = 10 * int_value + cur_char - '0';
                    read_char();
                }
            }
            int_value = sign * int_value;
            sprintf(token, "%d", int_value);
            return; 
        }
    }

    // Label start
    if (cur_char == ':')
    {
        sym = ':';
        token[1] = '\0';
        read_char();
        return;
    }

    // Parse symbol till next white space
    sym = ' ';
    do
    {
        token[token_len++] = cur_char;
        read_char();
    }
    while (cur_char > ' ');

    token[token_len] = '\0';
    if (token_len == 1)
        sym = token[0];
    else
        for (int i = 0; i < NR_SYMBOLS; i++)
            if (strcmp(token, symbols[i].name) == 0)
            {
                sym = symbols[i].sym;
                return;
            }
}

// Identifiers

typedef struct
{
    char type;   // 'F': Function, 'C': constant, 'G': global variable, 'L': local variable
    char name[MAX_VARIABLE_LENGTH+1];
    int pos;     // position for local variable
    int size;    // size for variable
    int value;   // value for constant, nr for static
} ident_t;

ident_t idents[MAX_NR_VARIABLES];
int nr_idents = 0;
int pos = 0;

typedef struct
{
    char name[MAX_VARIABLE_LENGTH+1];
    int size;
    /* data */
} static_t;

static_t statics[MAX_NR_STATICS];
int nr_statics;

// String constants

typedef struct string_s *string_p;
struct string_s
{
    char *value;
    int length;
    string_p next;
};
string_p strings = 0;

void save_print_string(FILE *fout, const char *s)
{
    for (; *s != '\0'; s++)
        if (*s == '\n')
            fprintf(fout, "\\n");
        else if (*s == '\t')
            fprintf(fout, "\\t");
        else if (*s == '\\' || *s == '"')
            fprintf(fout, "\\%c", *s);
        else if (*s < ' ')
            fprintf(fout, "?");
        else
            fprintf(fout, "%c", *s);
}

int nr_for_string(const char *s, int length)
{
    //printf("# nr_for_string %s\n", s);
    int nr = 0;
    string_p *ref_string = &strings;
    for (; (*ref_string) != 0; ref_string = &(*ref_string)->next, nr++)
        if ((*ref_string)->length == length && memcmp((*ref_string)->value, s, length) == 0)
            return nr;
    (*ref_string) = (string_p)malloc(sizeof(struct string_s));
    (*ref_string)->value = (char*)malloc(length + 1);
    memcpy((*ref_string)->value, s, length + 1);
    (*ref_string)->length = length;
    (*ref_string)->next = 0;
    return nr;
}

int nesting_depth = 0;
int nesting_nr_vars[MAX_NESTING];
int nesting_pos[MAX_NESTING];
char nesting_type[MAX_NESTING];
int nesting_id[MAX_NESTING];


void add_function(const char *name)
{
    idents[nr_idents].type = 'F';
    strcpy(idents[nr_idents].name, name);
    nr_idents++;
} 

int main(int argc, char *argv[])
{
    ferr = stderr;
    fout = stdout;
    fin = stdin;
    FILE *fintro = NULL;
    
    for (int i = 1; i < argc; i++)
        if (i + 1 < argc && strcmp(argv[i], "-o") == 0)
        {
            fout = fopen(argv[++i], "w");
            if (fout == 0)
            {
                fprintf(ferr, "ERROR: Cannot open file '%s' for writing\n", argv[i]);
                return 1;
            }
        }
        else if (i + 1 < argc && strcmp(argv[i], "-i") == 0)
        {
            fintro = fopen(argv[++i], "r");
            if (fintro == 0)
            {
                fprintf(ferr, "ERROR: Cannot open file '%s' for input\n", argv[i]);
                return 1;
            }
        }
        else
        {
            fin = fopen(argv[i], "r");
            if (fin == 0)
            {
                fprintf(ferr, "ERROR: Cannot open file '%s' for input\n", argv[i]);
                return 1;
            }
        }
    

    // Add predefined system functions
    add_function("sys_int80");
    add_function("sys_malloc");

    // Copy contents of intro file
    if (fintro != 0)
    {
        for (;;)
        {
            cur_char = fgetc(fintro);
            if (feof(fintro))
                break;
            fputc(cur_char, fout);
        }
        fclose(fintro);
    }
    
    int id;

    char function_name[MAX_VARIABLE_LENGTH+1];

    read_char();
    
    get_token();
    while (TRUE)
    {
        if (sym == '\0')
            break;
        
        if (sym == 'F')
        {
            // Function definition
            get_token();
            if (sym != 'A')
            {
                fprintf(ferr, "ERROR %d.%d: Expecting name after 'void' for function\n", cur_line, cur_column);
                return 1;
            }
            // Save the function name
            strcpy(function_name, token);
            // Add it, if is has not been found
            {
                bool found = FALSE;
                for (int i = 0; i < nr_idents; i++)
                    if (strcmp(token, idents[i].name) == 0)
                    {
                        found = TRUE;
                        break;
                    }
                if (!found)
                {
                    if (nr_idents >= MAX_NR_VARIABLES)
                    {
                        fprintf(ferr, "ERROR %d.%d: More than %d variables\n", cur_line, cur_column, MAX_NR_VARIABLES);
                        return 1;
                    }
                    add_function(token);
                }
            }
            get_token();
            if (sym == ';')
            {
                // Forward definition
            }
            else
            {
                pos = 1;
                if (sym != '{')
                {
                    fprintf(ferr, "ERROR %d.%d: Expect ; or { after function name\n", cur_line, cur_column);
                    return 1;
                }
                //printf("start function %s\n", function_name);
                // Copy return address to first location in variable stack
                fprintf(fout, "\n:f_%s\n\tpop_eax\n\tmov_[ebp],eax\n\tpop_eax\n", function_name);
                nesting_type[nesting_depth] = ' ';
                nesting_nr_vars[nesting_depth] = nr_idents;
                nesting_pos[nesting_depth] = pos;
                nesting_depth++;
                id = 1;
            }
        }
        else if (sym == 'C')
        {
            // Constant definition
            get_token();
            if (sym != 'A')
            {
                fprintf(ferr, "ERROR %d.%d: Expecting name after 'const'\n", cur_line, cur_column);
                return 1;
            }
            if (nr_idents >= MAX_NR_VARIABLES)
            {
                fprintf(ferr, "ERROR %d.%d: More than %d variables\n", cur_line, cur_column, MAX_NR_VARIABLES);
                return 1;
            }
            idents[nr_idents].type = 'C';
            strcpy(idents[nr_idents].name, token);
            get_token();
            if (sym != '0')
            {
                fprintf(ferr, "ERROR %d.%d: Expecting number after 'const' <name>\n", cur_line, cur_column);
                return 1;
            }
            idents[nr_idents].value = int_value;
            nr_idents++;
        }
        else if (sym == 'V' || sym == 'S')
        {
            char type = sym == 'S' ? 'S' : nesting_depth == 0 ? 'G' : 'L'; 
            // Variable definition
            get_token();
            int size = 1;
            if (sym == '0')
            {
                size = int_value;
                get_token();
            }
            if (sym != 'A')
            {
                fprintf(ferr, "ERROR %d.%d: Expecting name after 'int'\n", cur_line, cur_column);
                return 1;
            }
            if (nr_idents >= MAX_NR_VARIABLES)
            {
                fprintf(ferr, "ERROR %d.%d: More than %d variables\n", cur_line, cur_column, MAX_NR_VARIABLES);
                return 1;
            }
            if (nr_statics >= MAX_NR_STATICS)
            {
                fprintf(ferr, "ERROR %d.%d: More than %d variables\n", cur_line, cur_column, MAX_NR_STATICS);
                return 1;
            }
            idents[nr_idents].type = type;
            strcpy(idents[nr_idents].name, token);
            idents[nr_idents].size = size;
            if (type == 'S')
            {
                strcpy(statics[nr_statics].name, token);
                statics[nr_statics].size = size;
                idents[nr_idents].value = nr_statics;
                nr_statics++;
            }
            else if (nesting_depth > 0)
            {
                idents[nr_idents].pos = pos;
                pos += size;
            }
            nr_idents++;
        }
        else if (sym == 'L')
        {
            get_token();
            if (sym != '{')
            {
                fprintf(ferr, "ERROR %d.%d: expecting '{' after 'do'\n", cur_line, cur_column);
                return 1;
            }
            fprintf(fout, ":_%s_loop%d\n", function_name, id);
            if (nesting_depth >= MAX_NESTING)
            {
                fprintf(ferr, "ERROR %d.%d: Nesting deeper than %d\n", cur_line, cur_column, MAX_NESTING);
                return 1;
            }
            nesting_type[nesting_depth] = 'L';
            nesting_id[nesting_depth] = id++;
            nesting_nr_vars[nesting_depth] = nr_idents;
            nesting_pos[nesting_depth] = pos;
            nesting_depth++;
        }
        else if (sym == 'B' || sym == 'D')
        {
            int i = nesting_depth - 1;
            for (; i >= 0; i--)
                if (nesting_type[i] == 'L')
                    break;
            if (i < 0)
            {
                fprintf(ferr, "ERROR %d.%d: 'break' outside 'loop'\n", cur_line, cur_column);
                return 1;
            }
            if (sym == 'B')
                fprintf(fout, "\tjmp %%_%s_loop_end%d\n", function_name, nesting_id[i]);
            else
                fprintf(fout, "\tjmp %%_%s_loop%d\n", function_name, nesting_id[i]);
        }
        else if (sym == 'I')
        {
            get_token();
            if (sym != '{')
            {
                fprintf(ferr, "ERROR %d.%d: expecting '{' after 'if'\n", cur_line, cur_column);
                return 1;
            }
            fprintf(fout, "\ttest_eax,eax          # if\n\tpop_eax\n\tje %%_%s_else%d\n", function_name, id);
            if (nesting_depth >= MAX_NESTING)
            {
                fprintf(ferr, "ERROR %d.%d: Nesting deeper than %d\n", cur_line, cur_column, MAX_NESTING);
                return 1;
            }
            nesting_type[nesting_depth] = 'I';
            nesting_id[nesting_depth] = id++;
            nesting_nr_vars[nesting_depth] = nr_idents;
            nesting_pos[nesting_depth] = pos;
            nesting_depth++;
        }
        else if (sym == 'E')
        {
            fprintf(ferr, "ERROR %d.%d: unexpected 'else'\n", cur_line, cur_column);
            return 1;
        }
        else if (sym == '{')
        {
            nesting_type[nesting_depth] = ' ';
            nesting_nr_vars[nesting_depth] = nr_idents;
            nesting_pos[nesting_depth] = pos;
            nesting_depth++;
        }
        else if (sym == '}')
        {
            if (nesting_depth == 0)
            {
                fprintf(ferr, "ERROR %d.%d: To many }\n", cur_line, cur_column);
                return 1;
            }
            nesting_depth--;
            nr_idents = nesting_nr_vars[nesting_depth];
            pos = nesting_pos[nesting_depth];
            if (nesting_type[nesting_depth] == 'L')
                fprintf(fout, "\tjmp %%_%s_loop%d\n:_%s_loop_end%d\n", function_name, nesting_id[nesting_depth], function_name, nesting_id[nesting_depth]);
            else if (nesting_type[nesting_depth] == 'I')
            {
                get_token();
                if (sym == 'E')
                {
                    get_token();
                    if (sym != '{')
                    {
                        fprintf(ferr, "ERROR %d.%d: expecting '{' after 'else'\n", cur_line, cur_column);
                        return 1;
                    }
                    fprintf(fout, "\tjmp %%_%s_else_end%d\n", function_name, nesting_id[nesting_depth]);
                    fprintf(fout, ":_%s_else%d\n", function_name, nesting_id[nesting_depth]);
                    if (nesting_depth >= MAX_NESTING)
                    {
                        fprintf(ferr, "ERROR %d.%d: Nesting deeper than %d\n", cur_line, cur_column, MAX_NESTING);
                        return 1;
                    }
                    nesting_type[nesting_depth] = 'E';
                    nesting_nr_vars[nesting_depth] = nr_idents;
                    nesting_pos[nesting_depth] = pos;
                    nesting_depth++;
                }
                else
                {
                    fprintf(fout, ":_%s_else%d # no else\n", function_name, nesting_id[nesting_depth]);
                    continue; // to skip the call to get_token at the end of the while loop
                }               
            }
            else if (nesting_type[nesting_depth] == 'E')
                fprintf(fout, ":_%s_else_end%d\n", function_name, nesting_id[nesting_depth]);
            else if (nesting_type[nesting_depth] == 'A')
                fprintf(fout, ":_%s_and_end%d\n", function_name, nesting_id[nesting_depth]);
            else if (nesting_type[nesting_depth] == 'O')
                fprintf(fout, ":_%s_or_end%d\n", function_name, nesting_id[nesting_depth]);
        }
        else if (sym == 'R')
        {
            fprintf(fout, "\tmov_ebx,[ebp]         # return\n\tpush_ebx\n\tret\n");
        }
        else if (sym == ';')
        {
            fprintf(fout, "\tpop_eax               # ;\n");
        }
        else if (sym == '$')
        {
            fprintf(fout, "\tpush_eax              # $ (dup)\n");
        }
        else if (sym == 'G')
        {
            get_token();
            if (sym != 'A')
            {
                fprintf(ferr, "ERROR %d.%d: Expecting label after 'goto'\n", cur_line, cur_column);
                return 0;
            }
            fprintf(fout, "\tjmp %%l_%s_%s\n", function_name, token);
        }
        else if (sym == 'A')
        {
            int i = nr_idents - 1;
            for (; i >= 0; i--)
                if (strcmp(token, idents[i].name) == 0)
                    break;
            if (i >= 0)
            {
                //fprintf(fout, "# Ident %s type %c", token, idents[i].type);
                //if (idents[i].type == 'L')
                //  fprintf(fout, "\tpos %d", idents[i].pos);
                //else if (idents[i].type == 'C')
                //  fprintf(fout, "\tvalue %d", idents[i].value);
                //fprintf(fout, "\n");
                if (idents[i].type == 'G')
                    fprintf(fout, "\tpush_eax              # %s (global)\n\tmov_eax, &g_%s\n", token, token);
                else if (idents[i].type == 'F')
                    fprintf(fout, "\tpush_eax              # %s (function)\n\tmov_eax, &f_%s\n", token, token);
                else if (idents[i].type == 'C')
                    fprintf(fout, "\tpush_eax              # %u (const %s)\n\tmov_eax, %%%u\n", idents[i].value, token, idents[i].value);
                else if (idents[i].type == 'L')
                    fprintf(fout, "\tpush_eax              # %s (local)\n\tlea_eax,[ebp+DWORD] %%%d\n", token, 4 * idents[i].pos);
                else if (idents[i].type == 'S')
                    fprintf(fout, "\tpush_eax              # %s (static)\n\tmov_eax, &static_%d_%s\n", token, idents[i].value, token);
            }
            else
            {
                fprintf(ferr, "ERROR %d.%d: Ident %s is not defined\n", cur_line, cur_column, token);
                error = 1;
            }
        }
        else if (sym == '0')
        {
            fprintf(fout, "\tpush_eax              # %u\n\tmov_eax, %%%u\n", int_value, int_value);
        }
        else if (sym == '"')
        {
            int nr = nr_for_string(token, token_len);
            fprintf(fout, "\tpush_eax              # '");
            save_print_string(fout, token);
            fprintf(fout, "'\n\tmov_eax, &string_%d\n", nr);
        }
        else if (sym == '\'')
        {
            if (' ' < token[0] && token[0] < 127)
                fprintf(fout, "\tpush_eax              # '%c'\n\tmov_eax, %%%d\n", token[0], token[0]);
            else
                fprintf(fout, "\tpush_eax              # %d\n\tmov_eax, %%%d\n", token[0], token[0]);
        }
        else if (sym == '?')
        {
            fprintf(fout, "\tmov_eax,[eax]         # ?\n");
        }
        else if (sym == '=')
        {
            fprintf(fout, "\tpop_ebx               # =\n\tmov_[ebx],eax\n");
        }
        else if (sym == '+')
        {
            fprintf(fout, "\tpop_ebx               # +\n\tadd_eax,ebx\n");
        }
        else if (sym == '-' || sym == SYM_SUB_PTRS)
        {
            fprintf(fout, "\tpop_ebx               # -\n\tsub_ebx,eax\n\tmov_eax,ebx\n");
        }
        else if (sym == '*')
        {
            fprintf(fout, "\tpop_ebx               # *\n\tmul_ebx\n");
        }
        else if (sym == '&')
        {
            fprintf(fout, "\tpop_ebx               # &\n\tand_eax,ebx\n");
        }
        else if (sym == '|')
        {
            fprintf(fout, "\tpop_ebx               # |\n\tor_eax,ebx\n");
        }
        else if (sym == '^')
        {
            fprintf(fout, "\tpop_ebx               # ^\n\txor_eax,ebx\n");
        }
        else if (sym == '~')
        {
            fprintf(fout, "\tnot_eax               # ~\n");
        }
        else if (sym == '/')
        {
            fprintf(fout, "\tmov_ebx,eax           # /\n\tpop_eax\n\tmov_edx, %%0\n\tdiv_ebx\n");
        }
        else if (sym == '%')
        {
            fprintf(fout, "\tmov_ebx,eax           # %%\n\tpop_eax\n\tmov_edx, %%0\n\tdiv_ebx\n\tmov_eax,edx\n");
        }
        else if (sym == '<')
        {
            fprintf(fout, "\tpop_ebx               # <\n\tcmp_eax_ebx\n\tsetb_al\n\tmovzx_eax,al\n");
        }
        else if (sym == '>')
        {
            fprintf(fout, "\tpop_ebx               # >\n\tcmp_eax_ebx\n\tseta_al\n\tmovzx_eax,al\n");
        }
        else if (sym == '!')
        {
            fprintf(fout, "\ttest_eax,eax          # !\n\tsete_al\n\tmovzx_eax,al\n");
        }
        else if (sym == ':')
        {
            get_token();
            if (sym != 'A')
            {
                fprintf(ferr, "ERROR %d.%d: Expect identifier after ':", cur_line, cur_column);
                return -1;
            }
            fprintf(fout, ":l_%s_%s\n", function_name, token);
        }
        else if (sym == SYM_REV_ASS)
        {
            fprintf(fout, "\tpop_ebx               # =:\n\tmov_[eax],ebx\n\tpop_eax\n");
        }
        else if (sym == SYM_GET_BYTE)
        {
            fprintf(fout, "\tmov_al,[eax]          # ?1\n\tmovzx_eax,al\n");
        }
        else if (sym == SYM_GET_WORD)
        {
            fprintf(fout, "\tmov_ax,[eax]          # ?2\n\tand_eax, %%65535\n");
        }
        else if (sym == 'K')
        {
            fprintf(fout, "\tmovsx_eax,al          # char\n");
        }
        else if (sym == SYM_ASS_BYTE)
        {
            fprintf(fout, "\tpop_ebx               # =1\n\tmov_[ebx],al\n");
        }
        else if (sym == SYM_ASS_WORD)
        {
            fprintf(fout, "\tpop_ebx               # =2\n\tmov_[ebx],ax\n");
        }
        else if (sym == SYM_CALL)
        {
            //int nr = pos - nesting_nr_vars[0] + 1;
            //printf(" call at %d offset %d\n", pos, nr);
            fprintf(fout, "\tadd_ebp, %%%d         # ()\n\tcall_eax\n\tsub_ebp, %%%d\n", 4 * pos, 4 * pos);
        }
        else if (sym == SYM_DIV_SIGNED)
        {
            fprintf(fout, "\tmov_ebx,eax           # /s\n\tpop_eax\n\tcdq\n\tidiv_ebx\n");
        }
        else if (sym == SYM_MOD_SIGNED)
        {
            fprintf(fout, "\tmov_ebx,eax           # %%s\n\tpop_eax\n\tcdq\n\tidiv_ebx\n\tmov_eax,edx");
        }
        else if (sym == SYM_EQ)
        {
            fprintf(fout, "\tpop_ebx               # ==\n\tcmp_eax_ebx\n\tsete_al\n\tmovzx_eax,al\n");
        }
        else if (sym == SYM_NE)
        {
            fprintf(fout, "\tpop_ebx               # !=\n\tcmp_eax_ebx\n\tsetne_al\n\tmovzx_eax,al\n");
        }
        else if (sym == SYM_LE)
        {
            fprintf(fout, "\tpop_ebx               # <=\n\tcmp_eax_ebx\n\tsetbe_al\n\tmovzx_eax,al\n");
        }
        else if (sym == SYM_GE)
        {
            fprintf(fout, "\tpop_ebx               # >=\n\tcmp_eax_ebx\n\tsetae_al\n\tmovzx_eax,al\n");
        }
        else if (sym == SYM_LT_SIGNED)
        {
            fprintf(fout, "\tpop_ebx               # <s\n\tcmp_eax_ebx\n\tsetl_al\n\tmovzx_eax,al\n");
        }
        else if (sym == SYM_LE_SIGNED)
        {
            fprintf(fout, "\tpop_ebx               # <=s\n\tcmp_eax_ebx\n\tsetle_al\n\tmovzx_eax,al\n");
        }
        else if (sym == SYM_GT_SIGNED)
        {
            fprintf(fout, "\tpop_ebx               # >s\n\tcmp_eax_ebx\n\tsetg_al\n\tmovzx_eax,al\n");
        }
        else if (sym == SYM_GE_SIGNED)
        {
            fprintf(fout, "\tpop_ebx               # >=sfv\n\tcmp_eax_ebx\n\tsetge_al\n\tmovzx_eax,al\n");
        }
        else if (sym == SYM_SHL)
        {
            fprintf(fout, "\tmov_ecx,eax           # <<\n\tpop_eax\n\tshl_eax,cl\n");
        }
        else if (sym == SYM_SHR)
        {
            fprintf(fout, "\tmov_ecx,eax           # >>\n\tpop_eax\n\tshr_eax,cl\n");
        }
        else if (sym == SYM_LOG_AND)
        {
            get_token();
            if (sym != '{')
            {
                fprintf(ferr, "ERROR %d.%d: expecting '{' after '&&'\n", cur_line, cur_column);
                return 1;
            }
            fprintf(fout, "\ttest_eax,eax          # &&\n\tje %%_%s_and_end%d\n\tpop_eax\n", function_name, id);
            if (nesting_depth >= MAX_NESTING)
            {
                fprintf(ferr, "ERROR %d.%d: Nesting deeper than %d\n", cur_line, cur_column, MAX_NESTING);
                return 1;
            }
            nesting_type[nesting_depth] = 'A';
            nesting_id[nesting_depth] = id++;
            nesting_nr_vars[nesting_depth] = nr_idents;
            nesting_pos[nesting_depth] = pos;
            nesting_depth++;
        }
        else if (sym == SYM_LOG_OR)
        {
            get_token();
            if (sym != '{')
            {
                fprintf(ferr, "ERROR %d.%d: expecting '{' after '||'\n", cur_line, cur_column);
                return 1;
            }
            fprintf(fout, "\ttest_eax,eax          # ||\n\tjne %%_%s_or_end%d\n\tpop_eax\n", function_name, id);
            if (nesting_depth >= MAX_NESTING)
            {
                fprintf(ferr, "ERROR %d.%d: Nesting deeper than %d\n", cur_line, cur_column, MAX_NESTING);
                return 1;
            }
            nesting_type[nesting_depth] = 'O';
            nesting_id[nesting_depth] = id++;
            nesting_nr_vars[nesting_depth] = nr_idents;
            nesting_pos[nesting_depth] = pos;
            nesting_depth++;
        }
        else if (sym == SYM_ARROW)
        {
            get_token();
            if (sym != 'A')
            {
                fprintf(ferr, "ERROR %d.%d: Expecting const ident after '->'. Found %s\n", cur_line, cur_column, token);
                return 1;
            }
            int i = nr_idents - 1;
            for (; i >= 0; i--)
                if (strcmp(token, idents[i].name) == 0)
                    break;
            if (i >= 0 && idents[i].type == 'C')
            {
                fprintf(fout, "\tmov_eax,[eax]         # ->\n\tadd_eax, %%%d\n", idents[i].value);
            }
            else
            {
                fprintf(ferr, "ERROR %d: Ident %s is not defined\n", cur_line, token);
                error = 1;
            }
        }
        else if (sym == SYM_SWAP)
        {
            fprintf(fout, "\tmov_ebx,eax          # >< swap\n\tpop_eax\n\tpush_ebx\n");
        }
        else
        {
            fprintf(ferr, "ERROR %d.%d: token |%s| not supported\n", cur_line, cur_column, token);
            error = 1;
        }
        
        get_token();
    }
    
    fprintf(fout, "\n:ELF_data\n\n");
    fprintf(fout, ":SYS_MALLOC NULL\n");
    int nr = 0;
    for (string_p string = strings; string != 0; string = string->next, nr++)
    {
        fprintf(fout, ":string_%d  ", nr);
        bool safe_string = TRUE;
        for (int i = 0; i < string->length; i++)
        {
            char ch = string->value[i];
            if (ch == '"' || ch < ' ')
            {
                safe_string = FALSE;
                break;
            }
        }
        if (safe_string)
            fprintf(fout, "\"%s\"", string->value);
        else
        {
            for (int i = 0; i < string->length; i++)
                fprintf(fout, "!%u%s", string->value[i], i % 20 == 16 ? "\n  " : " ");
            fprintf(fout, "!0");
        }
        fprintf(fout, "\n");
    }
    for (int i = 0; i < nr_idents; i++)
        if (idents[i].type == 'G')
        {
            fprintf(fout, ":g_%s", idents[i].name);
            for (int j = 0; j < idents[i].size; j++)
                fprintf(fout, "%sNULL", j % 8 == 0 ? "\n\t" : " ");
            fprintf(fout, "\n");
        }
    for (int i = 0; i < nr_statics; i++)
    {
        fprintf(fout, ":static_%d_%s", i, statics[i].name);
        for (int j = 0; j < statics[i].size; j++)
            fprintf(fout, "%sNULL", j % 8 == 0 ? "\n\t" : " ");
        fprintf(fout, "\n");
    }
    fprintf(fout, "\n:ELF_end\n");

    fclose(fout);

    return error;
}

File /src/M1.c

Source file is 'src/M1.c'.
URL: https://github.com/FransFaase/MES-replacement/blob/64abad6a2a55cbef00ffa065e1c019c6a1932acf/src/M1.c
#include <stdio.h>
#include <malloc.h>
#include <string.h>

#ifdef __TCC_CC__

int fgets(char *buffer, int size, FILE *f)
{
    int i = 0;
    while (i < size - 1)
    {
        char ch;
        if (read(f->fh, &ch, 1) == 0)
        {
            if (i == 0)
                return 0;
            break;
        }
        buffer[i++] = ch;
        if (ch == '\n')
            break;
    }
    buffer[i] = '\0';
    return 1;
}

#endif


typedef struct define_s *define_p;
struct define_s
{
    char name[20];
    char value[20];
    define_p next;
};
define_p defines = 0;

void add_define(const char* name, const char *value)
{
    define_p new_define = (define_p)malloc(sizeof(struct define_s));
    strncpy(new_define->name, name, 19);
    new_define->name[19] = '\0';
    strncpy(new_define->value, value, 19);
    new_define->value[19] = '\0';
    new_define->next = defines;
    defines = new_define;
}

const char* find_define(const char* name)
{
    for (define_p def = defines; def != NULL; def = def->next)
        if (strcmp(def->name, name) == 0)
            return def->value;
    return name;
}

void output_hex(char ch, FILE *f)
{
    fputc(ch + (ch < 10 ? '0' : 'A' - 10), f);
}

int main(int argc, char *argv[])
{
    char *input_files[10];
    int nr_input_files = 0;
    char *output_file = NULL;
    for (int i  = 1; i < argc; i++)
        if (strcmp(argv[i], "-o") == 0)
        {
            i++;
            output_file = argv[i]; 
        }
        else
            input_files[nr_input_files++] = argv[i];

    FILE *fout = stdout;
    if (output_file != NULL)
    {
        fout = fopen(output_file, "w");
        if (fout == NULL)
        {
            fprintf(stderr, "Error: Cannot open file '%s' for writing", output_file);
            return -1;
        }
    }

    for (int i = 0; i < nr_input_files; i++)
    {
        FILE *fin = fopen(input_files[i], "r");
        if (fin == NULL)
        {
            fprintf(stderr, "Cannot open %s for reading\n", input_files[i]);
            return -1;
        }

        static char line[100000];
        while (fgets(line, 99999, fin))
        {
            if (strncmp(line, "DEFINE ", 7) == 0)
            {
                char *s = line + 7;
                while (*s == ' ') s++;
                char *name = s;
                while (*s > ' ')
                    s++;
                if (*s <= ' ')
                    *s++ = '\0';
                while (*s == ' ') s++;
                char *value = s;
                while (*s > ' ')
                    s++;
                if (*s <= ' ')
                    *s = '\0';
                add_define(name, value);
            }
            else
            {
                char *s = line;
                while (*s == ' ' || *s == '\t')
                    s++;
                while (*s != '\0' && *s != '\r' && *s != '\n' && *s != '#')
                {
                    if (*s <= ' ')
                    {
                        fputc(' ', fout);
                        s++;
                    }
                    else if ((*s == '%' || *s == '!') && (('0' <= s[1] && s[1] <= '9') || s[1] == '-'))
                    {
                        int nr_bits = *s == '%' ? 32 : 8;
                        s++;
                        int sign = 1;
                        if (*s == '-')
                        {
                            sign = -1;
                            s++;
                        }
                        int v = 0;
                        for (; '0' <= *s && *s <= '9'; s++)
                            v = 10 * v + *s - '0';
                        v *= sign;
                        for (int i = 0; i < nr_bits; i += 8)
                        {
                            output_hex((v >> (i + 4)) & 0xf, fout);
                            output_hex((v >> i)  & 0xf, fout);
                        }
                    }
                    else if (*s == '%' || *s == ':' || *s == '#' || *s == '&')
                    {
                        do
                            fputc(*s++, fout);
                        while (*s > ' ');
                    }
                    else if (*s == '"')
                    {
                        s++;
                        while (*s != '"' && *s != '\0')
                        {
                            int v = *s++;
                            output_hex((v >> 4) & 0xf, fout);
                            output_hex(v  & 0xf, fout);
                        }
                        fprintf(fout, "00 ");
                        if (*s == '"')
                            s++;
                    }
                    else
                    {
                        int i = 1;
                        while (s[i] > ' ')
                            i++;
                        char ch = s[i];
                        s[i] = '\0';
                        fprintf(fout, "%s", find_define(s));
                        s += i;
                        *s = ch;
                    }
                }
                fputs(" #", fout);
                for (char *s = line; *s != '\n'; s++)
                    if (s > line + 100)
                    {
                        fputs(" ...", fout);
                        break;
                    }
                    else
                        fputc(*s, fout);
                fputc('\n', fout);
            }
        }
        fclose(fout);
    }
}

File /src/blood-elf.c

Source file is 'src/blood-elf.c'.
URL: https://github.com/FransFaase/MES-replacement/blob/64abad6a2a55cbef00ffa065e1c019c6a1932acf/src/blood-elf.c
/* -*- c-file-style: "linux";indent-tabs-mode:t -*- */
/* Copyright (C) 2017 Jeremiah Orians
 * Copyright (C) 2017 Jan Nieuwenhuizen <janneke@gnu.org>
 * This file is part of mescc-tools
 *
 * mescc-tools is free software: you can redistribute it and/or modify
 * it under the terms of the GNU General Public License as published by
 * the Free Software Foundation, either version 3 of the License, or
 * (at your option) any later version.
 *
 * mescc-tools is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 * GNU General Public License for more details.
 *
 * You should have received a copy of the GNU General Public License
 * along with mescc-tools.  If not, see <http://www.gnu.org/licenses/>.
 */

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include <sys/stat.h>
#include "bootstrappable.c"

enum
{
    max_string = 4096,
};

int BITSIZE;
int BigEndian;

enum
{
    BINARY = 2,
    OCTAL = 8,
    HEX = 16,
};


/* Strings needed for constants */
char* zero_8;
char* zero_16;
char* zero_32;
char* one_16;
char* one_32;
char* two_8;
char* two_32;
char* three_32;
char* six_32;
char* sixteen_32;
char* twentyfour_32;

/* Imported from stringify.c */
int stringify(char* s, int digits, int divisor, int value, int shift);
void LittleEndian(char* start, int ByteMode);

struct entry
{
    struct entry* next;
    char* name;
};

FILE* output;
struct entry* jump_table;
int count;
char* entry;

void consume_token(FILE* source_file, char* s)
{
    int i = 0;
    int c = fgetc(source_file);
    require(EOF != c, "Can not have an EOF token\n");
    do
    {
        s[i] = c;
        i = i + 1;
        require(max_string > i, "Token exceeds token length restriction\n");
        c = fgetc(source_file);
        if(EOF == c) break;
    } while(!in_set(c, " \t\n>"));
}

void storeLabel(FILE* source_file)
{
    struct entry* entry = calloc(1, sizeof(struct entry));

    /* Prepend to list */
    entry->next = jump_table;
    jump_table = entry;

    /* Store string */
    entry->name = calloc((max_string + 1), sizeof(char));
    consume_token(source_file, entry->name);

    count = count + 1;
}

void line_Comment(FILE* source_file)
{
    int c = fgetc(source_file);
    while(!in_set(c, "\n\r"))
    {
        if(EOF == c) break;
        c = fgetc(source_file);
    }
}

void purge_string(FILE* source_file)
{
    int c = fgetc(source_file);
    while((EOF != c) && ('"' != c))
    {
        c = fgetc(source_file);
    }
}

void first_pass(struct entry* input)
{
    if(NULL == input) return;
    first_pass(input->next);

    FILE* source_file = fopen(input->name, "r");

    if(NULL == source_file)
    {
        fputs("The file: ", stderr);
        fputs(input->name, stderr);
        fputs(" can not be opened!\n", stderr);
        exit(EXIT_FAILURE);
    }

    int c;
    for(c = fgetc(source_file); EOF != c; c = fgetc(source_file))
    {
        /* Check for and deal with label */
        if(58 == c)
        {
            storeLabel(source_file);
        }
        /* Check for and deal with line comments */
        else if (c == '#' || c == ';')
        {
            line_Comment(source_file);
        }
        else if ('"' == c)
        {
            purge_string(source_file);
        }
    }
    fclose(source_file);
}

void output_string_table(struct entry* node)
{
    fputs("\n# Generated string table\n:ELF_str\n", output);
    fputs(zero_8, output);
    fputs("\t# NULL string\n", output);
    struct entry* i;
    for(i = node; NULL != i; i = i->next)
    {
        fputs(":ELF_str_", output);
        fputs(i->name, output);
        fputs("\t\"", output);
        fputs(i->name, output);
        fputs("\" # \"", output);
        for (char *s = i->name; *s != '\0'; s++)
            if (*s == '\n')
                fputs("\\n", output);
            else if (*s == '\t')
                fputs("\\t", output);
            else if (*s >= ' ')
                fputc(*s, output);
        fputs("\"\n", output);
    }
    fputs("# END Generated string table\n\n", output);
}

void output_symbol_table(struct entry* node)
{
    fputs("\n# Generated symbol table\n:ELF_sym\n# Required NULL symbol entry\n", output);
    if(64 == BITSIZE)
    {
        fputs(zero_32, output);
        fputs("\t# st_name\n", output);

        fputs(zero_8, output);
        fputs("\t# st_info\n", output);

        fputs(zero_8, output);
        fputs("\t# st_other\n", output);

        fputs(one_16, output);
        fputs("\t# st_shndx\n", output);

        fputs(zero_32, output);
        fputc(' ', output);
        fputs(zero_32, output);
        fputs("\t# st_value\n", output);

        fputs(zero_32, output);
        fputc(' ', output);
        fputs(zero_32, output);
        fputs("\t# st_size\n\n", output);
    }
    else
    {
        fputs(zero_32, output);
        fputs("\t# st_name\n", output);

        fputs(zero_32, output);
        fputs("\t# st_value\n", output);

        fputs(zero_32, output);
        fputs("\t# st_size\n", output);

        fputs(zero_8, output);
        fputs("\t# st_info\n", output);

        fputs(zero_8, output);
        fputs("\t# st_other\n", output);

        fputs(one_16, output);
        fputs("\t# st_shndx\n\n", output);
    }

    struct entry* i;
    for(i = node; NULL != i; i = i->next)
    {
        fputs("%ELF_str_", output);
        fputs(i->name, output);
        fputs(">ELF_str\t# st_name\n", output);

        if(64 == BITSIZE)
        {
            fputs(two_8, output);
            fputs("\t# st_info (FUNC)\n", output);

            if(('_' == i->name[0]) && !match(entry, i->name))
            {
                fputs(two_8, output);
                fputs("\t# st_other (hidden)\n", output);
            }
            else
            {
                fputs(zero_8, output);
                fputs("\t# st_other (other)\n", output);
            }

            fputs(one_16, output);
            fputs("\t# st_shndx\n", output);

            fputs("&", output);
            fputs(i->name, output);
            fputc(' ', output);
            fputs(zero_32, output);
            fputs("\t# st_value\n", output);

            fputs(zero_32, output);
            fputc(' ', output);
            fputs(zero_32, output);
            fputs("\t# st_size (unknown size)\n\n", output);
        }
        else
        {
            fputs("&", output);
            fputs(i->name, output);
            fputs("\t#st_value\n", output);

            fputs(zero_32, output);
            fputs("\t# st_size (unknown size)\n", output);

            fputs(two_8, output);
            fputs("\t# st_info (FUNC)\n", output);

            if(('_' == i->name[0]) && !match(entry, i->name))
            {
                fputs(two_8, output);
                fputs("\t# st_other (hidden)\n", output);
            }
            else
            {
                fputs(zero_8, output);
                fputs("\t# st_other (default)\n", output);
            }

            fputs(one_16, output);
            fputs("\t# st_shndx\n\n", output);
        }
    }

    fputs("# END Generated symbol table\n", output);
}

struct entry* reverse_list(struct entry* head)
{
    struct entry* root = NULL;
    struct entry* next;
    while(NULL != head)
    {
        next = head->next;
        head->next = root;
        root = head;
        head = next;
    }
    return root;
}

void write_int(char* field, char* label)
{
    fputs(field, output);
    fputs("\t#", output);
    fputs(label, output);
    fputc('\n', output);
}

void write_register(char* field, char* label)
{
    /* $field section in the section headers are different size for 32 and 64bits */
    /* The below is broken for BigEndian */
    fputs(field, output);
    if(64 == BITSIZE)
    {
        fputc(' ', output);
        fputs(zero_32, output);
    }

    fputs("\t#", output);
    fputs(label, output);
    fputc('\n', output);
}

void write_section(char* label, char* name, char* type, char* flags, char* address, char* offset, char* size, char* link, char* info, char* entry)
{
    /* Write label */
    fputc('\n', output);
    fputs(label, output);
    fputc('\n', output);

    write_int(name, "sh_name");
    write_int(type, "sh_type");
    write_register(flags, "sh_flags");
    write_register(address, "sh_addr");
    write_register(offset, "sh_offset");
    write_register(size, "sh_size");
    write_int(link, "sh_link");

    /* Deal with the ugly case of stubs */
    fputs(info, output);
    fputs("\t#sh_info\n", output);

    /* Alignment section in the section headers are different size for 32 and 64bits */
    /* The below is broken for BigEndian */
    if(64 == BITSIZE)
    {
        fputs(one_32, output);
        fputc(' ', output);
        fputs(zero_32, output);
        fputs("\t#sh_addralign\n", output);
    }
    else
    {
        fputs(one_32, output);
        fputs("\t#sh_addralign\n", output);
    }

    write_register(entry, "sh_entsize");
}

char nibble_to_hex(char nibble)
{
    return nibble + (nibble < 10 ? '0' : 'A' - 10);
}

char* get_string(int value, int size, int ByteMode, int shift)
{
    char* ch = (char*)malloc(size + 1);
    require(NULL != ch, "Exhausted available memory\n");
    for (int i = 0; i < size; i += 2)
    {
        unsigned char byte = (value >> (4 * i)) & 0xff;
        ch[i] = nibble_to_hex((byte >> 4) & 0xf);
        ch[i + 1] = nibble_to_hex(byte & 0xf);
    }
    ch[size] = '\0';
    return ch;
}

char* setup_string(int value, int number_of_bytes, int ByteMode)
{
    int shift;
    int size;
    if(HEX == ByteMode)
    {
        size = 2;
        shift = 4;
    }
    else if(OCTAL == ByteMode)
    {
        size = 3;
        shift = 3;
    }
    else if(BINARY == ByteMode)
    {
        size = 8;
        shift = 1;
    }
    else
    {
        fputs("reached impossible mode\n", stderr);
        exit(EXIT_FAILURE);
    }

    return get_string(value, number_of_bytes *size, ByteMode, shift);
}

void setup_strings(int ByteMode)
{
    zero_8 = setup_string(0, 1, ByteMode);
    zero_16 = setup_string(0, 2, ByteMode);
    zero_32 = setup_string(0, 4, ByteMode);
    one_16 = setup_string(1, 2, ByteMode);
    one_32 = setup_string(1, 4, ByteMode);
    two_8 = setup_string(2, 1, ByteMode);
    two_32 = setup_string(2, 4, ByteMode);
    three_32 = setup_string(3, 4, ByteMode);
    six_32 = setup_string(6, 4, ByteMode);
    sixteen_32 = setup_string(16, 4, ByteMode);
    twentyfour_32 = setup_string(24, 4, ByteMode);
}

/* Standard C main program */
int main(int argc, char **argv)
{
    jump_table = NULL;
    struct entry* input = NULL;
    output = stdout;
    char* output_file = "";
    entry = "";
    BITSIZE = 32;
    count = 1;
    BigEndian = TRUE;
    int ByteMode = HEX;
    int set = FALSE;
    struct entry* temp;
    struct entry* head;

    int option_index = 1;
    while(option_index <= argc)
    {
        if(NULL == argv[option_index])
        {
            option_index = option_index + 1;
        }
        else if(match(argv[option_index], "-h") || match(argv[option_index], "--help"))
        {
            fputs("Usage: ", stderr);
            fputs(argv[0], stderr);
            fputs(" --file FILENAME1 {--file FILENAME2} --output FILENAME\n", stderr);
            exit(EXIT_SUCCESS);
        }
        else if(match(argv[option_index], "--64"))
        {
            BITSIZE = 64;
            option_index = option_index + 1;
        }
        else if(match(argv[option_index], "-f") || match(argv[option_index], "--file"))
        {
            temp = calloc(1, sizeof(struct entry));
            temp->name = argv[option_index + 1];
            temp->next = input;
            input = temp;
            option_index = option_index + 2;
        }
        else if(match(argv[option_index], "-o") || match(argv[option_index], "--output"))
        {
            output_file = argv[option_index + 1];
            output = fopen(output_file, "w");

            if(NULL == output)
            {
                fputs("The file: ", stderr);
                fputs(input->name, stderr);
                fputs(" can not be opened!\n", stderr);
                exit(EXIT_FAILURE);
            }
            option_index = option_index + 2;
        }
        else if(match(argv[option_index], "-b") || match(argv[option_index], "--binary"))
        {
            ByteMode = BINARY;
            option_index = option_index + 1;
        }
        else if(match(argv[option_index], "-O") || match(argv[option_index], "--octal"))
        {
            ByteMode = OCTAL;
            option_index = option_index + 1;
        }
        else if(match(argv[option_index], "-X") || match(argv[option_index], "--hex"))
        {
            ByteMode = HEX;
            option_index = option_index + 1;
        }
        else if(match(argv[option_index], "--big-endian"))
        {
            BigEndian = TRUE;
            set = TRUE;
            option_index = option_index + 1;
        }
        else if(match(argv[option_index], "--little-endian"))
        {
            BigEndian = FALSE;
            set = TRUE;
            option_index = option_index + 1;
        }
        else if(match(argv[option_index], "-V") || match(argv[option_index], "--version"))
        {
            fputs("blood-elf 2.0.1\n(Basically Launches Odd Object Dump ExecutabLe Files\n", stdout);
            exit(EXIT_SUCCESS);
        }
        else if(match(argv[option_index], "--entry"))
        {
            head = calloc(1, sizeof(struct entry));
            /* Include _start or any other entry from your .hex2 */
            head->next = jump_table;
            jump_table = head;
            jump_table->name = argv[option_index + 1];
            /* However only the last one will be exempt from the _name hidden rule */
            entry = argv[option_index + 1];
            option_index = option_index + 2;
            count = count + 1;
        }
        else
        {
            fputs("Unknown option\n", stderr);
            exit(EXIT_FAILURE);
        }
    }

    /* Make sure we have a program tape to run */
    if (NULL == input)
    {
        return EXIT_FAILURE;
    }

    /* Force setting of endianness */
    if(!set)
    {
        fputs("either --little-endian or --big-endian MUST be set\n", stderr);
        return EXIT_FAILURE;
    }

    /* Setup the ugly formating because RISC-V sucks */
    setup_strings(ByteMode);

    /* Get all of the labels */
    first_pass(input);

    /* Reverse their order */
    jump_table = reverse_list(jump_table);

    /* Create sections */
    /* Create string names for sections */
    fputs("# Generated sections\n:ELF_shstr\n", output);
    fputs(zero_8, output);
    fputs("\t# NULL\n", output);
    fputs(":ELF_shstr__text\n\".text\"\n", output);
    fputs(":ELF_shstr__shstr\n\".shstrtab\"\n", output);
    fputs(":ELF_shstr__sym\n\".symtab\"\n", output);
    fputs(":ELF_shstr__str\n\".strtab\"\n", output);

    /* Create NULL section header as is required by the Spec. So dumb and waste of bytes*/
    write_section(":ELF_section_headers", zero_32, zero_32, zero_32, zero_32, zero_32, zero_32, zero_32, zero_32, zero_32);
    write_section(":ELF_section_header_text", "%ELF_shstr__text>ELF_shstr", one_32, six_32, "&ELF_text", "%ELF_text>ELF_base", "%ELF_data>ELF_text", zero_32, zero_32, zero_32);
    write_section(":ELF_section_header_shstr", "%ELF_shstr__shstr>ELF_shstr", three_32, zero_32, "&ELF_shstr", "%ELF_shstr>ELF_base", "%ELF_section_headers>ELF_shstr", zero_32, zero_32, zero_32);
    write_section(":ELF_section_header_str", "%ELF_shstr__str>ELF_shstr", three_32, zero_32, "&ELF_str", "%ELF_str>ELF_base", "%ELF_sym>ELF_str", zero_32, zero_32, zero_32);
    if(64 == BITSIZE) write_section(":ELF_section_header_sym", "%ELF_shstr__sym>ELF_shstr", two_32, zero_32, "&ELF_sym", "%ELF_sym>ELF_base", "%ELF_end>ELF_sym", three_32, setup_string(count, 4, ByteMode), twentyfour_32);
    else write_section(":ELF_section_header_sym", "%ELF_shstr__sym>ELF_shstr", two_32, zero_32, "&ELF_sym", "%ELF_sym>ELF_base", "%ELF_end>ELF_sym", three_32, setup_string(count, 4, ByteMode), sixteen_32);

    /* Create dwarf stubs needed for objdump -d to get function names */
    output_string_table(jump_table);
    output_symbol_table(jump_table);
    fputs("\n:ELF_end\n", output);

    /* Close output file */
    fclose(output);

    return EXIT_SUCCESS;
}

File /src/bootstrappable.c

Source file is 'src/bootstrappable.c'.
URL: https://github.com/FransFaase/MES-replacement/blob/64abad6a2a55cbef00ffa065e1c019c6a1932acf/src/bootstrappable.c
/* Copyright (C) 2016 Jeremiah Orians
 * This file is part of M2-Planet.
 *
 * M2-Planet is free software: you can redistribute it and/or modify
 * it under the terms of the GNU General Public License as published by
 * the Free Software Foundation, either version 3 of the License, or
 * (at your option) any later version.
 *
 * M2-Planet is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 * GNU General Public License for more details.
 *
 * You should have received a copy of the GNU General Public License
 * along with M2-Planet.  If not, see <http://www.gnu.org/licenses/>.
 */

#include <stdio.h>
#include <stdlib.h>

#define TRUE 1
#define FALSE 0


void require(int bool, char* error)
{
    if(!bool)
    {
        fputs(error, stderr);
        exit(EXIT_FAILURE);
    }
}


int match(char* a, char* b)
{
    if((NULL == a) && (NULL == b)) return TRUE;
    if(NULL == a) return FALSE;
    if(NULL == b) return FALSE;

    int i = -1;
    do
    {
        i = i + 1;
        if(a[i] != b[i])
        {
            return FALSE;
        }
    } while((0 != a[i]) && (0 !=b[i]));
    return TRUE;
}


int in_set(int c, char* s)
{
    /* NULL set is always false */
    if(NULL == s) return FALSE;

    while(0 != s[0])
    {
        if(c == s[0]) return TRUE;
        s = s + 1;
    }
    return FALSE;
}

/* INTERNAL ONLY */
int __index_number(char* s, char c)
{
    int i = 0;
    while(s[i] != c)
    {
        i = i + 1;
        if(0 == s[i]) return -1;
    }
    return i;
}

/* INTERNAL ONLY */
int __toupper(int c)
{
    if(in_set(c, "abcdefghijklmnopqrstuvwxyz")) return (c & 0xDF);
    return c;
}

/* INTERNAL ONLY */
int __set_reader(char* set, int mult, char* input)
{
    int n = 0;
    int i = 0;
    int hold;
    int negative_p = FALSE;

    if(input[0] == '-')
    {
        negative_p = TRUE;
        i = i + 1;
    }

    while(in_set(input[i], set))
    {
        if('_' == input[i])
        {
            i = i + 1;
            continue;
        }

        n = n * mult;
        hold = __index_number(set, __toupper(input[i]));

        /* Input managed to change between in_set and index_number */
        if(-1 == hold) return 0;
        n = n + hold;
        i = i + 1;
    }

    /* loop exited before NULL and thus invalid input */
    if(0 != input[i]) return 0;

    if(negative_p)
    {
        n = 0 - n;
    }

    return n;
}

int strtoint(char *a)
{
    int result = 0;
    /* If NULL string */
    if(0 == a[0])
    {
        result = 0;
    }
    /* Deal with binary */
    else if ('0' == a[0] && 'b' == a[1])
    {
        result = __set_reader("01_", 2, a+2);
    }
    /* Deal with hex */
    else if ('0' == a[0] &&  'x' == a[1])
    {
        result = __set_reader("0123456789ABCDEFabcdef_", 16, a+2);
    }
    /* Deal with octal */
    else if('0' == a[0])
    {
        result = __set_reader("01234567_", 8, a+1);
    }
    /* Deal with decimal */
    else
    {
        result = __set_reader("0123456789_", 10, a);
    }

    /* Deal with sign extension for 64bit hosts */
    if(0 != (0x80000000 & result)) result = (0xFFFFFFFF << 31) | result;
    return result;
}

char* int2str(int x, int base, int signed_p)
{
    require(1 < base, "int2str doesn't support a base less than 2\n");
    require(37 > base, "int2str doesn't support a base more than 36\n");
    /* Be overly conservative and save space for 32binary digits and padding null */
    char* p = calloc(34, sizeof(char));
    /* if calloc fails return null to let calling code deal with it */
    if(NULL == p) return p;

    p = p + 32;
    unsigned i;
    int sign_p = FALSE;
    char* table = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ";

    if(signed_p && (10 == base) && (0 != (x & 0x80000000)))
    {
        /* Truncate to 31bits */
        i = -x & 0x7FFFFFFF;
        if(0 == i) return "-2147483648";
        sign_p = TRUE;
    } /* Truncate to 32bits */
    else i = x & (0x7FFFFFFF + 0x80000000); /* M2-Planet/cc_* can't handle large signed numbers in literals */

    do
    {
        p[0] = table[i % base];
        p = p - 1;
        i = i / base;
    } while(0 < i);

    if(sign_p)
    {
        p[0] = '-';
        p = p - 1;
    }

    return p + 1;
}

File /src/hex2.c

Source file is 'src/hex2.c'.
URL: https://github.com/FransFaase/MES-replacement/blob/64abad6a2a55cbef00ffa065e1c019c6a1932acf/src/hex2.c
#include <stdio.h>
#include <string.h>
#include <malloc.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <unistd.h>


#ifdef __TCC_CC__

#define NULL 0
#define STDOUT_FILENO 1

char **_sys_env = 0;
int sys_int80(int a, int b, int c, int d);
void *sys_malloc(size_t size);

#define O_RDONLY 0
#define O_WRITE 001101

#define open(pathname, mode) sys_int80(5, pathname, mode, 0777)
#define close(fd) sys_int80(6, fd, 0, 0)
#define read(fd, buf, count) sys_int80(3, fd, buf, count)
#define write(fd, buf, count) sys_int80(4, fd, buf, count)
#define chmod(fn, mode) sys_int80(15, fn, mode, 0)

void *malloc(size_t size) { return sys_malloc((size + 3) & ~3); }

int strcmp(const char *s1, const char *s2)
{
    for (;;)
    {
        int result = *s1 - *s2;
        if (result != 0 || *s1 == 0)
            return result;
        s1++;
        s2++;
    }
    return 0; // should not get here
}

int strncmp(const char *s1, const char *s2, size_t n)
{
    for (; n > 0; n--)
    {
        int result = *s1 - *s2;
        if (result != 0 || *s1 == 0)
            return result;
        s1++;
        s2++;
    }
    return 0;
}

size_t strlen(const char *s)
{
    int len = 0;
    for (; *s != '\0'; s++)
        len++;
    return len;
}

char *strncpy(char *dest, const char *src, size_t n)
{
    char *d = (char *)dest;
    char *s = (char *)src;
    for (int i = 0; i < n; i++)
    {
        d[i] = s[i];
        if (s[i] == '\0')
            break;
    }
}

#else

#define O_WRITE (O_WRONLY | O_CREAT | O_TRUNC)

#endif

void fhputc(int ch, int fh)
{
    write(fh, &ch, 1);
}

int fhgets(char *buffer, int size, int fh)
{
    int i = 0;
    while (i < size - 1)
    {
        char ch;
        if (read(fh, &ch, 1) == 0)
        {
            if (i == 0)
                return 0;
            break;
        }
        buffer[i++] = ch;
        if (ch == '\n')
            break;
    }
    buffer[i] = '\0';
    return 1;
}

int ip = 0;

int is_hex(char ch)
{
    if ('0' <= ch && ch <= '9')
        return ch - '0';
    if ('A' <= ch && ch <= 'F')
        return ch - ('A' - 10);
    return -1;
}

typedef struct label_s *label_p;
struct label_s
{
    char *name;
    int ip;
    label_p next;
};
label_p labels = NULL;

int pos_for_label(const char *name, int len)
{
    for (label_p label = labels; label != NULL; label = label->next)
        if (strncmp(label->name, name, len) == 0 && label->name[len] == '\0')
            return label->ip;
    return 0;
}

void process_file(const char *name, int add_labels, void (*output_byte)(unsigned char, int), void (*end_of_line)(const char *s))
{
    int f = open(name, O_RDONLY);
    if (f < 0)
        return;
    static char line[1000];
    int line_nr = 0;
    while (fhgets(line, 999, f))
    {
        line_nr++;
        int space = 0;
        char *s = line;
        while (*s != '\0' && *s != '#' && *s != '\r' && *s != '\n')
            if (*s <= ' ')
            {
                space = 1;
                s++;
            }
            else if (*s == ':')
            {
                s++;
                char *label = s;
                int label_len = 0;
                for (; *s > ' '; s++)
                    label_len++;
                if (label_len > 0 && add_labels)
                {
                    label_p new_label = (label_p)malloc(sizeof(struct label_s));
                    new_label->name = (char*)malloc(label_len + 1);
                    strncpy(new_label->name, label, label_len);
                    new_label->ip = ip;
                    new_label->next = labels;
                    labels = new_label;
                }
            }
            else if (is_hex(*s) >= 0 && is_hex(s[1]) >= 0)
            {
                unsigned byte = (is_hex(*s) << 4) | is_hex(s[1]);
                if (output_byte != 0)
                    output_byte(byte, space);
                space = 0;
                ip++;
                s += 2;
            }
            else if (*s == '&' || *s == '%' || *s == '!')
            {
                char mode = *s++;
                int l = 0;
                while (s[l] > ' ' && s[l] != '#' && s[l] != '>')
                    l++;
                int pos = pos_for_label(s, l);
                s += l;
                ip += 4;
                if (mode == '%')
                {
                    if (*s == '>')
                    {
                        s++;
                        l = 0;
                        while (s[l] > ' ' && s[l] != '#')
                            l++;
                        pos -= pos_for_label(s, l);
                        s += l;
                    }
                    else
                        pos -= ip;
                }
                int nr_bits = *s == '!' ? 8 : 32;
                for (int i = 0; i < nr_bits; i += 8)
                {
                    unsigned byte = (pos >> i) & 0xff;
                    if (output_byte != 0)
                        output_byte(byte, space);
                    space = 0;
                }
            }
            else if (*s == '"')
            {
                s++;
                while (*s != '\0' && *s != '"')
                {
                    if (output_byte != 0)
                        output_byte(*s, space);
                    space = 0;
                    s++;
                    ip++;
                }
                if (*s == '"')
                    s++;
                if (output_byte != 0)
                    output_byte('\0', space);
                space = 0;
                ip++;
            }
            else
            {
#ifndef __TCC_CC__
                fprintf(stderr, "%s:%d: Unknown '%c'(%d) '%s'\n", name, line_nr, *s, *s, line);
#endif
                return;
            }
        while (*s != '\0' && *s != '#' && *s != '\r' && *s != '\n')
            s++;
        if (end_of_line != 0)
            end_of_line(s);
    }
    close(f);
}

void output_hex(char ch, int fh)
{
    fhputc(ch + (ch < 10 ? '0' : 'A' - 10), fh);
}

int col = 1;
int fout = -1;

void output_hex_byte(unsigned char byte, int space)
{
    if (space)
    {
        fhputc(' ', fout);
        col++;
    }
    output_hex((byte >> 4) & 0xf, fout);
    output_hex(byte & 0xf, fout);
    col += 2;
}

void output_hex_end_of_line(const char *s)
{
    for (; col < 30; col++)
        fhputc(' ', fout);
    while (*s != '\0' && *s != '\r' && *s != '\n')
        fhputc(*s++, fout);
    fhputc('\n', fout);
    col = 1;
}

void output_byte(unsigned char byte, int space)
{
    (void)space;
    fhputc(byte, fout);
}

int main(int argc, char *argv[])
{
    fout = STDOUT_FILENO;
    int output_as_hex = 1;
    char *input_files[10];
    int nr_input_files = 0;
    char *output_file = NULL;
    for (int i  = 1; i < argc; i++)
        if (strcmp(argv[i], "-o") == 0)
        {
            i++;
            output_file = argv[i]; 
        }
        else
            input_files[nr_input_files++] = argv[i];

    if (output_file != NULL)
    {
        fout = open(output_file, O_WRITE);
        if (fout < 0)
        {
#ifndef __TCC_CC__            
            fprintf(stderr, "Error: Cannot open file '%s' for writing", output_file);
#endif
            return -1;
        }
        int len = strlen(output_file);
        output_as_hex = len > 5 && strcmp(output_file + len - 5, ".hex0") == 0;
    }

    ip = 0x8048000;
    for (int i = 0; i < nr_input_files; i++)
        process_file(input_files[i], 1, 0, 0);

    ip = 0x8048000;
    for (int i = 0; i < nr_input_files; i++)
        if (output_as_hex)
            process_file(input_files[i], 0, output_hex_byte, output_hex_end_of_line);
        else
            process_file(input_files[i], 0, output_byte, 0);

    if (output_file != NULL)
    {
        close(fout);
        chmod(output_file, 0777);
    }

    return 0;
}

File /src/kaem-minimal.c

Source file is 'src/kaem-minimal.c'.
URL: https://github.com/FransFaase/MES-replacement/blob/64abad6a2a55cbef00ffa065e1c019c6a1932acf/src/kaem-minimal.c
#include <fcntl.h>
#include <unistd.h>
#include <sys/wait.h>
#include <errno.h>

#ifdef __TCC_CC__

char **_sys_env = 0;
int sys_int80(int a, int b, int c, int d);

#define O_RDONLY 0

#define open(pathname, mode) sys_int80(5, pathname, mode, 0777)
#define read(fd, buf, count) sys_int80(3, fd, buf, count)
#define fork() sys_int80(2, 0, 0, 0)
#define execve(program, argv, env) sys_int80(11, program, argv, env)
#define waitpid(f, status, mode) sys_int80(7, f, status, mode)

#endif

int fhgetc(int fh)
{
    char ch;
    int result = read(fh, &ch, 1);
    return result == 1 ? ch : -1;
}

int main(int argc, const char *argv[])
{
    const char *input_fn = "kaem.x86";
    if (argc > 1)
    {
        input_fn = argv[1];
    }

    int fh = open(input_fn, O_RDONLY);
    if (fh == 0)
    {
        return 1;
    }

    char **env = (char **)argv + (argc + 1);

    for (;;)
    {
        char line[200];
        char *s = line;
        int ch;
        for (;;)
        {
            ch = fhgetc(fh);
            if (ch == -1 || ch == '\n' || ch == '#')
                break;
            *s++ = ch;
        }
        *s = '\0';
        
        char *tokens[10];
        int nr_tokens = 0;
        s = line;

        for (;;)
        {
            while (*s == ' ' || *s == '\t')
                s++;
            if (*s == '\0')
                break;
            tokens[nr_tokens++] = s;
            while (*s > ' ')
                s++;
            if (*s == '\0')
                break;
            *s++ = '\0';
        }
        tokens[nr_tokens] = 0;

        if (nr_tokens > 0)
        {
            // Execute command
            int f = fork();
            if (f == -1)
            {
                return 1;
            }
            if (f == 0)
            {
                // We are child
                execve(tokens[0], tokens, env);
                return 1;
            }
            
            // We are parent
            int status;
            waitpid(f, &status, 0);
            if (status != 0)
            {
                return status;
            }
        }

        if (ch == '#')
        {
            do
            {
                ch = fhgetc(fh);
            } while (ch != -1 && ch != '\n');
        }
        if (ch == -1)
            break;
    }
    return 0;
}

File /src/hex0.c

Source file is 'src/hex0.c'.
URL: https://github.com/FransFaase/MES-replacement/blob/64abad6a2a55cbef00ffa065e1c019c6a1932acf/src/hex0.c
#include <fcntl.h>
#include <unistd.h>

#ifdef __TCC_CC__

char **_sys_env = 0;
int sys_int80(int a, int b, int c, int d);

#define O_RDONLY 0
#define O_WRITE 001101

#define open(pathname, mode) sys_int80(5, pathname, mode, 0777)
#define close(fd) sys_int80(6, fd, 0, 0)
#define read(fd, buf, count) sys_int80(3, fd, buf, count)
#define write(fd, buf, count) sys_int80(4, fd, buf, count)
#define chmod(fn, mode) sys_int80(15, fn, mode, 0)

#else

#define O_WRITE (O_WRONLY | O_CREAT | O_TRUNC)

#endif

int main(int argc, char *argv[])
{
    int fin = open(argv[1], O_RDONLY);
    int fout = open(argv[2], O_WRITE);

    int state = 0;
    int first = 0;
    unsigned char ch;
    while (read(fin, &ch, 1))
    {
        if (ch <= ' ')
            ;
        else if (ch == '#')
        {
            while (read(fin, &ch, 1) && ch != '\n')
                ;
        }
        else
        {
            if ('0' <= ch && ch <= '9')
                ch -= '0';
            else
                ch -= 'A' - 10;
            if (state)
            {
                ch += first;
                write(fout, &ch, 1);
                state = 0;
            }
            else
            {
                first = ch << 4;
                state = 1;
            }
        }
    }

    close(fout);
    chmod(argv[2], 0777);
}

File /x86/tools-kaem.kaem

Source file is 'task3/tools-kaem.kaem'.
URL: https://github.com/FransFaase/MES-replacement/blob/64abad6a2a55cbef00ffa065e1c019c6a1932acf/task3/tools-kaem.kaem
#! /usr/bin/env bash

set +x

./usr/bin/tcc_cc -o ./tmp/catm.sl ./src/stdlib.c ./src/catm.c
./usr/bin/stack_c -i ./x86/stack_c_intro.M1 ./tmp/catm.sl -o tmp/catm.M1
./usr/bin/blood-elf --file tmp/catm.M1 --little-endian --output ./tmp/catm.blood_elf
./usr/bin/M1 ./tmp/catm.M1 -o ./tmp/catm.macro
./usr/bin/hex2 -o ./usr/bin/catm ./x86/ELF-x86-debug.hex2 ./tmp/catm.macro ./tmp/catm.blood_elf

./usr/bin/tcc_cc -o ./tmp/match.sl ./src/stdlib.c ./src/match.c
./usr/bin/stack_c -i ./x86/stack_c_intro.M1 ./tmp/match.sl -o tmp/match.M1
./usr/bin/blood-elf --file tmp/match.M1 --little-endian --output ./tmp/match.blood_elf
./usr/bin/M1 ./tmp/match.M1 -o ./tmp/match.macro
./usr/bin/hex2 -o ./usr/bin/match ./x86/ELF-x86-debug.hex2 ./tmp/match.macro ./tmp/match.blood_elf

./usr/bin/tcc_cc -o ./tmp/sha256sum.sl ./src/stdlib.c ./src/sha256sum.c
./usr/bin/stack_c -i ./x86/stack_c_intro.M1 ./tmp/sha256sum.sl -o tmp/sha256sum.M1
./usr/bin/blood-elf --file tmp/sha256sum.M1 --little-endian --output ./tmp/sha256sum.blood_elf
./usr/bin/M1 ./tmp/sha256sum.M1 -o ./tmp/sha256sum.macro
./usr/bin/hex2 -o ./usr/bin/sha256sum ./x86/ELF-x86-debug.hex2 ./tmp/sha256sum.macro ./tmp/sha256sum.blood_elf

./usr/bin/tcc_cc -o ./tmp/mkdir.sl ./src/stdlib.c ./src/mkdir.c
./usr/bin/stack_c -i ./x86/stack_c_intro.M1 ./tmp/mkdir.sl -o tmp/mkdir.M1
./usr/bin/blood-elf --file tmp/mkdir.M1 --little-endian --output ./tmp/mkdir.blood_elf
./usr/bin/M1 ./tmp/mkdir.M1 -o ./tmp/mkdir.macro
./usr/bin/hex2 -o ./usr/bin/mkdir ./x86/ELF-x86-debug.hex2 ./tmp/mkdir.macro ./tmp/mkdir.blood_elf

./usr/bin/tcc_cc -o ./tmp/cp.sl ./src/stdlib.c ./src/cp.c
./usr/bin/stack_c -i ./x86/stack_c_intro.M1 ./tmp/cp.sl -o tmp/cp.M1
./usr/bin/blood-elf --file tmp/cp.M1 --little-endian --output ./tmp/cp.blood_elf
./usr/bin/M1 ./tmp/cp.M1 -o ./tmp/cp.macro
./usr/bin/hex2 -o ./usr/bin/cp ./x86/ELF-x86-debug.hex2 ./tmp/cp.macro ./tmp/cp.blood_elf

./usr/bin/tcc_cc -o ./tmp/chmod.sl ./src/stdlib.c ./src/chmod.c
./usr/bin/stack_c -i ./x86/stack_c_intro.M1 ./tmp/chmod.sl -o tmp/chmod.M1
./usr/bin/blood-elf --file tmp/chmod.M1 --little-endian --output ./tmp/chmod.blood_elf
./usr/bin/M1 ./tmp/chmod.M1 -o ./tmp/chmod.macro
./usr/bin/hex2 -o ./usr/bin/chmod ./x86/ELF-x86-debug.hex2 ./tmp/chmod.macro ./tmp/chmod.blood_elf

./usr/bin/tcc_cc -o ./tmp/rm.sl ./src/stdlib.c ./src/rm.c
./usr/bin/stack_c -i ./x86/stack_c_intro.M1 ./tmp/rm.sl -o tmp/rm.M1
./usr/bin/blood-elf --file tmp/rm.M1 --little-endian --output ./tmp/rm.blood_elf
./usr/bin/M1 ./tmp/rm.M1 -o ./tmp/rm.macro
./usr/bin/hex2 -o ./usr/bin/rm ./x86/ELF-x86-debug.hex2 ./tmp/rm.macro ./tmp/rm.blood_elf

./usr/bin/tcc_cc -o ./tmp/untar.sl ./src/stdlib.c ./src/untar.c
./usr/bin/stack_c -i ./x86/stack_c_intro.M1 ./tmp/untar.sl -o tmp/untar.M1
./usr/bin/blood-elf --file tmp/untar.M1 --little-endian --output ./tmp/untar.blood_elf
./usr/bin/M1 ./tmp/untar.M1 -o ./tmp/untar.macro
./usr/bin/hex2 -o ./usr/bin/untar ./x86/ELF-x86-debug.hex2 ./tmp/untar.macro ./tmp/untar.blood_elf

./usr/bin/tcc_cc -o ./tmp/ungz.sl ./src/stdlib.c ./src/ungz.c
./usr/bin/stack_c -i ./x86/stack_c_intro.M1 ./tmp/ungz.sl -o tmp/ungz.M1
./usr/bin/blood-elf --file tmp/ungz.M1 --little-endian --output ./tmp/ungz.blood_elf
./usr/bin/M1 ./tmp/ungz.M1 -o ./tmp/ungz.macro
./usr/bin/hex2 -o ./usr/bin/ungz ./x86/ELF-x86-debug.hex2 ./tmp/ungz.macro ./tmp/ungz.blood_elf

./usr/bin/tcc_cc -o ./tmp/unxz.sl ./src/stdlib.c ./src/unxz.c
./usr/bin/stack_c -i ./x86/stack_c_intro.M1 ./tmp/unxz.sl -o tmp/unxz.M1
./usr/bin/blood-elf --file tmp/unxz.M1 --little-endian --output ./tmp/unxz.blood_elf
./usr/bin/M1 ./tmp/unxz.M1 -o ./tmp/unxz.macro
./usr/bin/hex2 -o ./usr/bin/unxz ./x86/ELF-x86-debug.hex2 ./tmp/unxz.macro ./tmp/unxz.blood_elf

./usr/bin/tcc_cc -o ./tmp/unbz2.sl ./src/stdlib.c ./src/unbz2.c
./usr/bin/stack_c -i ./x86/stack_c_intro.M1 ./tmp/unbz2.sl -o tmp/unbz2.M1
./usr/bin/blood-elf --file tmp/unbz2.M1 --little-endian --output ./tmp/unbz2.blood_elf
./usr/bin/M1 ./tmp/unbz2.M1 -o ./tmp/unbz2.macro
./usr/bin/hex2 -o ./usr/bin/unbz2 ./x86/ELF-x86-debug.hex2 ./tmp/unbz2.macro ./tmp/unbz2.blood_elf



File /src/catm.c

Source file is 'src/catm.c'.
URL: https://github.com/FransFaase/MES-replacement/blob/64abad6a2a55cbef00ffa065e1c019c6a1932acf/src/catm.c
/* Copyright (C) 2019 Jeremiah Orians
 * This file is part of mescc-tools
 *
 * mescc-tools is free software: you can redistribute it and/or modify
 * it under the terms of the GNU General Public License as published by
 * the Free Software Foundation, either version 3 of the License, or
 * (at your option) any later version.
 *
 * mescc-tools is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 * GNU General Public License for more details.
 *
 * You should have received a copy of the GNU General Public License
 * along with mescc-tools.  If not, see <http://www.gnu.org/licenses/>.
 */

#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <fcntl.h>

#define BUFFER_SIZE 4096

int main(int argc, char** argv)
{
    if(2 > argc)
    {
        fputs("catm requires 2 or more arguments\n", stderr);
        exit(EXIT_FAILURE);
    }

    int output = open(argv[1], 577 , 384);
    if(-1 == output)
    {
        fputs("The file: ", stderr);
        fputs(argv[1], stderr);
        fputs(" is not a valid output file name\n", stderr);
        exit(EXIT_FAILURE);
    }

    int i;
    int bytes;
    char* buffer = calloc(BUFFER_SIZE + 1, sizeof(char));
    int input;
    for(i = 2; i < argc ; i =  i + 1)
    {
        input = open(argv[i], 0, 0);
        if(-1 == input)
        {
            fputs("The file: ", stderr);
            fputs(argv[i], stderr);
            fputs(" is not a valid input file name\n", stderr);
            exit(EXIT_FAILURE);
        }
keep:
        bytes = read(input, buffer, BUFFER_SIZE);
        write(output, buffer, bytes);
        if(BUFFER_SIZE == bytes) goto keep;
    }

    free(buffer);
    return EXIT_SUCCESS;
}

File /src/match.c

Source file is 'src/match.c'.
URL: https://github.com/FransFaase/MES-replacement/blob/64abad6a2a55cbef00ffa065e1c019c6a1932acf/src/match.c
/* Copyright (C) 2021 Andrius Å tikonas
 * This file is part of mescc-tools-extra
 *
 * mescc-tools-extra is free software: you can redistribute it and/or modify
 * it under the terms of the GNU General Public License as published by
 * the Free Software Foundation, either version 3 of the License, or
 * (at your option) any later version.
 *
 * mescc-tools-extra is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 * GNU General Public License for more details.
 *
 * You should have received a copy of the GNU General Public License
 * along with mescc-tools-extra.  If not, see <http://www.gnu.org/licenses/>.
 */

/********************************************************************************
 * "match" can be used to compare strings. It is useful to write conditional    *
 * code in kaem.                                                                *
 *                                                                              *
 * Usage: match string1 string2                                                 *
 * Returns: 0 if strings match                                                  *
 ********************************************************************************/

#include <stdio.h>
#include <string.h>


int main(int argc, char **argv)
{
    /* ensure correct number of arguments */
    if(argc != 3)
    {
        fputs("match needs exactly 2 arguments.\n", stderr);
        return 2;
    }

    /* deal with badly behaving shells calling */
    if(NULL == argv[1])
    {
        fputs("You passed a null string\n", stderr);
        return 3;
    }
    if(NULL == argv[2])
    {
        fputs("You passed a null string\n", stderr);
        return 3;
    }

    return strcmp(argv[1], argv[2]) != 0;
}

File /src/sha256sum.c

Source file is 'src/sha256sum.c'.
URL: https://github.com/FransFaase/MES-replacement/blob/64abad6a2a55cbef00ffa065e1c019c6a1932acf/src/sha256sum.c
/* Copyright (C) 2021 Bastian Bittorf <bb@npl.de>
 * Copyright (C) 2021 Alain Mosnier <alain@wanamoon.net>
 * Copyright (C) 2017-2021 Jan Venekamp
 * Copyright (C) 2021 Jeremiah Orians
 * This file is part of mescc-tools
 *
 * mescc-tools is free software: you can redistribute it and/or modify
 * it under the terms of the GNU General Public License as published by
 * the Free Software Foundation, either version 3 of the License, or
 * (at your option) any later version.
 *
 * mescc-tools is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 * GNU General Public License for more details.
 *
 * You should have received a copy of the GNU General Public License
 * along with mescc-tools.  If not, see <http://www.gnu.org/licenses/>.
 */

#include <string.h>
#include <stdio.h>
#include <stdlib.h>
#include "bootstrappable.c"


#define CHUNK_SIZE 64
#define TOTAL_LEN_LEN 8

int mask;

/*
 * Initialize array of round constants:
 * (first 32 bits of the fractional parts of the cube roots of the first 64 primes 2..311):
 */
unsigned* init_k(void)
{
    unsigned* k = calloc(65, sizeof(unsigned));
    k[0] = 0x428a2f98;
    k[1] = 0x71374491;
    k[2] = 0xb5c0fbcf;
    k[3] = 0xe9b5dba5;
    k[4] = 0x3956c25b;
    k[5] = 0x59f111f1;
    k[6] = 0x923f82a4;
    k[7] = 0xab1c5ed5;
    k[8] = 0xd807aa98;
    k[9] = 0x12835b01;
    k[10] = 0x243185be;
    k[11] = 0x550c7dc3;
    k[12] = 0x72be5d74;
    k[13] = 0x80deb1fe;
    k[14] = 0x9bdc06a7;
    k[15] = 0xc19bf174;
    k[16] = 0xe49b69c1;
    k[17] = 0xefbe4786;
    k[18] = 0x0fc19dc6;
    k[19] = 0x240ca1cc;
    k[20] = 0x2de92c6f;
    k[21] = 0x4a7484aa;
    k[22] = 0x5cb0a9dc;
    k[23] = 0x76f988da;
    k[24] = 0x983e5152;
    k[25] = 0xa831c66d;
    k[26] = 0xb00327c8;
    k[27] = 0xbf597fc7;
    k[28] = 0xc6e00bf3;
    k[29] = 0xd5a79147;
    k[30] = 0x06ca6351;
    k[31] = 0x14292967;
    k[32] = 0x27b70a85;
    k[33] = 0x2e1b2138;
    k[34] = 0x4d2c6dfc;
    k[35] = 0x53380d13;
    k[36] = 0x650a7354;
    k[37] = 0x766a0abb;
    k[38] = 0x81c2c92e;
    k[39] = 0x92722c85;
    k[40] = 0xa2bfe8a1;
    k[41] = 0xa81a664b;
    k[42] = 0xc24b8b70;
    k[43] = 0xc76c51a3;
    k[44] = 0xd192e819;
    k[45] = 0xd6990624;
    k[46] = 0xf40e3585;
    k[47] = 0x106aa070;
    k[48] = 0x19a4c116;
    k[49] = 0x1e376c08;
    k[50] = 0x2748774c;
    k[51] = 0x34b0bcb5;
    k[52] = 0x391c0cb3;
    k[53] = 0x4ed8aa4a;
    k[54] = 0x5b9cca4f;
    k[55] = 0x682e6ff3;
    k[56] = 0x748f82ee;
    k[57] = 0x78a5636f;
    k[58] = 0x84c87814;
    k[59] = 0x8cc70208;
    k[60] = 0x90befffa;
    k[61] = 0xa4506ceb;
    k[62] = 0xbef9a3f7;
    k[63] = 0xc67178f2;
    return k;
}

unsigned* init_h(void)
{
    unsigned* h = calloc(9, sizeof(unsigned));
    h[0] = 0x6a09e667;
    h[1] = 0xbb67ae85;
    h[2] = 0x3c6ef372;
    h[3] = 0xa54ff53a;
    h[4] = 0x510e527f;
    h[5] = 0x9b05688c;
    h[6] = 0x1f83d9ab;
    h[7] = 0x5be0cd19;
    return h;
}

struct buffer_state
{
    char* p;
    size_t len;
    size_t total_len;
    int single_one_delivered; /* bool */
    int total_len_delivered; /* bool */
};

unsigned right_rot(unsigned value, unsigned count)
{
    /*
     * Defined behaviour in standard C for all count where 0 < count < 32,
     * which is what we need here.
     */

    value &= mask;
    int hold1 = (value >> count) & mask;
    int hold2 = (value << (32 - count)) & mask;
    int hold = (hold1 | hold2) & mask;
    return hold;
}

void init_buf_state(struct buffer_state * state, char* input, size_t len)
{
    state->p = input;
    state->len = len;
    state->total_len = len;
    state->single_one_delivered = 0;
    state->total_len_delivered = 0;
}

/* Return value: bool */
int calc_chunk(char* chunk, struct buffer_state * state)
{
    size_t space_in_chunk;

    if(state->total_len_delivered)
    {
        return 0;
    }

    if(state->len >= CHUNK_SIZE)
    {
        memcpy(chunk, state->p, CHUNK_SIZE);
        state->p += CHUNK_SIZE;
        state->len -= CHUNK_SIZE;
        return 1;
    }

    memcpy(chunk, state->p, state->len);
    chunk += state->len;
    space_in_chunk = CHUNK_SIZE - state->len;
    state->p += state->len;
    state->len = 0;

    /* If we are here, space_in_chunk is one at minimum. */
    if(!state->single_one_delivered)
    {
        chunk[0] = 0x80;
        chunk += 1;
        space_in_chunk -= 1;
        state->single_one_delivered = 1;
    }

    /*
     * Now:
     * - either there is enough space left for the total length, and we can conclude,
     * - or there is too little space left, and we have to pad the rest of this chunk with zeroes.
     * In the latter case, we will conclude at the next invocation of this function.
     */
    if(space_in_chunk >= TOTAL_LEN_LEN)
    {
        size_t left = space_in_chunk - TOTAL_LEN_LEN;
        size_t len = state->total_len;
        int i;
        memset(chunk, 0x00, left);
        chunk += left;
        /* Storing of len * 8 as a big endian 64-bit without overflow. */
        chunk[7] = (len << 3);
        len >>= 5;

        for(i = 6; i >= 0; i -= 1)
        {
            chunk[i] = len;
            len >>= 8;
        }

        state->total_len_delivered = 1;
    }
    else
    {
        memset(chunk, 0x00, space_in_chunk);
    }

    return 1;
}

/*
 * Limitations:
 * - Since input is a pointer in RAM, the data to hash should be in RAM, which could be a problem
 *   for large data sizes.
 * - SHA algorithms theoretically operate on bit strings. However, this implementation has no support
 *   for bit string lengths that are not multiples of eight, and it really operates on arrays of bytes.
 *   In particular, the len parameter is a number of bytes.
 */
void calc_sha_256(char* hash, char* input, size_t len)
{
    /*
     * Note 1: All integers (expect indexes) are 32-bit unsigned integers and addition is calculated modulo 2^32.
     * Note 2: For each round, there is one round constant k[i] and one entry in the message schedule array w[i], 0 = i = 63
     * Note 3: The compression function uses 8 working variables, a through h
     * Note 4: Big-endian convention is used when expressing the constants in this pseudocode,
     *     and when parsing message block data from bytes to words, for example,
     *     the first word of the input message "abc" after padding is 0x61626380
     */
    /*
     * Initialize hash values:
     * (first 32 bits of the fractional parts of the square roots of the first 8 primes 2..19):
     */
    unsigned* k = init_k();
    unsigned* h = init_h();
    unsigned i;
    unsigned j;
    unsigned hold1;
    unsigned hold2;
    /* 512-bit chunks is what we will operate on. */
    char* chunk = calloc(65, sizeof(char));
    struct buffer_state* state = calloc(1, sizeof(struct buffer_state));
    init_buf_state(state, input, len);
    unsigned* ah = calloc(9, sizeof(unsigned));
    char *p;
    unsigned* w = calloc(17, sizeof(unsigned));
    unsigned s0;
    unsigned s1;
    unsigned ch;
    unsigned temp1;
    unsigned temp2;
    unsigned maj;

    while(calc_chunk(chunk, state))
    {
        p = chunk;

        /* Initialize working variables to current hash value: */
        for(i = 0; i < 8; i += 1)
        {
            ah[i] = h[i];
        }

        /* Compression function main loop: */
        for(i = 0; i < 4; i += 1)
        {
            /*
             * The w-array is really w[64], but since we only need
             * 16 of them at a time, we save stack by calculating
             * 16 at a time.
             *
             * This optimization was not there initially and the
             * rest of the comments about w[64] are kept in their
             * initial state.
             */
            /*
             * create a 64-entry message schedule array w[0..63] of 32-bit words
             * (The initial values in w[0..63] don't matter, so many implementations zero them here)
             * copy chunk into first 16 words w[0..15] of the message schedule array
             */

            for(j = 0; j < 16; j += 1)
            {
                if(i == 0)
                {
                    w[j] = ((p[0] & 0xFF) << 24) | ((p[1] & 0xFF) << 16) | ((p[2] & 0xFF) << 8) | (p[3] & 0xFF);
                    p += 4;
                }
                else
                {
                    /* Extend the first 16 words into the remaining 48 words w[16..63] of the message schedule array: */
                    hold1 = (j + 1) & 0xf;
                    hold2 = w[hold1];
                    s0 = right_rot(hold2, 7) ^ right_rot(hold2, 18) ^ ((hold2 & mask) >> 3);

                    hold1 = (j + 14) & 0xf;
                    hold2 = w[hold1];
                    s1 = right_rot(hold2, 17) ^ right_rot(hold2, 19) ^ ((hold2 & mask) >> 10);

                    w[j] += s0 + w[(j + 9) & 0xf] + s1;
                }

                s1 = right_rot(ah[4], 6) ^ right_rot(ah[4], 11) ^ right_rot(ah[4], 25);
                ch = (ah[4] & ah[5]) ^ (~ah[4] & ah[6]);
                temp1 = ah[7] + s1 + ch + k[i << 4 | j] + w[j];
                s0 = right_rot(ah[0], 2) ^ right_rot(ah[0], 13) ^ right_rot(ah[0], 22);
                maj = (ah[0] & ah[1]) ^ (ah[0] & ah[2]) ^ (ah[1] & ah[2]);
                temp2 = s0 + maj;
                ah[7] = ah[6];
                ah[6] = ah[5];
                ah[5] = ah[4];
                ah[4] = ah[3] + temp1;
                ah[3] = ah[2];
                ah[2] = ah[1];
                ah[1] = ah[0];
                ah[0] = temp1 + temp2;
            }
        }

        /* Add the compressed chunk to the current hash value: */
        for(i = 0; i < 8; i +=  1)
        {
            h[i] += ah[i];
        }
    }

    /* Produce the final hash value (big-endian): */
    i = 0;
    for(j = 0; i < 8; i += 1)
    {
        hash[j] = ((h[i] >> 24) & 0xFF);
        j += 1;
        hash[j] = ((h[i] >> 16) & 0xFF);
        j += 1;
        hash[j] = ((h[i] >> 8) & 0xFF);
        j += 1;
        hash[j] = (h[i] & 0xFF);
        j += 1;
    }
}

struct list
{
    int found;
    char* name;
    FILE* f;
    size_t size;
    char* buffer;
    char* hash;
    struct list* next;
};

void bad_checkfile(char* filename)
{
    fputs(filename, stdout);
    fputs(": no properly formatted SHA256 checksum lines found\n", stdout);
}

int hex2int(char c, char* filename)
{
    if((c >= '0') && (c <= '9')) return (c - 48);
    else if((c >= 'a') && (c <= 'f')) return (c - 87);
    else if ((c >= 'F') && (c <= 'F')) return (c - 55);
    bad_checkfile(filename);
    exit(EXIT_FAILURE);
}

char* hash_to_string(char* a)
{
    char* table = "0123456789abcdef";
    char* r = calloc(66, sizeof(char));
    int i;
    int j = 0;
    int c;
    for(i = 0; i < 32; i += 1)
    {
        c = a[i] & 0xFF;
        r[j] = table[(c >> 4)];
        j += 1;
        r[j] = table[(c & 0xF)];
        j += 1;
    }
    return r;
}

int check_file(char* b, char* filename)
{
    int r = TRUE;
    size_t i;
    int hold1;
    int hold2;
    FILE* f;
    char* name = calloc(4097, sizeof(char));
    char* hash = calloc(33, sizeof(char));
    char* hash2 = calloc(33, sizeof(char));
    size_t size;
    char* buffer;
go_again:
    for(i = 0; i < 32; i += 1)
    {
        hold1 = hex2int(b[0], filename);
        hold2 = hex2int(b[1], filename);
        hash[i] = (hold1 << 4) + hold2;
        b += 2;
    }

    if((' ' != b[0]) || (' ' != b[1]))
    {
        bad_checkfile(filename);
        exit(EXIT_FAILURE);
    }

    b += 2;
    for(i = 0; i < 4096; i += 1)
    {
        if('\n' == b[0])
        {
            name[i] = 0;
            b += 1;
            break;
        }
        name[i] = b[0];
        b += 1;
    }

    f = fopen(name, "r");
    if(NULL == f)
    {
        fputs(name, stdout);
        fputs(": No such file or directory\n", stdout);
        exit(EXIT_FAILURE);
    }
    else
    {
        fseek(f, 0, SEEK_END);
        size = ftell(f);
        fseek(f, 0, SEEK_SET);
        buffer = calloc(size + 1, sizeof(char));
        fread(buffer, sizeof(char), size, f);
        calc_sha_256(hash2, buffer, size);
        if(match(hash_to_string(hash), hash_to_string(hash2)))
        {
            fputs(name, stdout);
            fputs(": OK\n", stdout);
        }
        else
        {
            fputs(name, stdout);
            fputs(": FAILED\nWanted:   ", stdout);
            fputs(hash_to_string(hash), stdout);
            fputs("\nReceived: ", stdout);
            fputs(hash_to_string(hash2), stdout);
            fputs("\n", stdout);
            r = FALSE;
        }
    }

    if(0 == b[0]) return r;
    goto go_again;
}

/* reverse the linked list */
void reverse(struct list** head)
{
    struct list* prev = NULL;
    struct list* current = *head;
    struct list* next = NULL;
    while (current != NULL)
    {
        next = current->next;
        current->next = prev;
        prev = current;
        current = next;
    }
    *head = prev;
}

int main(int argc, char **argv)
{
    struct list* l = NULL;
    struct list* t = NULL;
    size_t read;
    int check = FALSE;
    int r = TRUE;
    char* output_file = "";
    FILE* output = stdout;
    mask = (0x7FFFFFFF << 1) | 0x1;

    int i = 1;
    while(i <= argc)
    {
        if(NULL == argv[i])
        {
            i += 1;
        }
        else if(match(argv[i], "-c") || match(argv[i], "--check"))
        {
            check = TRUE;
            i += 1;
        }
        else if (match(argv[i], "-o") || match(argv[i], "--output"))
        {
            output_file = argv[i + 1];
            i += 2;
            if (output != stdout) {
                fclose(output);
            }
            output = fopen(output_file, "w");
            require(output != NULL, "Output file cannot be opened!\n");
        }
        else if(match(argv[i], "-h") || match(argv[i], "--help"))
        {
            fputs("Usage: sha256sum <file> [--check]\n", stdout);
            exit(EXIT_SUCCESS);
        }
        else
        {
            t = calloc(1, sizeof(struct list));
            t->hash = calloc(33, sizeof(char));
            t->name = argv[i];
            t->f = fopen(t->name, "r");
            if(NULL != t->f)
            {
                t->found = TRUE;
                fseek(t->f, 0, SEEK_END);
                t->size = ftell(t->f);
                fseek(t->f, 0, SEEK_SET);
                t->buffer = calloc(t->size + 1, sizeof(char));
                read = fread(t->buffer, sizeof(char), t->size, t->f);
            }
            t->next = l;
            l = t;
            i += 1;
        }
    }
    reverse(&l);

    if(check)
    {
        while(NULL != l)
        {
            if(l->found)
            {
                if(!check_file(l->buffer, l->name)) r = FALSE;
            }
            else
            {
                fputs(l->name, stdout);
                fputs(": No such file or directory\n", stdout);
                exit(EXIT_FAILURE);
            }
            l = l->next;
        }
    }
    else
    {
        while(NULL != l)
        {
            if(l->found)
            {
                calc_sha_256(l->hash, l->buffer, l->size);
                fputs(hash_to_string(l->hash), output);
                fputs("  ", output);
                fputs(l->name, output);
                fputc('\n', output);
            }
            else
            {
                fputs(l->name, output);
                fputs(": No such file or directory\n", output);
                exit(EXIT_FAILURE);
            }
            l = l->next;
        }
    }
    if (output != stdout) {
        fclose(output);
    }

    if(r) return 0;
    else return 1;
}

File /src/mkdir.c

Source file is 'src/mkdir.c'.
URL: https://github.com/FransFaase/MES-replacement/blob/64abad6a2a55cbef00ffa065e1c019c6a1932acf/src/mkdir.c
/* Copyright (C) 2009 Tim Kientzle
 * Copyright (C) 2021 Jeremiah Orians
 * Copyright (C) 2021 Andrius Å tikonas
 * This file is part of mescc-tools-extra
 *
 * mescc-tools-extra is free software: you can redistribute it and/or modify
 * it under the terms of the GNU General Public License as published by
 * the Free Software Foundation, either version 3 of the License, or
 * (at your option) any later version.
 *
 * mescc-tools-extra is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 * GNU General Public License for more details.
 *
 * You should have received a copy of the GNU General Public License
 * along with mescc-tools-extra.  If not, see <http://www.gnu.org/licenses/>.
 */

/********************************************************************************
 * "mkdir" can be used to create empty directories. It can also create          *
 * required parent directories.                                                 *
 *                                                                              *
 * Usage: mkdir <dir1>/<dir2> <dir3>                                            *
 *                                                                              *
 * These are all highly standard and portable headers.                          *
 ********************************************************************************/
#include <stdio.h>
#include <string.h>

/* This is for mkdir(); this may need to be changed for some platforms. */
#include <sys/stat.h>  /* For mkdir() */
#include <stdlib.h>
#include "bootstrappable.c"

#define MAX_STRING 4096

int parents;

/* Create a directory, including parent directories as necessary. */
void create_dir(char *pathname, int mode)
{
    char *p;
    int r;

    /* Strip trailing '/' */
    if(pathname[strlen(pathname) - 1] == '/')
    {
        pathname[strlen(pathname) - 1] = '\0';
    }

    /* Try creating the directory. */
    printf("mkdir %s %d : %d\n", pathname, mode, r);
    r = mkdir(pathname, mode);
    printf("mkdir %s %d : %d\n", pathname, mode, r);

    if((r != 0) && parents)
    {
        /* On failure, try creating parent directory. */
        p = strrchr(pathname, '/');

        if(p != NULL)
        {
            p[0] = '\0';
            create_dir(pathname, mode);
            p[0] = '/';
            r = mkdir(pathname, mode);
        }
    }

    if((r != 0) && !parents)
    {
        fputs("Could not create directory ", stderr);
        fputs(pathname, stderr);
        fputc('\n', stderr);
        exit(EXIT_FAILURE);
    }
}

int main(int argc, char **argv)
{
    /* This adds some quasi-compatibility with GNU coreutils' mkdir. */
    parents = FALSE;
    int i;
    int mode = 0755;
    char* raw_mode = NULL;

    for(i = 1; argc > i; i = i + 1)
    {
        if(match(argv[i], "-p") || match(argv[i], "--parents"))
        {
            parents = TRUE;
        }
        else if(match(argv[i], "-h") || match(argv[i], "--help"))
        {
            fputs("mescc-tools-extra mkdir supports --parents and --mode 0750 "
                  "but the last argument always must be the directly to make\n", stdout);
            return 0;
        }
        else if(match(argv[i], "-v") || match(argv[i], "--version"))
        {
            fputs("mescc-tools-extra mkdir version 1.4.0\n", stdout);
            return 0;
        }
        else if(match(argv[i], "-m") || match(argv[i], "--mode"))
        {
            raw_mode = calloc(MAX_STRING, sizeof(char));
            require(raw_mode != NULL, "Memory initialization of mode failed\n");
            /* We need to indicate it is octal */
            strcat(raw_mode, "0");
            strcat(raw_mode, argv[i+1]);
            mode = strtoint(raw_mode);
            i = i + 1;
        }
        else create_dir(argv[i], mode);
    }

    return 0;
}

File /src/cp.c

Source file is 'src/cp.c'.
URL: https://github.com/FransFaase/MES-replacement/blob/64abad6a2a55cbef00ffa065e1c019c6a1932acf/src/cp.c
/* Copyright (C) 2020 fosslinux
 * This file is part of mescc-tools
 *
 * mescc-tools is free software: you can redistribute it and/or modify
 * it under the terms of the GNU General Public License as published by
 * the Free Software Foundation, either version 3 of the License, or
 * (at your option) any later version.
 *
 * mescc-tools is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 * GNU General Public License for more details.
 *
 * You should have received a copy of the GNU General Public License
 * along with mescc-tools.  If not, see <http://www.gnu.org/licenses/>.
 */

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include <fcntl.h>
#include "bootstrappable.c"

#define MAX_STRING 4096
#define MAX_ARRAY 256

/* Globals */
int verbose;

/* UTILITY FUNCTIONS */

/* Function to find a character's position in a string (last match) */
int find_last_char_pos(char* string, char a)
{
    int i = strlen(string) - 1;
    if(i < 0) return i;
    while(i >= 0)
    {
        /*
         * This conditional should be in the while conditional but we are
         * running into the M2-Planet short-circuit bug.
         */
        if(a == string[i]) break;
        i = i - 1;
    }
    return i;
}

/* Function to find the length of a char**; an array of strings */
int array_length(char** array)
{
    int length = 0;
    while(array[length] != NULL)
    {
        length = length + 1;
    }
    return length;
}

/* PROCESSING FUNCTIONS */

char* directory_dest(char* dest, char* source, int require_directory)
{
    /*
     * First, check if it is a directory to copy to.
     * We have two ways of knowing this:
     * - If the destination ends in a slash, the user has explicitly said
     *   it is a directory.
     * - Normally we would use stat() but we don't want to force support for
     *   that syscall onto the kernel, so we just attempt to chdir() into it
     *   and if it works then it must be a directory. A bit hacky, bit it
     *   works.
     */
    int isdirectory = FALSE;
    if(dest[strlen(dest) - 1] == '/')
    {
        isdirectory = TRUE;
    }
    if(!isdirectory)
    { /* Use the other testing method */
        /*
         * Get the current path so that we can chdir back to it if it does
         * chdir successfully.
         */
        char* current_path = calloc(MAX_STRING, sizeof(char));
        require(current_path != NULL, "Memory initialization of current_path in directory_dest failed\n");
        getcwd(current_path, MAX_STRING);
        require(!match("", current_path), "getcwd() failed\n");
        /*
         * chdir expects an absolute path.
         * If the first character is / then it is already absolute, otherwise
         * it is relative and needs to be changed (by appending current_path
         * to the dest path).
         */
        char* chdir_dest = calloc(MAX_STRING, sizeof(char));
        require(chdir_dest != NULL, "Memory initialization of chdir_dest in directory_dest failed\n");
        if(dest[0] != '/')
        { /* The path is relative, append current_path */
            strcat(chdir_dest, current_path);
            strcat(chdir_dest, "/");
            strcat(chdir_dest, dest);
        }
        else
        { /* The path is absolute */
            strcpy(chdir_dest, dest);
        }
        if(0 <= chdir(chdir_dest))
        { /* chdir returned successfully */
            /*
             * But because of M2-Planet, that doesn't mean anything actually
             * happened, check that before we go any further.
             */
            char* new_path = calloc(MAX_STRING, sizeof(char));
            require(new_path != NULL, "Memory initialization of new_path in directory_dest failed\n");
            getcwd(new_path, MAX_STRING);
            if(!match(current_path, new_path))
            {
                isdirectory = TRUE;
                chdir(current_path);
            }
        }
        free(chdir_dest);
        free(current_path);
    }

    /*
     * If it isn't a directory, and we require one, error out.
     * Otherwise, just return what we were given, we're done here.
     */
    if(require_directory) require(isdirectory, "Provide a directory destination for multiple source files\n");
    if(!isdirectory) return dest;

    /* If it is, we need to make dest a full path */
    /* 1. Get the basename of source */
    char* basename = calloc(MAX_STRING, sizeof(char));
    require(basename != NULL, "Memory initialization of basename in directory_dest failed\n");
    int last_slash_pos = find_last_char_pos(source, '/');
    if(last_slash_pos >= 0)
    { /* Yes, there is a slash in it, copy over everything after that pos */
        unsigned spos; /* source pos */
        unsigned bpos = 0; /* basename pos */
        /* Do the actual copy */
        for(spos = last_slash_pos + 1; spos < strlen(source); spos = spos + 1)
        {
            basename[bpos] = source[spos];
            bpos = bpos + 1;
        }
    }
    else
    { /* No, there is no slash in it, hence the basename is just the source */
        strcpy(basename, source);
    }
    /* 2. Ensure our dest (which is a directory) has a trailing slash */
    if(dest[strlen(dest) - 1] != '/')
    {
        strcat(dest, "/");
    }
    /* 3. Add the basename to the end of the directory */
    strcat(dest, basename);
    free(basename);

    /* Now we have a returnable path! */
    return dest;
}

void copy_file(char* source, char* dest)
{
    if(verbose)
    { /* Output message */
        /* Of the form 'source' -> 'dest' */
        fputs("'", stdout);
        fputs(source, stdout);
        fputs("' -> '", stdout);
        fputs(dest, stdout);
        fputs("'\n", stdout);
    }

    /* Open source and dest as FILE*s */
    FILE* fsource = fopen(source, "r");
    if(fsource == NULL)
    {
        fputs("Error opening source file ", stderr);
        fputs(source, stderr);
        fputc('\n', stderr);
        exit(EXIT_FAILURE);
    }
    FILE* fdest = fopen(dest, "w");
    if(fdest < 0)
    {
        fputs("Error opening destination file", stderr);
        fputs(dest, stderr);
        fputc('\n', stderr);
        exit(EXIT_FAILURE);
    }

    /*
     * The following loop reads a character from the source and writes it to the
     * dest file. This is all M2-Planet supports.
     */
    int c = fgetc(fsource);
    while(c != EOF)
    {
        fputc(c, fdest);
        c = fgetc(fsource);
    }

    /* Cleanup */
    fclose(fsource);
    fclose(fdest);
}

int main(int argc, char** argv)
{
    /* Initialize variables */
    char** sources = calloc(MAX_ARRAY, sizeof(char*));
    require(sources != NULL, "Memory initialization of sources failed\n");
    int sources_index = 0;
    char* dest = NULL;

    /* Set defaults */
    verbose = FALSE;

    int i = 1;
    int j;
    int args_found;
    /* Loop arguments */
    while(i <= argc)
    {
        if(NULL == argv[i])
        { /* Ignore and continue */
            i = i + 1;
        }
        else if(match(argv[i], "-h") || match(argv[i], "--help"))
        {
            fputs("Usage: ", stdout);
            fputs(argv[0], stdout);
            fputs(" [-h | --help] [-V | --version] [-v | --verbose] source1 source2 sourcen destination\n", stdout);
            exit(EXIT_SUCCESS);
        }
        else if(match(argv[i], "-V") || match(argv[i], "--version"))
        { /* Output version */
            fputs("cp version 1.4.0\n", stdout);
            exit(EXIT_SUCCESS);
        }
        else if(match(argv[i], "-v") || match(argv[i], "--verbose"))
        {
            verbose = TRUE;
            i = i + 1;
        }
        else if(argv[i][0] != '-')
        { /* It is not an option */
            /*
             * We can tell if this is the source file or the destination file
             * through looking *ahead*. If it is the last of this type of argument then
             * it must be the destination. (1 destination, many sources).
             */
            j = i + 1;
            args_found = 0;
            while(j < array_length(argv))
            {
                if(argv[j][0] != '-')
                { /* It's one of these type of arguments */
                    args_found = args_found + 1;
                }
                j = j + 1;
            }
            if(args_found == 0)
            { /* We are setting the destination (there are no more left after this) */
                dest = calloc(MAX_STRING, sizeof(char));
                require(dest != NULL, "Memory initialization of dest failed\n");
                strcpy(dest, argv[i]);
            }
            else
            { /* We are setting a source */
                require(sources_index < MAX_ARRAY, "Too many files\n");
                sources[sources_index] = calloc(MAX_STRING, sizeof(char));
                require(sources[sources_index] != NULL, "Memory initialization of sources[source_index] failed\n");
                strcpy(sources[sources_index], argv[i]);
                sources_index = sources_index + 1;
            }
            i = i + 1;
        }
        else
        { /* Unknown argument */
            fputs("UNKNOWN_ARGUMENT\n", stderr);
            exit(EXIT_FAILURE);
        }
    }

    /* Sanitize values */
    /* Ensure the two values have values */
    /* Another workaround for short-circuit bug */
    int error = FALSE;
    if(sources[0] == NULL) error = TRUE;
    if(error == FALSE) if(match(sources[0], "")) error = TRUE;
    require(!error, "Provide a source file\n");
    error = FALSE;
    if(dest == NULL) error = TRUE;
    if(error == FALSE) if(match(dest, "")) error = TRUE;
    require(!error, "Provide a destination file\n");

    /* Loop through all of the sources, copying each one */
    char* this_dest;
    for(i = 0; i < array_length(sources); i = i + 1)
    {
        /* Convert the dest variable to a full path if it's a directory copying to */
        /*
         * Also, if there is more than one source, we have to be copying to
         * a directory destination...
         */
        if(array_length(sources) == 1)
        {
            dest = directory_dest(dest, sources[i], FALSE);
            copy_file(sources[i], dest);
        }
        else
        {
            this_dest = calloc(MAX_STRING, sizeof(char));
            require(this_dest != NULL, "Memory initalization of this_dest failed\n");
            this_dest = directory_dest(dest, sources[i], TRUE);
            copy_file(sources[i], this_dest);
        }
        /* Perform the actual copy */
        free(sources[i]);
    }

    free(sources);
    free(dest);

    return EXIT_SUCCESS;
}

File /src/chmod.c

Source file is 'src/chmod.c'.
URL: https://github.com/FransFaase/MES-replacement/blob/64abad6a2a55cbef00ffa065e1c019c6a1932acf/src/chmod.c
/* Copyright (C) 2020 fosslinux
 * This file is part of mescc-tools
 *
 * mescc-tools is free software: you can redistribute it and/or modify
 * it under the terms of the GNU General Public License as published by
 * the Free Software Foundation, either version 3 of the License, or
 * (at your option) any later version.
 *
 * mescc-tools is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 * GNU General Public License for more details.
 *
 * You should have received a copy of the GNU General Public License
 * along with mescc-tools.  If not, see <http://www.gnu.org/licenses/>.
 */

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include <fcntl.h>
#include <sys/stat.h>
#include "bootstrappable.c"

/* Define all of the constants */
#define MAX_STRING 4096
#define MAX_ARRAY 256

struct files
{
    char* name;
    struct files* next;
};

/* Globals */
int verbose;

/* PROCESSING FUNCTIONS */
int main(int argc, char** argv)
{
    /* Initialize variables */
    char* mode = NULL;
    struct files* f = NULL;
    struct files* n;
    int ok;

    /* Set defaults */
    verbose = FALSE;

    int i = 1;
    /* Loop arguments */
    while(i <= argc)
    {
        if(NULL == argv[i])
        { /* Ignore and continue */
            i = i + 1;
        }
        else if(match(argv[i], "-h") || match(argv[i], "--help"))
        {
            fputs("Usage: ", stdout);
            fputs(argv[0], stdout);
            fputs(" [-h | --help] [-V | --version] [-v | --verbose]\n", stdout);
            exit(EXIT_SUCCESS);
        }
        else if(match(argv[i], "-V") || match(argv[i], "--version"))
        { /* Output version */
            fputs("chmod version 1.4.0\n", stdout);
            exit(EXIT_SUCCESS);
        }
        else if(match(argv[i], "-v") || match(argv[i], "--verbose"))
        {
            verbose = TRUE;
            i = i + 1;
        }
        else
        { /* It must be the file or the mode */
            if(mode == NULL)
            { /* Mode always comes first */
                mode = calloc(MAX_STRING, sizeof(char));
                require(mode != NULL, "Memory initialization of mode failed\n");
                /* We need to indicate it is octal */
                strcat(mode, "0");
                strcat(mode, argv[i]);
            }
            else
            { /* It's a file, as the mode is already done */
                n = calloc(1, sizeof(struct files));
                require(n != NULL, "Memory initialization of files failed\n");
                n->next = f;
                f = n;
                f->name = argv[i];
            }
            i = i + 1;
        }
    }

    /* Ensure the two values have values */
    require(mode != NULL, "Provide a mode\n");
    require(f != NULL, "Provide a file\n");

    /* Convert the mode str into octal */
    int omode = strtoint(mode);

    /* Loop over files to be operated on */
    while(NULL != f)
    {
        /* Make sure the file can be opened */
        ok = access(f->name, 0);
        if(ok != 0)
        {
            fputs("The file: ", stderr);
            fputs(f->name, stderr);
            fputs(" does not exist\n", stderr);
            exit(EXIT_FAILURE);
        }

        /* Verbose message */
        if(verbose)
        {
            fputs("mode of '", stdout);
            fputs(f->name, stdout);
            fputs("' changed to ", stdout);
            fputs(mode, stdout);
            fputs("\n", stdout);
        }

        /* Perform the chmod */
        chmod(f->name, omode);
        f = f->next;
    }
}

File /src/rm.c

Source file is 'src/rm.c'.
URL: https://github.com/FransFaase/MES-replacement/blob/64abad6a2a55cbef00ffa065e1c019c6a1932acf/src/rm.c
/* Copyright (C) 2021 Jeremiah Orians
 * This file is part of mescc-tools-extra
 *
 * mescc-tools-extra is free software: you can redistribute it and/or modify
 * it under the terms of the GNU General Public License as published by
 * the Free Software Foundation, either version 3 of the License, or
 * (at your option) any later version.
 *
 * mescc-tools-extra is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 * GNU General Public License for more details.
 *
 * You should have received a copy of the GNU General Public License
 * along with mescc-tools-extra.  If not, see <http://www.gnu.org/licenses/>.
 */

/********************************************************************************
 * "rm" can be used to delete files. It can also delete                         *
 * parent directories.                                                          *
 *                                                                              *
 * Usage: rm <dir1>/<file1> <file2>                                             *
 *                                                                              *
 * These are all highly standard and portable headers.                          *
 ********************************************************************************/
#include <stdio.h>
#include <string.h>

/* This is for unlink() ; this may need to be changed for some platforms. */
#include <unistd.h>  /* For unlink() */
#include <stdlib.h>
#include "bootstrappable.c"

void delete_dir(char* name)
{
    int r = unlink(name);
    if(0 != r)
    {
        fputs("unable to delete file: ", stderr);
        fputs(name, stderr);
        fputs(" !!!\n", stderr);
    }
}

int main(int argc, char **argv)
{
    int i;
    for(i = 1; argc > i; i = i + 1)
    {
        delete_dir(argv[i]);
    }

    return 0;
}

File /src/untar.c

Source file is 'src/untar.c'.
URL: https://github.com/FransFaase/MES-replacement/blob/64abad6a2a55cbef00ffa065e1c019c6a1932acf/src/untar.c
/* Copyright (C) 2009 Tim Kientzle
 * Copyright (C) 2021 Jeremiah Orians
 * This file is part of mescc-tools-extra
 *
 * mescc-tools-extra is free software: you can redistribute it and/or modify
 * it under the terms of the GNU General Public License as published by
 * the Free Software Foundation, either version 3 of the License, or
 * (at your option) any later version.
 *
 * mescc-tools-extra is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 * GNU General Public License for more details.
 *
 * You should have received a copy of the GNU General Public License
 * along with mescc-tools-extra.  If not, see <http://www.gnu.org/licenses/>.
 */

/*
 * "untar" is an extremely simple tar extractor:
 *  * A single C source file, so it should be easy to compile
 *    and run on any system with a C compiler.
 *  * Extremely portable standard C.  The only non-ANSI function
 *    used is mkdir().
 *  * Reads basic ustar tar archives.
 *  * Does not require libarchive or any other special library.
 *
 * To compile: cc -o untar untar.c
 *
 * Usage:  untar <archive>
 *
 * In particular, this program should be sufficient to extract the
 * distribution for libarchive, allowing people to bootstrap
 * libarchive on systems that do not already have a tar program.
 *
 * To unpack libarchive-x.y.z.tar.gz:
 *    * gunzip libarchive-x.y.z.tar.gz
 *    * untar libarchive-x.y.z.tar
 *
 * Written by Tim Kientzle, March 2009.
 *
 * Released into the public domain.
 */

/* These are all highly standard and portable headers. */
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

/* This is for mkdir(); this may need to be changed for some platforms. */
#include <sys/stat.h>  /* For mkdir() */
#include "bootstrappable.c"

int FUZZING;
int VERBOSE;
int STRICT;

/* Parse an octal number, ignoring leading and trailing nonsense. */
int parseoct(char const* p, size_t n)
{
    int i = 0;
    int h;

    while(((p[0] < '0') || (p[0] > '7')) && (n > 0))
    {
        p = p + 1;
        n = n - 1;
    }

    while((p[0] >= '0') && (p[0] <= '7') && (n > 0))
    {
        i = i << 3;
        h = p[0];
        i = i + h - 48;
        p = p + 1;
        n = n - 1;
    }

    return i;
}

/* Returns true if this is 512 zero bytes. */
int is_end_of_archive(char const* p)
{
    int n;

    for(n = 511; n >= 0; n = n - 1)
    {
        if(p[n] != 0)
        {
            return FALSE;
        }
    }

    return TRUE;
}

/* Create a directory, including parent directories as necessary. */
void create_dir(char *pathname, int mode)
{
    char *p;
    int r;

    /* Strip trailing '/' */
    if(pathname[strlen(pathname) - 1] == '/')
    {
        pathname[strlen(pathname) - 1] = '\0';
    }

    /* Try creating the directory. */
    if(!FUZZING)
    {
        r = mkdir(pathname, mode);

        if(r != 0)
        {
            /* On failure, try creating parent directory. */
            p = strrchr(pathname, '/');

            if(p != NULL)
            {
                p[0] = '\0';
                create_dir(pathname, 0755);
                p[0] = '/';
                r = mkdir(pathname, mode);
            }
        }

        if(r != 0)
        {
            fputs("Could not create directory ", stderr);
            fputs(pathname, stderr);
            fputc('\n', stderr);
        }
    }
}

/* Create a file, including parent directory as necessary. */
FILE* create_file(char *pathname)
{
    if(FUZZING) return NULL;
    FILE* f;
    f = fopen(pathname, "w");

    if(f == NULL)
    {
        /* Try creating parent dir and then creating file. */
        char *p = strrchr(pathname, '/');

        if(p != NULL)
        {
            p[0] = '\0';
            create_dir(pathname, 0755);
            p[0] = '/';
            f = fopen(pathname, "w");
        }
    }

    return f;
}

/* Verify the tar checksum. */
int verify_checksum(char const* p)
{
    int n;
    int u = 0;
    unsigned h;

    for(n = 0; n < 512; n = n + 1)
    {
        /* Standard tar checksum adds unsigned bytes. */
        if((n < 148) || (n > 155))
        {
            h = p[n];
            u = u + h;
        }
        else
        {
            u = u + 0x20;
        }
    }

    int r = parseoct(p + 148, 8);

    return (u == r);
}

/* Extract a tar archive. */
int untar(FILE *a, char const* path)
{
    char* target = calloc(101, sizeof(char));
    char* buff = calloc(514, sizeof(char));
    FILE* f = NULL;
    size_t bytes_read;
    size_t bytes_written;
    int symlink_ret;
    int filesize;
    int op;
    if(VERBOSE)
    {
        printf("Extracting from %s\n", path);
    }

    while(TRUE)
    {
        memset(buff, 0, 514);
        bytes_read = fread(buff, sizeof(char), 512, a);

        if(bytes_read < 512)
        {
            fputs("Short read on ", stderr);
            fputs(path, stderr);
            fputs(": expected 512, got ", stderr);
            fputs(int2str(bytes_read, 10, TRUE), stderr);
            fputc('\n', stderr);
            return FALSE;
        }

        if(is_end_of_archive(buff))
        {
            if(VERBOSE)
            {
                printf("End of %s\n", path);
            }
            return TRUE;
        }

        if(!verify_checksum(buff))
        {
            fputs("Checksum failure\n", stderr);
            return FALSE;
        }

        filesize = parseoct(buff + 124, 12);

        /**
         * Long linknames are stored in a special file with the name "././@LongLink"
         * and are unsupported by this program.
         */
        if (strcmp(buff, "././@LongLink") == 0) {
            fputs("unable to create long symlink\n", stderr);
            exit(EXIT_FAILURE);
        }

        op = buff[156];
        if('1' == op)
        {
            if(STRICT)
            {
                fputs("unable to create hardlinks\n", stderr);
                exit(EXIT_FAILURE);
            }
            printf(" Ignoring hardlink %s", buff);
        }
        else if('2' == op)
        {
            memcpy(target, buff + 157, 100);
            target[100] = '\0';
            if(VERBOSE)
            {
                printf(" Extracting file %s\n", buff);
            }
            if(!FUZZING) {
                symlink_ret = symlink(target, buff);
                if (symlink_ret != 0) {
                    fputs("Failed to create symlink\n", stderr);
                    if(STRICT) exit(EXIT_FAILURE);
                }
            }
        }
        else if('3' == op)
        {
            if(STRICT)
            {
                fputs("unable to create character devices\n", stderr);
                exit(EXIT_FAILURE);
            }
            printf(" Ignoring character device %s\n", buff);
        }
        else if('4' == op)
        {
            if(STRICT)
            {
                fputs("unable to create block devices\n", stderr);
                exit(EXIT_FAILURE);
            }
            printf(" Ignoring block device %s\n", buff);
        }
        else if('5' == op)
        {
            if(VERBOSE)
            {
                printf(" Extracting dir %s\n", buff);
            }
            create_dir(buff, parseoct(buff + 100, 8));
            filesize = 0;
        }
        else if('6' == op)
        {
            if(STRICT)
            {
                fputs("unable to create FIFO\n", stderr);
                exit(EXIT_FAILURE);
            }
            printf(" Ignoring FIFO %s\n", buff);
        }
        else
        {
            if(VERBOSE)
            {
                printf(" Extracting file %s\n", buff);
            }
            f = create_file(buff);
        }

        while(filesize > 0)
        {
            bytes_read = fread(buff, 1, 512, a);

            if(bytes_read < 512)
            {
                fprintf(stderr, "Short read on %s: Expected 512, got %d\n", path, bytes_read);
                return FALSE;
            }

            if(filesize < 512)
            {
                bytes_read = filesize;
            }

            if(f != NULL)
            {
                if(!FUZZING)
                {
                    bytes_written = fwrite(buff, 1, bytes_read, f);
                    if(bytes_written != bytes_read)
                    {
                        fputs("Failed write\n", stderr);
                        fclose(f);
                        f = NULL;
                    }
                }
            }

            filesize = filesize - bytes_read;
        }

        if(f != NULL)
        {
            fclose(f);
            f = NULL;
        }
    }
    return TRUE;
}

struct files_queue
{
    char* name;
    FILE* f;
    struct files_queue* next;
};

int main(int argc, char **argv)
{
    struct files_queue* list = NULL;
    struct files_queue* a;
    STRICT = TRUE;
    FUZZING = FALSE;
    int r;

    int i = 1;
    while (i < argc)
    {
        if(NULL == argv[i])
        {
            i = i + 1;
        }
        else if(match(argv[i], "-f") || match(argv[i], "--file"))
        {
            a = calloc(1, sizeof(struct files_queue));
            require(NULL != a, "failed to allocate enough memory to even get the file name\n");
            a->next = list;
            a->name = argv[i+1];
            require(NULL != a->name, "the --file option requires a filename to be given\n");
            a->f = fopen(a->name, "r");
            if(a->f == NULL)
            {
                fputs("Unable to open ", stderr);
                fputs(a->name, stderr);
                fputc('\n', stderr);
                if(STRICT) exit(EXIT_FAILURE);
            }
            list = a;
            i = i + 2;
        }
        else if(match(argv[i], "--chaos") || match(argv[i], "--fuzz-mode") || match(argv[i], "--fuzzing"))
        {
            FUZZING = TRUE;
            fputs("fuzz-mode enabled, preparing for chaos\n", stderr);
            i = i + 1;
        }
        else if(match(argv[i], "-v") || match(argv[i], "--verbose"))
        {
            VERBOSE = TRUE;
            i = i + 1;
        }

        else if(match(argv[i], "--non-strict") || match(argv[i], "--bad-decisions-mode") || match(argv[i], "--drunk-mode"))
        {
            STRICT = FALSE;
            fputs("non-strict mode enabled, preparing for chaos\n", stderr);
            i = i + 1;
        }
        else if(match(argv[i], "-h") || match(argv[i], "--help"))
        {
            fputs("Usage: ", stderr);
            fputs(argv[0], stderr);
            fputs(" --file $input.gz\n", stderr);
            fputs("--verbose to print list of extracted files\n", stderr);
            fputs("--help to get this message\n", stderr);
            fputs("--fuzz-mode if you wish to fuzz this application safely\n", stderr);
            fputs("--non-strict if you wish to just ignore files not existing\n", stderr);
            exit(EXIT_SUCCESS);
        }
        else
        {
            fputs("Unknown option:", stderr);
            fputs(argv[i], stderr);
            fputs("\nAborting to avoid problems\n", stderr);
            exit(EXIT_FAILURE);
        }
    }

    /* Process the queue one file at a time */
    while(NULL != list)
    {
        r = untar(list->f, list->name);
        fputs("The extraction of ", stderr);
        fputs(list->name, stderr);
        if(r) fputs(" was successful\n", stderr);
        else fputs(" produced errors\n", stderr);
        fclose(list->f);
        list = list->next;
    }

    return 0;
}

File /src/ungz.c

Source file is 'src/ungz.c'.
URL: https://github.com/FransFaase/MES-replacement/blob/64abad6a2a55cbef00ffa065e1c019c6a1932acf/src/ungz.c
/* Copyright (C) 2002-2013 Mark Adler, all rights reserved
 * Copyright (C) 2021 Jeremiah Orians
 * This file is part of mescc-tools-extra
 *
 * mescc-tools-extra is free software: you can redistribute it and/or modify
 * it under the terms of the GNU General Public License as published by
 * the Free Software Foundation, either version 3 of the License, or
 * (at your option) any later version.
 *
 * mescc-tools-extra is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 * GNU General Public License for more details.
 *
 * You should have received a copy of the GNU General Public License
 * along with mescc-tools-extra.  If not, see <http://www.gnu.org/licenses/>.
 */

/* puff.c
 * Copyright (C) 2002-2013 Mark Adler, all rights reserved
 * version 2.3, 21 Jan 2013
 * This software is provided 'as-is', without any express or implied
 * warranty.  In no event will the author be held liable for any damages
 * arising from the use of this software.
 * Permission is granted to anyone to use this software for any purpose,
 * including commercial applications, and to alter it and redistribute it
 * freely, subject to the following restrictions:
 * 1. The origin of this software must not be misrepresented; you must not
 *    claim that you wrote the original software. If you use this software
 *    in a product, an acknowledgment in the product documentation would be
 *    appreciated but is not required.
 * 2. Altered source versions must be plainly marked as such, and must not be
 *    misrepresented as being the original software.
 * 3. This notice may not be removed or altered from any source distribution.
 * Mark Adler    madler@alumni.caltech.edu
 */

/* ungz.c is a gz file decompression utility that leverages puff.c to provide
 * the deflate algorithm with multiple modifications to enable being built by
 * M2-Planet with M2libc.
 *
 *
 * puff.c is a simple inflate written to be an unambiguous way to specify the
 * deflate format.  It is not written for speed but rather simplicity.  As a
 * side benefit, this code might actually be useful when small code is more
 * important than speed, such as bootstrap applications.  For typical deflate
 * data, zlib's inflate() is about four times as fast as puff().  zlib's
 * inflate compiles to around 20K on my machine, whereas puff.c compiles to
 * around 4K on my machine (a PowerPC using GNU cc).  If the faster decode()
 * function here is used, then puff() is only twice as slow as zlib's
 * inflate().
 *
 * All dynamically allocated memory comes from the stack.  The stack required
 * is less than 2K bytes.  This code is compatible with 16-bit int's and
 * assumes that long's are at least 32 bits.  puff.c uses the short data type,
 * assumed to be 16 bits, for arrays in order to conserve memory.  The code
 * works whether integers are stored big endian or little endian.
 *
 * In the comments below are "Format notes" that describe the inflate process
 * and document some of the less obvious aspects of the format.  This source
 * code is meant to supplement RFC 1951, which formally describes the deflate
 * format:
 *
 *    http://www.zlib.org/rfc-deflate.html
 */

/*
 * Change history:
 *
 * 1.0  10 Feb 2002     - First version
 * 1.1  17 Feb 2002     - Clarifications of some comments and notes
 *                      - Update puff() dest and source pointers on negative
 *                        errors to facilitate debugging deflators
 *                      - Remove longest from struct huffman -- not needed
 *                      - Simplify offs[] index in construct()
 *                      - Add input size and checking, using longjmp() to
 *                        maintain easy readability
 *                      - Use short data type for large arrays
 *                      - Use pointers instead of long to specify source and
 *                        destination sizes to avoid arbitrary 4 GB limits
 * 1.2  17 Mar 2002     - Add faster version of decode(), doubles speed (!),
 *                        but leave simple version for readabilty
 *                      - Make sure invalid distances detected if pointers
 *                        are 16 bits
 *                      - Fix fixed codes table error
 *                      - Provide a scanning mode for determining size of
 *                        uncompressed data
 * 1.3  20 Mar 2002     - Go back to lengths for puff() parameters [Gailly]
 *                      - Add a puff.h file for the interface
 *                      - Add braces in puff() for else do [Gailly]
 *                      - Use indexes instead of pointers for readability
 * 1.4  31 Mar 2002     - Simplify construct() code set check
 *                      - Fix some comments
 *                      - Add FIXLCODES #define
 * 1.5   6 Apr 2002     - Minor comment fixes
 * 1.6   7 Aug 2002     - Minor format changes
 * 1.7   3 Mar 2003     - Added test code for distribution
 *                      - Added zlib-like license
 * 1.8   9 Jan 2004     - Added some comments on no distance codes case
 * 1.9  21 Feb 2008     - Fix bug on 16-bit integer architectures [Pohland]
 *                      - Catch missing end-of-block symbol error
 * 2.0  25 Jul 2008     - Add #define to permit distance too far back
 *                      - Add option in TEST code for puff to write the data
 *                      - Add option in TEST code to skip input bytes
 *                      - Allow TEST code to read from piped stdin
 * 2.1   4 Apr 2010     - Avoid variable initialization for happier compilers
 *                      - Avoid unsigned comparisons for even happier compilers
 * 2.2  25 Apr 2010     - Fix bug in variable initializations [Oberhumer]
 *                      - Add const where appropriate [Oberhumer]
 *                      - Split if's and ?'s for coverage testing
 *                      - Break out test code to separate file
 *                      - Move NIL to puff.h
 *                      - Allow incomplete code only if single code length is 1
 *                      - Add full code coverage test to Makefile
 * 2.3  21 Jan 2013     - Check for invalid code length codes in dynamic blocks
 * ??   22 May 2021     - Convert to M2-Planet C subset for bootstrapping purposes.
 */

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include "bootstrappable.c"

/*
 * Maximums for allocations and loops.  It is not useful to change these --
 * they are fixed by the deflate format.
 */
#define MAXBITS 15              /* maximum bits in a code */
#define MAXLCODES 286           /* maximum number of literal/length codes */
#define MAXDCODES 30            /* maximum number of distance codes */
#define MAXCODES 316            /* maximum codes lengths to read (MAXLCODES+MAXDCODES) */
#define FIXLCODES 288           /* number of fixed literal/length codes */

/* input and output state */
struct state {
    /* output state */
    char *out;                  /* output buffer */
    size_t outlen;              /* available space at out */
    size_t outcnt;              /* bytes written to out so far */

    /* input state */
    char *in;                   /* input buffer */
    size_t inlen;               /* available input at in */
    size_t incnt;               /* bytes read so far */
    int bitbuf;                 /* bit buffer */
    int bitcnt;                 /* number of bits in bit buffer */
};

/*
 * Return need bits from the input stream.  This always leaves less than
 * eight bits in the buffer.  bits() works properly for need == 0.
 *
 * Format notes:
 *
 * - Bits are stored in bytes from the least significant bit to the most
 *   significant bit.  Therefore bits are dropped from the bottom of the bit
 *   buffer, using shift right, and new bytes are appended to the top of the
 *   bit buffer, using shift left.
 */
int bits(struct state *s, int need)
{
    long val;           /* bit accumulator (can use up to 20 bits) */
    long hold;

    /* load at least need bits into val */
    val = s->bitbuf;
    while (s->bitcnt < need)
    {
        if (s->incnt == s->inlen)
        {
            fputs("out of input\n", stderr);
            exit(EXIT_FAILURE);
        }
        hold = (s->in[s->incnt] & 0xFF);
        s->incnt = s->incnt + 1;
        val = val | (hold << s->bitcnt);  /* load eight bits */
        s->bitcnt = s->bitcnt + 8;
    }

    /* drop need bits and update buffer, always zero to seven bits left */
    s->bitbuf = (val >> need);
    s->bitcnt = s->bitcnt - need;

    /* return need bits, zeroing the bits above that */
    val = (val & ((1 << need) - 1));
    #if defined(DEBUG)
        fputs(int2str(val, 16, FALSE), stderr);
        fputs(" : bits\n", stderr);
    #endif
    return val;
}

/*
 * Process a stored block.
 *
 * Format notes:
 *
 * - After the two-bit stored block type (00), the stored block length and
 *   stored bytes are byte-aligned for fast copying.  Therefore any leftover
 *   bits in the byte that has the last bit of the type, as many as seven, are
 *   discarded.  The value of the discarded bits are not defined and should not
 *   be checked against any expectation.
 *
 * - The second inverted copy of the stored block length does not have to be
 *   checked, but it's probably a good idea to do so anyway.
 *
 * - A stored block can have zero length.  This is sometimes used to byte-align
 *   subsets of the compressed data for random access or partial recovery.
 */
int stored(struct state *s)
{
    unsigned len;       /* length of stored block */

    /* discard leftover bits from current byte (assumes s->bitcnt < 8) */
    s->bitbuf = 0;
    s->bitcnt = 0;

    /* get length and check against its one's complement */
    if ((s->incnt + 4) > s->inlen) return 2;    /* not enough input */
    len = s->in[s->incnt];
    s->incnt = s->incnt + 1;
    len = len | (s->in[s->incnt] << 8);
    s->incnt = s->incnt + 1;
    if(s->in[s->incnt] != (~len & 0xff)) return -2;                              /* didn't match complement! */
    s->incnt = s->incnt + 1;
    if(s->in[s->incnt] != ((~len >> 8) & 0xff)) return -2;                              /* didn't match complement! */
    s->incnt = s->incnt + 1;

    /* copy len bytes from in to out */
    if ((s->incnt + len) > s->inlen) return 2;                               /* not enough input */
    if (s->out != 0)
    {
        if ((s->outcnt + len) > s->outlen) return 1;                           /* not enough output space */
        while (0 != len)
        {
            len = len - 1;
            s->out[s->outcnt] = s->in[s->incnt];
            s->outcnt = s->outcnt + 1;
            s->incnt = s->incnt + 1;
        }
    }
    else
    {                                      /* just scanning */
        s->outcnt = s->outcnt + len;
        s->incnt = s->incnt + len;
    }

    /* done with a valid stored block */
    return 0;
}

/*
 * Huffman code decoding tables.  count[1..MAXBITS] is the number of symbols of
 * each length, which for a canonical code are stepped through in order.
 * symbol[] are the symbol values in canonical order, where the number of
 * entries is the sum of the counts in count[].  The decoding process can be
 * seen in the function decode() below.
 */
struct huffman
{
    int *count;       /* number of symbols of each length */
    int *symbol;      /* canonically ordered symbols */
};

/*
 * Decode a code from the stream s using huffman table h.  Return the symbol or
 * a negative value if there is an error.  If all of the lengths are zero, i.e.
 * an empty code, or if the code is incomplete and an invalid code is received,
 * then -10 is returned after reading MAXBITS bits.
 *
 * Format notes:
 *
 * - The codes as stored in the compressed data are bit-reversed relative to
 *   a simple integer ordering of codes of the same lengths.  Hence below the
 *   bits are pulled from the compressed data one at a time and used to
 *   build the code value reversed from what is in the stream in order to
 *   permit simple integer comparisons for decoding.  A table-based decoding
 *   scheme (as used in zlib) does not need to do this reversal.
 *
 * - The first code for the shortest length is all zeros.  Subsequent codes of
 *   the same length are simply integer increments of the previous code.  When
 *   moving up a length, a zero bit is appended to the code.  For a complete
 *   code, the last code of the longest length will be all ones.
 *
 * - Incomplete codes are handled by this decoder, since they are permitted
 *   in the deflate format.  See the format notes for fixed() and dynamic().
 */
int decode(struct state *s, struct huffman *h)
{
    int len;            /* current number of bits in code */
    int code = 0;       /* len bits being decoded */
    int first = 0;      /* first code of length len */
    int count;          /* number of codes of length len */
    int index = 0;      /* index of first code of length len in symbol table */
    long hold;

    for (len = 1; len <= MAXBITS; len = len + 1)
    {
        hold = bits(s, 1);              /* get next bit */
        code = code | hold;
        count = h->count[len];
        if ((code - count) < first)
        {
            hold = index + (code - first);
            return h->symbol[hold]; /* if length len, return symbol */
        }
        index = index + count;                 /* else update for next length */
        first = first + count;
        first = first << 1;
        code = code << 1;
    }
    return -10;                         /* ran out of codes */
}

/*
 * Given the list of code lengths length[0..n-1] representing a canonical
 * Huffman code for n symbols, construct the tables required to decode those
 * codes.  Those tables are the number of codes of each length, and the symbols
 * sorted by length, retaining their original order within each length.  The
 * return value is zero for a complete code set, negative for an over-
 * subscribed code set, and positive for an incomplete code set.  The tables
 * can be used if the return value is zero or positive, but they cannot be used
 * if the return value is negative.  If the return value is zero, it is not
 * possible for decode() using that table to return an error--any stream of
 * enough bits will resolve to a symbol.  If the return value is positive, then
 * it is possible for decode() using that table to return an error for received
 * codes past the end of the incomplete lengths.
 *
 * Not used by decode(), but used for error checking, h->count[0] is the number
 * of the n symbols not in the code.  So n - h->count[0] is the number of
 * codes.  This is useful for checking for incomplete codes that have more than
 * one symbol, which is an error in a dynamic block.
 *
 * Assumption: for all i in 0..n-1, 0 <= length[i] <= MAXBITS
 * This is assured by the construction of the length arrays in dynamic() and
 * fixed() and is not verified by construct().
 *
 * Format notes:
 *
 * - Permitted and expected examples of incomplete codes are one of the fixed
 *   codes and any code with a single symbol which in deflate is coded as one
 *   bit instead of zero bits.  See the format notes for fixed() and dynamic().
 *
 * - Within a given code length, the symbols are kept in ascending order for
 *   the code bits definition.
 */
int construct(struct huffman *h, int *length, int n)
{
    int symbol;         /* current symbol when stepping through length[] */
    int len;            /* current length when stepping through h->count[] */
    int left;           /* number of possible codes left of current length */
    int* offs;          /* offsets in symbol table for each length */
    offs = calloc(MAXBITS+1, sizeof(int));
    long hold;

    #if defined(DEBUG)
        int i;
        fputs(int2str(n, 16, FALSE), stderr);
        fputs(" : construct 0\n", stderr);

        for(i = 0; i < n; i = i + 1)
        {
            fputs(int2str(length[i], 16, FALSE), stderr);
            fputs(" : construct 2\n", stderr);
        }
    #endif

    /* count number of codes of each length */
    for (len = 0; len <= MAXBITS; len = len + 1)
    {
        h->count[len] = 0;
    }

    for (symbol = 0; symbol < n; symbol = symbol + 1)
    {
        hold = length[symbol];
        h->count[hold] = h->count[hold] + 1;    /* assumes lengths are within bounds */
    }

    if (h->count[0] == n) return 0;             /* no codes! complete, but decode() will fail */

    /* check for an over-subscribed or incomplete set of lengths */
    left = 1;                                   /* one possible code of zero length */
    for (len = 1; len <= MAXBITS; len = len + 1)
    {
        left = left << 1;                       /* one more bit, double codes left */
        left = left - h->count[len];            /* deduct count from possible codes */
        if (left < 0) return left;              /* over-subscribed--return negative */
    }                                           /* left > 0 means incomplete */

    /* generate offsets into symbol table for each length for sorting */
    offs[1] = 0;
    for (len = 1; len < MAXBITS; len = len + 1)
    {
        offs[len + 1] = offs[len] + h->count[len];
    }

    /*
     * put symbols in table sorted by length, by symbol order within each
     * length
     */
    for (symbol = 0; symbol < n; symbol = symbol + 1)
    {
        if (length[symbol] != 0)
        {
            hold = length[symbol];
            hold = offs[hold];
            h->symbol[hold] = symbol;
            hold = length[symbol];
            offs[hold] = offs[hold] + 1;
        }
    }

    /* return zero for complete set, positive for incomplete set */
    return left;
}

/*
 * Decode literal/length and distance codes until an end-of-block code.
 *
 * Format notes:
 *
 * - Compressed data that is after the block type if fixed or after the code
 *   description if dynamic is a combination of literals and length/distance
 *   pairs terminated by and end-of-block code.  Literals are simply Huffman
 *   coded bytes.  A length/distance pair is a coded length followed by a
 *   coded distance to represent a string that occurs earlier in the
 *   uncompressed data that occurs again at the current location.
 *
 * - Literals, lengths, and the end-of-block code are combined into a single
 *   code of up to 286 symbols.  They are 256 literals (0..255), 29 length
 *   symbols (257..285), and the end-of-block symbol (256).
 *
 * - There are 256 possible lengths (3..258), and so 29 symbols are not enough
 *   to represent all of those.  Lengths 3..10 and 258 are in fact represented
 *   by just a length symbol.  Lengths 11..257 are represented as a symbol and
 *   some number of extra bits that are added as an integer to the base length
 *   of the length symbol.  The number of extra bits is determined by the base
 *   length symbol.  These are in the static arrays below, lens[] for the base
 *   lengths and lext[] for the corresponding number of extra bits.
 *
 * - The reason that 258 gets its own symbol is that the longest length is used
 *   often in highly redundant files.  Note that 258 can also be coded as the
 *   base value 227 plus the maximum extra value of 31.  While a good deflate
 *   should never do this, it is not an error, and should be decoded properly.
 *
 * - If a length is decoded, including its extra bits if any, then it is
 *   followed a distance code.  There are up to 30 distance symbols.  Again
 *   there are many more possible distances (1..32768), so extra bits are added
 *   to a base value represented by the symbol.  The distances 1..4 get their
 *   own symbol, but the rest require extra bits.  The base distances and
 *   corresponding number of extra bits are below in the static arrays dist[]
 *   and dext[].
 *
 * - Literal bytes are simply written to the output.  A length/distance pair is
 *   an instruction to copy previously uncompressed bytes to the output.  The
 *   copy is from distance bytes back in the output stream, copying for length
 *   bytes.
 *
 * - Distances pointing before the beginning of the output data are not
 *   permitted.
 *
 * - Overlapped copies, where the length is greater than the distance, are
 *   allowed and common.  For example, a distance of one and a length of 258
 *   simply copies the last byte 258 times.  A distance of four and a length of
 *   twelve copies the last four bytes three times.  A simple forward copy
 *   ignoring whether the length is greater than the distance or not implements
 *   this correctly.  You should not use memcpy() since its behavior is not
 *   defined for overlapped arrays.  You should not use memmove() or bcopy()
 *   since though their behavior -is- defined for overlapping arrays, it is
 *   defined to do the wrong thing in this case.
 */

int* codes_lens(void)
{
    /* Size base for length codes 257..285 */
    int* r = calloc(30, sizeof(int));
    r[0] = 3;
    r[1] = 4;
    r[2] = 5;
    r[3] = 6;
    r[4] = 7;
    r[5] = 8;
    r[6] = 9;
    r[7] = 10;
    r[8] = 11;
    r[9] = 13;
    r[10] = 15;
    r[11] = 17;
    r[12] = 19;
    r[13] = 23;
    r[14] = 27;
    r[15] = 31;
    r[16] = 35;
    r[17] = 43;
    r[18] = 51;
    r[19] = 59;
    r[20] = 67;
    r[21] = 83;
    r[22] = 99;
    r[23] = 115;
    r[24] = 131;
    r[25] = 163;
    r[26] = 195;
    r[27] = 227;
    r[28] = 258;
    return r;
}

int* codes_lext(void)
{
    /* Extra bits for length codes 257..285 */
    int* r = calloc(30, sizeof(int));
    r[0] = 0;
    r[1] = 0;
    r[2] = 0;
    r[3] = 0;
    r[4] = 0;
    r[5] = 0;
    r[6] = 0;
    r[7] = 0;
    r[8] = 1;
    r[9] = 1;
    r[10] = 1;
    r[11] = 1;
    r[12] = 2;
    r[13] = 2;
    r[14] = 2;
    r[15] = 2;
    r[16] = 3;
    r[17] = 3;
    r[18] = 3;
    r[19] = 3;
    r[20] = 4;
    r[21] = 4;
    r[22] = 4;
    r[23] = 4;
    r[24] = 5;
    r[25] = 5;
    r[26] = 5;
    r[27] = 5;
    r[28] = 0;
    return r;
}

int* codes_dists(void)
{
    /* Offset base for distance codes 0..29 */
    int* r = calloc(31, sizeof(int));
    r[0] = 1;
    r[1] = 2;
    r[2] = 3;
    r[3] = 4;
    r[4] = 5;
    r[5] = 7;
    r[6] = 9;
    r[7] = 13;
    r[8] = 17;
    r[9] = 25;
    r[10] = 33;
    r[11] = 49;
    r[12] = 65;
    r[13] = 97;
    r[14] = 129;
    r[15] = 193;
    r[16] = 257;
    r[17] = 385;
    r[18] = 513;
    r[19] = 769;
    r[20] = 1025;
    r[21] = 1537;
    r[22] = 2049;
    r[23] = 3073;
    r[24] = 4097;
    r[25] = 6145;
    r[26] = 8193;
    r[27] = 12289;
    r[28] = 16385;
    r[29] = 24577;
    return r;
}

int* codes_dext(void)
{
    /* Extra bits for distance codes 0..29 */
    int* r = calloc(31, sizeof(int));
    r[0] = 0;
    r[1] = 0;
    r[2] = 0;
    r[3] = 0;
    r[4] = 1;
    r[5] = 1;
    r[6] = 2;
    r[7] = 2;
    r[8] = 3;
    r[9] = 3;
    r[10] = 4;
    r[11] = 4;
    r[12] = 5;
    r[13] = 5;
    r[14] = 6;
    r[15] = 6;
    r[16] = 7;
    r[17] = 7;
    r[18] = 8;
    r[19] = 8;
    r[20] = 9;
    r[21] = 9;
    r[22] = 10;
    r[23] = 10;
    r[24] = 11;
    r[25] = 11;
    r[26] = 12;
    r[27] = 12;
    r[28] = 13;
    r[29] = 13;
    return r;
}

int codes(struct state *s, struct huffman *lencode, struct huffman *distcode)
{
    int symbol;         /* decoded symbol */
    int len;            /* length for copy */
    unsigned dist;      /* distance for copy */
    int* lens = codes_lens();
    int* lext = codes_lext();
    int* dists = codes_dists();
    int* dext = codes_dext();

    /* decode literals and length/distance pairs */
    do
    {
        symbol = decode(s, lencode);
        if (symbol < 0) return symbol;          /* invalid symbol */
        if (symbol < 256)                       /* literal: symbol is the byte */
        {
            /* write out the literal */
            if (s->out != 0)
            {
                if (s->outcnt == s->outlen) return 1;
                s->out[s->outcnt] = symbol;
            }
            s->outcnt = s->outcnt + 1;
        }
        else if (symbol > 256)                  /* length */
        {
            /* get and compute length */
            symbol = symbol - 257;
            if (symbol >= 29) return -10;       /* invalid fixed code */
            len = lens[symbol] + bits(s, lext[symbol]);

            /* get and check distance */
            symbol = decode(s, distcode);
            if (symbol < 0) return symbol;      /* invalid symbol */
            dist = dists[symbol] + bits(s, dext[symbol]);
            if (dist > s->outcnt) return -11;   /* distance too far back */

            /* copy length bytes from distance bytes back */
            if (s->out != 0)
            {
                if (s->outcnt + len > s->outlen) return 1;
                while (0 != len)
                {
                    len = len - 1;
                    if(dist > s->outcnt) s->out[s->outcnt] = 0;
                    else s->out[s->outcnt] = s->out[s->outcnt - dist];
                    s->outcnt = s->outcnt + 1;
                }
            }
            else s->outcnt = s->outcnt + len;
        }
    } while (symbol != 256);            /* end of block symbol */

    /* done with a valid fixed or dynamic block */
    return 0;
}

/*
 * Process a fixed codes block.
 *
 * Format notes:
 *
 * - This block type can be useful for compressing small amounts of data for
 *   which the size of the code descriptions in a dynamic block exceeds the
 *   benefit of custom codes for that block.  For fixed codes, no bits are
 *   spent on code descriptions.  Instead the code lengths for literal/length
 *   codes and distance codes are fixed.  The specific lengths for each symbol
 *   can be seen in the "for" loops below.
 *
 * - The literal/length code is complete, but has two symbols that are invalid
 *   and should result in an error if received.  This cannot be implemented
 *   simply as an incomplete code since those two symbols are in the "middle"
 *   of the code.  They are eight bits long and the longest literal/length\
 *   code is nine bits.  Therefore the code must be constructed with those
 *   symbols, and the invalid symbols must be detected after decoding.
 *
 * - The fixed distance codes also have two invalid symbols that should result
 *   in an error if received.  Since all of the distance codes are the same
 *   length, this can be implemented as an incomplete code.  Then the invalid
 *   codes are detected while decoding.
 */
int fixed(struct state *s)
{
    int* lencnt = calloc((MAXBITS + 1), sizeof(int));
    int* lensym = calloc(FIXLCODES, sizeof(int));
    int* distcnt = calloc((MAXBITS + 1), sizeof(int));
    int* distsym = calloc(MAXDCODES, sizeof(int));
    struct huffman* lencode = calloc(1, sizeof(struct huffman));
    struct huffman* distcode = calloc(1, sizeof(struct huffman));
    int hold;

    /* build fixed huffman tables if first call (may not be thread safe) */
    int symbol;
    int* lengths = calloc(FIXLCODES, sizeof(int));

    /* construct lencode and distcode */
    lencode->count = lencnt;
    lencode->symbol = lensym;
    distcode->count = distcnt;
    distcode->symbol = distsym;

    /* literal/length table */
    for (symbol = 0; symbol < 144; symbol = symbol + 1)
    {
        lengths[symbol] = 8;
    }

    while(symbol < 256)
    {
        lengths[symbol] = 9;
        symbol = symbol + 1;
    }

    while(symbol < 280)
    {
        lengths[symbol] = 7;
        symbol = symbol + 1;
    }

    while(symbol < FIXLCODES)
    {
        lengths[symbol] = 8;
        symbol = symbol + 1;
    }

    construct(lencode, lengths, FIXLCODES);

    /* distance table */
    for (symbol = 0; symbol < MAXDCODES; symbol = symbol + 1)
    {
        lengths[symbol] = 5;
    }

    construct(distcode, lengths, MAXDCODES);

    /* decode data until end-of-block code */
    hold = codes(s, lencode, distcode);
    return hold;
}

/*
 * Process a dynamic codes block.
 *
 * Format notes:
 *
 * - A dynamic block starts with a description of the literal/length and
 *   distance codes for that block.  New dynamic blocks allow the compressor to
 *   rapidly adapt to changing data with new codes optimized for that data.
 *
 * - The codes used by the deflate format are "canonical", which means that
 *   the actual bits of the codes are generated in an unambiguous way simply
 *   from the number of bits in each code.  Therefore the code descriptions
 *   are simply a list of code lengths for each symbol.
 *
 * - The code lengths are stored in order for the symbols, so lengths are
 *   provided for each of the literal/length symbols, and for each of the
 *   distance symbols.
 *
 * - If a symbol is not used in the block, this is represented by a zero as
 *   as the code length.  This does not mean a zero-length code, but rather
 *   that no code should be created for this symbol.  There is no way in the
 *   deflate format to represent a zero-length code.
 *
 * - The maximum number of bits in a code is 15, so the possible lengths for
 *   any code are 1..15.
 *
 * - The fact that a length of zero is not permitted for a code has an
 *   interesting consequence.  Normally if only one symbol is used for a given
 *   code, then in fact that code could be represented with zero bits.  However
 *   in deflate, that code has to be at least one bit.  So for example, if
 *   only a single distance base symbol appears in a block, then it will be
 *   represented by a single code of length one, in particular one 0 bit.  This
 *   is an incomplete code, since if a 1 bit is received, it has no meaning,
 *   and should result in an error.  So incomplete distance codes of one symbol
 *   should be permitted, and the receipt of invalid codes should be handled.
 *
 * - It is also possible to have a single literal/length code, but that code
 *   must be the end-of-block code, since every dynamic block has one.  This
 *   is not the most efficient way to create an empty block (an empty fixed
 *   block is fewer bits), but it is allowed by the format.  So incomplete
 *   literal/length codes of one symbol should also be permitted.
 *
 * - If there are only literal codes and no lengths, then there are no distance
 *   codes.  This is represented by one distance code with zero bits.
 *
 * - The list of up to 286 length/literal lengths and up to 30 distance lengths
 *   are themselves compressed using Huffman codes and run-length encoding.  In
 *   the list of code lengths, a 0 symbol means no code, a 1..15 symbol means
 *   that length, and the symbols 16, 17, and 18 are run-length instructions.
 *   Each of 16, 17, and 18 are follwed by extra bits to define the length of
 *   the run.  16 copies the last length 3 to 6 times.  17 represents 3 to 10
 *   zero lengths, and 18 represents 11 to 138 zero lengths.  Unused symbols
 *   are common, hence the special coding for zero lengths.
 *
 * - The symbols for 0..18 are Huffman coded, and so that code must be
 *   described first.  This is simply a sequence of up to 19 three-bit values
 *   representing no code (0) or the code length for that symbol (1..7).
 *
 * - A dynamic block starts with three fixed-size counts from which is computed
 *   the number of literal/length code lengths, the number of distance code
 *   lengths, and the number of code length code lengths (ok, you come up with
 *   a better name!) in the code descriptions.  For the literal/length and
 *   distance codes, lengths after those provided are considered zero, i.e. no
 *   code.  The code length code lengths are received in a permuted order (see
 *   the order[] array below) to make a short code length code length list more
 *   likely.  As it turns out, very short and very long codes are less likely
 *   to be seen in a dynamic code description, hence what may appear initially
 *   to be a peculiar ordering.
 *
 * - Given the number of literal/length code lengths (nlen) and distance code
 *   lengths (ndist), then they are treated as one long list of nlen + ndist
 *   code lengths.  Therefore run-length coding can and often does cross the
 *   boundary between the two sets of lengths.
 *
 * - So to summarize, the code description at the start of a dynamic block is
 *   three counts for the number of code lengths for the literal/length codes,
 *   the distance codes, and the code length codes.  This is followed by the
 *   code length code lengths, three bits each.  This is used to construct the
 *   code length code which is used to read the remainder of the lengths.  Then
 *   the literal/length code lengths and distance lengths are read as a single
 *   set of lengths using the code length codes.  Codes are constructed from
 *   the resulting two sets of lengths, and then finally you can start
 *   decoding actual compressed data in the block.
 *
 * - For reference, a "typical" size for the code description in a dynamic
 *   block is around 80 bytes.
 */

int* dynamic_order(void)
{
    /* permutation of code length codes */
    int* r = calloc(20, sizeof(int));
    r[0] = 16;
    r[1] = 17;
    r[2] = 18;
    r[3] = 0;
    r[4] = 8;
    r[5] = 7;
    r[6] = 9;
    r[7] = 6;
    r[8] = 10;
    r[9] = 5;
    r[10] = 11;
    r[11] = 4;
    r[12] = 12;
    r[13] = 3;
    r[14] = 13;
    r[15] = 2;
    r[16] = 14;
    r[17] = 1;
    r[18] = 15;
    return r;
}

int dynamic(struct state *s)
{
    int nlen;
    int ndist;
    int ncode;                          /* number of lengths in descriptor */
    int index;                          /* index of lengths[] */
    int err;                            /* construct() return value */
    int* lengths = calloc(MAXCODES, sizeof(int));       /* descriptor code lengths */
    int* lencnt = calloc((MAXBITS + 1), sizeof(int));
    int* lensym = calloc(MAXLCODES, sizeof(int));       /* lencode memory */
    int* distcnt = calloc((MAXBITS + 1), sizeof(int));
    int* distsym = calloc(MAXDCODES, sizeof(int));      /* distcode memory */
    struct huffman* lencode = calloc(1, sizeof(struct huffman));
    struct huffman* distcode = calloc(1, sizeof(struct huffman));
    int* order = dynamic_order();
    long hold;
    int* set;

    /* construct lencode and distcode */
    lencode->count = lencnt;
    lencode->symbol = lensym;
    distcode->count = distcnt;
    distcode->symbol = distsym;

    /* get number of lengths in each table, check lengths */
    nlen = bits(s, 5) + 257;
    ndist = bits(s, 5) + 1;
    ncode = bits(s, 4) + 4;
    if (nlen > MAXLCODES) return -3;    /* bad counts */
    if(ndist > MAXDCODES) return -3;    /* bad counts */

    /* read code length code lengths (really), missing lengths are zero */
    for (index = 0; index < ncode; index = index + 1)
    {
        hold = order[index];
        lengths[hold] = bits(s, 3);
    }

    while(index < 19)
    {
        hold = order[index];
        lengths[hold] = 0;
        index = index + 1;
    }

    /* build huffman table for code lengths codes (use lencode temporarily) */
    err = construct(lencode, lengths, 19);
    if (err != 0) return -4;            /* require complete code set here */

    /* read length/literal and distance code length tables */
    index = 0;
    int symbol;                         /* decoded value */
    int len;                            /* last length to repeat */
    while (index < (nlen + ndist))
    {
        symbol = decode(s, lencode);
        if (symbol < 0) return symbol;  /* invalid symbol */

        if (symbol < 16)                /* length in 0..15 */
        {
            lengths[index] = symbol;
            index = index + 1;
        }
        else                            /* repeat instruction */
        {
            len = 0;                    /* assume repeating zeros */
            if (symbol == 16)           /* repeat last length 3..6 times */
            {
                if (index == 0) return -5;      /* no last length! */
                len = lengths[index - 1];       /* last length */
                symbol = 3 + bits(s, 2);
            }
            else if (symbol == 17) symbol = 3 + bits(s, 3); /* repeat zero 3..10 times */
            else symbol = 11 + bits(s, 7);      /* == 18, repeat zero 11..138 times */

            if ((index + symbol) > (nlen + ndist)) return -6;   /* too many lengths! */

            while(0 != symbol)            /* repeat last or zero symbol times */
            {
                lengths[index] = len;
                index = index + 1;
                symbol = symbol - 1;
            }
        }
    }

    /* check for end-of-block code -- there better be one! */
    if (lengths[256] == 0) return -9;

    /* build huffman table for literal/length codes */
    err = construct(lencode, lengths, nlen);

    /* incomplete code ok only for single length 1 code */
    if (err < 0) return -7;
    if((0 != err) && (nlen != (lencode->count[0] + lencode->count[1]))) return -7;

    /* build huffman table for distance codes */
    set = lengths;
    set += nlen;
    err = construct(distcode, set, ndist);

    /* incomplete code ok only for single length 1 code */
    if (err < 0) return -8;
    if((0 != err) && (ndist != (distcode->count[0] + distcode->count[1]))) return -8;

    /* decode data until end-of-block code */
    hold = codes(s, lencode, distcode);
    return hold;
}

/*
 * Inflate source to dest.  On return, destlen and sourcelen are updated to the
 * size of the uncompressed data and the size of the deflate data respectively.
 * On success, the return value of puff() is zero.  If there is an error in the
 * source data, i.e. it is not in the deflate format, then a negative value is
 * returned.  If there is not enough input available or there is not enough
 * output space, then a positive error is returned.  In that case, destlen and
 * sourcelen are not updated to facilitate retrying from the beginning with the
 * provision of more input data or more output space.  In the case of invalid
 * inflate data (a negative error), the dest and source pointers are updated to
 * facilitate the debugging of deflators.
 *
 * puff() also has a mode to determine the size of the uncompressed output with
 * no output written.  For this dest must be (unsigned char *)0.  In this case,
 * the input value of *destlen is ignored, and on return *destlen is set to the
 * size of the uncompressed output.
 *
 * The return codes are:
 *
 *   2:  available inflate data did not terminate
 *   1:  output space exhausted before completing inflate
 *   0:  successful inflate
 *  -1:  invalid block type (type == 3)
 *  -2:  stored block length did not match one's complement
 *  -3:  dynamic block code description: too many length or distance codes
 *  -4:  dynamic block code description: code lengths codes incomplete
 *  -5:  dynamic block code description: repeat lengths with no first length
 *  -6:  dynamic block code description: repeat more than specified lengths
 *  -7:  dynamic block code description: invalid literal/length code lengths
 *  -8:  dynamic block code description: invalid distance code lengths
 *  -9:  dynamic block code description: missing end-of-block code
 * -10:  invalid literal/length or distance code in fixed or dynamic block
 * -11:  distance is too far back in fixed or dynamic block
 *
 * Format notes:
 *
 * - Three bits are read for each block to determine the kind of block and
 *   whether or not it is the last block.  Then the block is decoded and the
 *   process repeated if it was not the last block.
 *
 * - The leftover bits in the last byte of the deflate data after the last
 *   block (if it was a fixed or dynamic block) are undefined and have no
 *   expected values to check.
 */

struct puffer
{
    int error;
    size_t destlen;
    size_t sourcelen;
};

struct puffer* puff(char* dest, size_t destlen, char* source, size_t sourcelen)
{
    struct state* s = calloc(1, sizeof(struct state));             /* input/output state */
    int last;
    int type;                   /* block information */
    int err;                    /* return value */

    /* initialize output state */
    s->out = dest;
    s->outlen = destlen;                /* ignored if dest is NIL */
    s->outcnt = 0;

    /* initialize input state */
    s->in = source;
    s->inlen = sourcelen;
    s->incnt = 0;
    s->bitbuf = 0;
    s->bitcnt = 0;

    /* process blocks until last block or error */
    do
    {
        last = bits(s, 1);         /* one if last block */
        type = bits(s, 2);         /* block type 0..3 */

        if(0 == type)
        {
            err = stored(s);
        }
        else if(1 == type)
        {
            err = fixed(s);
        }
        else if(2 == type)
        {
            err = dynamic(s);
        }
        else err = -1;

        if (err != 0) break;                  /* return with error */
    } while (!last);

    /* update the lengths and return */
    struct puffer* r = calloc(1, sizeof(struct puffer));
    r->error = err;
    r->destlen = s->outcnt;
    r->sourcelen = s->incnt;
    return r;
}

void write_blob(char* s, int start, int len, FILE* f)
{
    char* table = "0123456789ABCDEF";
    if(start > len) return;

    int i = s[start] & 0xFF;
    fputc(table[(i >> 4)], f);
    fputc(table[(i & 0xF)], f);
    fputc(' ', f);

    if(start == len) fputc('\n', f);
    else fputc(' ', f);
    write_blob(s, start + 1, len, f);
}

#define FTEXT 0x01
#define FHCRC 0x02
#define FEXTRA 0x04
#define FNAME 0x08
#define FCOMMENT 0x10


struct gz
{
    char* HEADER;
    int ID;
    int CM;
    int FLG;
    int MTIME;
    int XFL;
    int OS;
    int XLEN;
    char* FLG_FEXTRA;
    char* FLG_FNAME;
    char* FLG_FCOMMENT;
    int CRC16;
    char* FLG_FHCRC;
    char* block;
    int CRC32;
    size_t ISIZE;
    size_t file_size;
};

/* Read the input file *name, or stdin if name is NULL, into allocated memory.
   Reallocate to larger buffers until the entire file is read in.  Return a
   pointer to the allocated data, or NULL if there was a memory allocation
   failure.  *len is the number of bytes of data read from the input file (even
   if load() returns NULL).  If the input file was empty or could not be opened
   or read, *len is zero. */
struct gz* load(char* name)
{
    struct gz* r = calloc(1, sizeof(struct gz));
    char* scratch = calloc(5, sizeof(char));
    FILE* f = fopen(name, "r");
    int count;
    int ID1;
    int ID2;
    int count1;
    int count2;
    int count3;
    int count4;
    int c;
    int i;
    char* s = calloc(11, sizeof(char));

    if(NULL == f)
    {
        fputs("unable to open file: ", stderr);
        fputs(name, stderr);
        fputs("\nfor reading\n", stderr);
        return NULL;
    }

    fseek(f, 0, SEEK_END);
    r->file_size = ftell(f);
    fseek(f, 0, SEEK_SET);
    count = fread(s, sizeof(char), 10, f);

    if(10 != count)
    {
        fputs("incomplete gzip header\n", stderr);
        return NULL;
    }

    /* Verify header */
    r->HEADER = s;

    #if defined(DEBUG)
        write_blob(s, 0, 10, stderr);
    #endif

    ID1 = (s[0] & 0xFF);
    ID2 = (s[1] & 0xFF);
    r->ID = ((ID1 << 8) | ID2);
    if(0x1f8b != r->ID)
    {
        fputs("bad header\n", stderr);
        return NULL;
    }

    /* Verify Compression */
    r->CM = (r->HEADER[2] & 0xFF);
    if(8 != r->CM)
    {
        fputs("NOT DEFLATE COMPRESSION\n", stderr);
        return NULL;
    }

    /* Get specials specified in flag bits */
    r->FLG = (r->HEADER[3] & 0xFF);

    if(0 != (FEXTRA & r->FLG))
    {
        count = fread(scratch, sizeof(char), 4, f);
        count1 = (scratch[0] & 0xFF);
        count2 = (scratch[1] & 0xFF);
        count3 = (scratch[2] & 0xFF);
        count4 = (scratch[3] & 0xFF);
        count = (count1 << 24) | (count2 << 16) | (count3 << 8) | count4;
        require(0 < count, "FEXTRA field needs to be a positive number of bytes in size\n");
        require(100000000 > count, "we don't support FEXTRA fields greater than 100MB in size\n");
        r->FLG_FEXTRA = calloc(count + 1, sizeof(char));
        fread(r->FLG_FEXTRA, sizeof(char), count, f);
    }

    if(0 != (FNAME & r->FLG))
    {
        r->FLG_FNAME = calloc(r->file_size, sizeof(char));
        i = 0;
        do
        {
            c = fgetc(f);
            require(0 <= c, "received a non-null terminated filename in the file\n");
            r->FLG_FNAME[i] = c;
            i = i + 1;
        } while(0 != c);
    }

    if(0 != (FCOMMENT & r->FLG))
    {
        r->FLG_FCOMMENT = calloc(r->file_size, sizeof(char));
        i = 0;
        do
        {
            c = fgetc(f);
            require(0 <= c, "received a non-null terminated comment in the file\n");
            r->FLG_FCOMMENT[i] = c;
            i = i + 1;
        } while(0 != c);
    }

    if(0 != (FHCRC & r->FLG))
    {
        /* Not implemented */
        fputs("FHCRC is not implemented at this time\n", stderr);
        return NULL;
    }

    if(NULL == r->FLG_FNAME)
    {
        count = strlen(name) - 3;
        r->FLG_FNAME = calloc(count + 4, sizeof(char));
        i = 0;
        while(i < count)
        {
            r->FLG_FNAME[i] = name[i];
            i = i + 1;
        }
    }

    r->block = calloc(r->file_size, sizeof(char));
    count = fread(r->block, sizeof(char), r->file_size, f);
    r->ISIZE = count;
    fclose(f);
    return r;
}

int main(int argc, char **argv)
{
    struct puffer* ret;
    char* name;
    char* buffer;
    char *dest;
    struct gz* in;
    FILE* out;
    int FUZZING = FALSE;

    /* process arguments */
    int i = 1;
    while (i < argc)
    {
        if(NULL == argv[i])
        {
            i = i + 1;
        }
        else if(match(argv[i], "-f") || match(argv[i], "--file"))
        {
            name = argv[i+1];
            require(NULL != name, "the --file option requires a filename to be given\n");
            i = i + 2;
        }
        else if(match(argv[i], "-o") || match(argv[i], "--output"))
        {
            dest = argv[i+1];
            require(NULL != dest, "the --output option requires a filename to be given\n");
            i = i + 2;
        }
        else if(match(argv[i], "--chaos") || match(argv[i], "--fuzz-mode") || match(argv[i], "--fuzzing"))
        {
            FUZZING = TRUE;
            fputs("fuzz-mode enabled, preparing for chaos\n", stderr);
            i = i + 1;
        }
        else if(match(argv[i], "-h") || match(argv[i], "--help"))
        {
            fputs("Usage: ", stderr);
            fputs(argv[0], stderr);
            fputs(" --file $input.gz", stderr);
            fputs(" [--output $output] (or it'll use the internal filename)\n", stderr);
            fputs("--help to get this message\n", stderr);
            fputs("--fuzz-mode if you wish to fuzz this application safely\n", stderr);
            exit(EXIT_SUCCESS);
        }
        else
        {
            fputs("Unknown option:", stderr);
            fputs(argv[i], stderr);
            fputs("\nAborting to avoid problems\n", stderr);
            exit(EXIT_FAILURE);
        }
    }

    in = load(name);

    if (in == NULL)
    {
        fputs("memory allocation failure\nDidn't read file\n", stderr);
        exit(1);
    }

    ret = puff(0, 0, in->block, in->ISIZE);

    if(NULL == dest)
    {
        dest = in->FLG_FNAME;
    }

    fputs(name, stderr);
    fputs(" => ", stderr);
    fputs(dest, stderr);

    if (0 != ret->error)
    {
        fputs("\npuff() failed with return code ", stderr);
        fputs(int2str(ret->error, 10, TRUE), stderr);
        fputc('\n', stderr);
        exit(3);
    }
    else
    {
        fputs(": succeeded uncompressing ", stderr);
        fputs(int2str(ret->destlen, 10, FALSE), stderr);
        fputs(" bytes\n", stderr);
    }

    buffer = malloc(ret->destlen);
    if (buffer == NULL)
    {
        fputs("memory allocation failure\n", stderr);
        return 4;
    }

    ret = puff(buffer, ret->destlen, in->block, in->ISIZE);

    if(!FUZZING)
    {
        out = fopen(dest, "w");
        fwrite(buffer, 1, ret->destlen, out);
    }
    else
    {
        fputs("skipped write to file due to --fuzz-mode flag\n", stderr);
    }
    free(buffer);

    /* clean up */
    return 0;
}

File /src/unxz.c

Source file is 'src/unxz.c'.
URL: https://github.com/FransFaase/MES-replacement/blob/64abad6a2a55cbef00ffa065e1c019c6a1932acf/src/unxz.c
/* Copyright (C) 2019 pts@fazekas.hu
 * Copyright (C) 2024 Jeremiah Orians
 * Copyright (C) 2024 Gábor Stefanik
 * This file is part of mescc-tools-extra
 *
 * mescc-tools-extra is free software: you can redistribute it and/or modify
 * it under the terms of the GNU General Public License as published by
 * the Free Software Foundation, either version 3 of the License, or
 * (at your option) any later version.
 *
 * mescc-tools-extra is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 * GNU General Public License for more details.
 *
 * You should have received a copy of the GNU General Public License
 * along with mescc-tools-extra.  If not, see <http://www.gnu.org/licenses/>.
 *
 * Built upon the great work in:
 * muxzcat.c: tiny .xz and .lzma decompression filter
 * by pts@fazekas.hu at Wed Jan 30 15:15:23 CET 2019
 * from https://github.com/pts/muxzcat
 * For .xz it supports only LZMA2 (no other filters such as BCJ).
 * For .lzma it doesn't work with files with 5 <= lc + lp <= 12.
 * It doesn't verify checksums (e.g. CRC-32 and CRC-64).
 * It extracts the first stream only, and it ignores the index.
 *
 * LZMA algorithm implementation based on
 * https://github.com/pts/pts-tiny-7z-sfx/commit/b9a101b076672879f861d472665afaa6caa6fec1
 * , which is based on 7z922.tar.bz2.
 */

#include <stdio.h>
#include <string.h>  /* memcpy(), memmove() */
#include <unistd.h>  /* read(), write() */
#include <stdint.h>
#include <stdlib.h>  /* realloc() */
#include "bootstrappable.c"

/* Constants needed */
#define SZ_OK 0
#define SZ_ERROR_DATA 1
#define SZ_ERROR_MEM 2  /* Out of memory. */
#define SZ_ERROR_CRC 3
#define SZ_ERROR_UNSUPPORTED 4
#define SZ_ERROR_PARAM 5
#define SZ_ERROR_INPUT_EOF 6
/*#define SZ_ERROR_OUTPUT_EOF 7*/
#define SZ_ERROR_READ 8
#define SZ_ERROR_WRITE 9
#define SZ_ERROR_FINISHED_WITH_MARK 15            /* LzmaDec_DecodeToDic stream was finished with end mark. */
#define SZ_ERROR_NOT_FINISHED 16                  /* LzmaDec_DecodeToDic stream was not finished, i.e. dicfLimit reached while there is input to decompress */
#define SZ_ERROR_NEEDS_MORE_INPUT 17              /* LzmaDec_DecodeToDic, you must provide more input bytes */
/*#define SZ_MAYBE_FINISHED_WITHOUT_MARK SZ_OK*/  /* LzmaDec_DecodeToDic, there is probability that stream was finished without end mark */
#define SZ_ERROR_CHUNK_NOT_CONSUMED 18
#define SZ_ERROR_NEEDS_MORE_INPUT_PARTIAL 17      /* LzmaDec_DecodeToDic, more input needed, but existing input was partially processed */
#define LZMA_REQUIRED_INPUT_MAX 20
#define LZMA_BASE_SIZE 1846
#define LZMA_LIT_SIZE 768
#define LZMA2_LCLP_MAX 4
#define MAX_DIC_SIZE 1610612736  /* ~1.61 GB. 2 GiB is user virtual memory limit for many 32-bit systems. */
#define MAX_DIC_SIZE_PROP 37
#define MAX_MATCH_SIZE 273
#define kNumTopBits 24
#define kTopValue (1 << kNumTopBits)
#define kNumBitModelTotalBits 11
#define kBitModelTotal (1 << kNumBitModelTotalBits)
#define kNumMoveBits 5
#define RC_INIT_SIZE 5
#define kNumPosBitsMax 4
#define kNumPosStatesMax (1 << kNumPosBitsMax)
#define kLenNumLowBits 3
#define kLenNumLowSymbols (1 << kLenNumLowBits)
#define kLenNumMidBits 3
#define kLenNumMidSymbols (1 << kLenNumMidBits)
#define kLenNumHighBits 8
#define kLenNumHighSymbols (1 << kLenNumHighBits)
#define LenChoice 0
#define LenChoice2 (LenChoice + 1)
#define LenLow (LenChoice2 + 1)
#define LenMid (LenLow + (kNumPosStatesMax << kLenNumLowBits))
#define LenHigh (LenMid + (kNumPosStatesMax << kLenNumMidBits))
#define kNumLenProbs (LenHigh + kLenNumHighSymbols)
#define kNumStates 12
#define kNumLitStates 7
#define kStartPosModelIndex 4
#define kEndPosModelIndex 14
#define kNumFullDistances (1 << (kEndPosModelIndex >> 1))
#define kNumPosSlotBits 6
#define kNumLenToPosStates 4
#define kNumAlignBits 4
#define kAlignTableSize (1 << kNumAlignBits)
#define kMatchMinLen 2
#define kMatchSpecLenStart (kMatchMinLen + kLenNumLowSymbols + kLenNumMidSymbols + kLenNumHighSymbols)
#define IsMatch 0
#define IsRep (IsMatch + (kNumStates << kNumPosBitsMax))
#define IsRepG0 (IsRep + kNumStates)
#define IsRepG1 (IsRepG0 + kNumStates)
#define IsRepG2 (IsRepG1 + kNumStates)
#define IsRep0Long (IsRepG2 + kNumStates)
#define PosSlot (IsRep0Long + (kNumStates << kNumPosBitsMax))
#define SpecPos (PosSlot + (kNumLenToPosStates << kNumPosSlotBits))
#define Align (SpecPos + kNumFullDistances - kEndPosModelIndex)
#define LenCoder (Align + kAlignTableSize)
#define RepLenCoder (LenCoder + kNumLenProbs)
#define Literal (RepLenCoder + kNumLenProbs)
#define LZMA_DIC_MIN (1 << 12)
#define SZ_ERROR_BAD_MAGIC 51
#define SZ_ERROR_BAD_STREAM_FLAGS 52  /* SZ_ERROR_BAD_MAGIC is reported instead. */
#define SZ_ERROR_UNSUPPORTED_FILTER_COUNT 53
#define SZ_ERROR_BAD_BLOCK_FLAGS 54
#define SZ_ERROR_UNSUPPORTED_FILTER_ID 55
#define SZ_ERROR_UNSUPPORTED_FILTER_PROPERTIES_SIZE 56
#define SZ_ERROR_BAD_PADDING 57
#define SZ_ERROR_BLOCK_HEADER_TOO_LONG 58
#define SZ_ERROR_BAD_CHUNK_CONTROL_BYTE 59
#define SZ_ERROR_BAD_CHECKSUM_TYPE 60
#define SZ_ERROR_BAD_DICTIONARY_SIZE 61
#define SZ_ERROR_UNSUPPORTED_DICTIONARY_SIZE 62
#define SZ_ERROR_FEED_CHUNK 63
/*#define SZ_ERROR_NOT_FINISHED_WITH_MARK 64*/
#define SZ_ERROR_BAD_DICPOS 65
#define SZ_ERROR_MISSING_INITPROP 67
#define SZ_ERROR_BAD_LCLPPB_PROP 68
#define FILTER_ID_LZMA2 0x21
// 65536 + 12 * 1 byte (sizeof(uint8_t)
#define sizeof_readBuf 65548
#define sizeof_writeBuf 0x1000000
#define MAX_DICF_SIZE (MAX_DIC_SIZE + MAX_MATCH_SIZE + sizeof_writeBuf)  /* Maximum number of bytes in global.dicf. */
#define DUMMY_ERROR 0 /* unexpected end of input stream */
#define DUMMY_LIT 1
#define DUMMY_MATCH 2
#define DUMMY_REP 3
/* (LZMA_BASE_SIZE + (LZMA_LIT_SIZE << LZMA2_LCLP_MAX)) */
#define probs_size 14134
#define BIT31 (1<<31)
#define BITS32 (0x7FFFFFFF | BIT31)
#define HIGHBITS (0xFFFFFFFF - BITS32)

FILE* destination;
FILE* source;
uint32_t pos;

/* For LZMA streams, lc <= 8, lp <= 4, lc + lp <= 8 + 4 == 12.
 * For LZMA2 streams, lc + lp <= 4.
 * Minimum value: 1846.
 * Maximum value for LZMA streams: 1846 + (768 << (8 + 4)) == 3147574.
 * Maximum value for LZMA2 streams: 1846 + (768 << 4) == 14134.
 * Memory usage of prob: sizeof(uint32_t) * value == (2 or 4) * value bytes.
 */

struct CLzmaDec
{
    /* lc, lp and pb would fit into a byte, but i386 code is shorter as uint32_t.
     *
     * Constraints:
     *
     * * (0 <= lc <= 8) by LZMA.
     * * 0 <= lc <= 4 by LZMA2 and muxzcat-LZMA and muzxcat-LZMA2.
     * * 0 <= lp <= 4.
     * * 0 <= pb <= 4.
     * * (0 <= lc + lp == 8 + 4 <= 12) by LZMA.
     * * 0 <= lc + lp <= 4 by LZMA2 and muxzcat-LZMA and muxzcat-LZMA2.
     */
    uint32_t lc;
    uint32_t lp;
    uint32_t pb; /* Configured in prop byte. */
    /* Maximum lookback delta.
     * More optimized implementations (but not this version of muxzcat) need
     * that many bytes of storage for the dictionary. muxzcat uses more,
     * because it keeps the entire decompression output in memory, for
     * the simplicity of the implementation.
     * Configured in dicSizeProp byte. Maximum LZMA and LZMA2 supports is 0xffffffff,
     * maximum we support is MAX_DIC_SIZE == 1610612736.
     */
    uint32_t dicSize;
    uint8_t *buf;
    uint32_t range;
    uint32_t code;
    uint32_t dicfPos;  /* The next decompression output byte will be written to dicf + dicfPos. */
    uint32_t dicfLimit;  /* It's OK to write this many decompression output bytes to dic. GrowDic(dicfPos + len) must be called before writing len bytes at dicfPos. */
    uint32_t writtenPos;  /* Decompression output bytes dicf[:writtenPos] are already written to the output file. writtenPos <= dicfPos. */
    uint32_t discardedSize;  /* Number of decompression output bytes discarded. */
    uint32_t writeRemaining;  /* Maximum number of remaining bytes to write, or ~0 for unlimited. */
    uint32_t allocCapacity;  /* Number of bytes allocated in dic. */
    uint32_t processedPos;  /* Decompression output byte count since the last call to LzmaDec_InitDicAndState(TRUE, ...); */
    uint32_t checkDicSize;
    uint32_t state;
    uint32_t reps[4];
    uint32_t remainLen;
    uint32_t tempBufSize;
    uint32_t probs[probs_size];
    int needFlush;
    int needInitLzma;
    int needInitDic;
    int needInitState;
    int needInitProp;
    uint8_t tempBuf[LZMA_REQUIRED_INPUT_MAX];
    /* Contains the decompresison output, and used as the lookback dictionary.
     * allocCapacity bytes are allocated, it's OK to grow it up to dicfLimit.
     */
    uint8_t *dicf;
    uint8_t* readBuf;
    uint8_t* readCur;
    uint8_t* readEnd;
};

/* globals needed */
struct CLzmaDec* global;
int FUZZING;

/* Writes uncompressed data (global.dicf[global.writtenPos : global.dicfPos] to stdout. */
void Flush(void)
{
    /* print the bytes in the buffer until done */
    uint8_t* p = global->dicf + global->writtenPos;
    uint8_t* q = global->dicf + global->dicfPos;

    while(p < q)
    {
        fputc(0xFF & p[0], destination);
        p = p + 1;
    }

    global->writtenPos = global->dicfPos;
}

void FlushDiscardOldFromStartOfDic(void)
{
    if(global->dicfPos > global->dicSize)
    {
        uint32_t delta = global->dicfPos - global->dicSize;

        if(delta + MAX_MATCH_SIZE >= sizeof_writeBuf)
        {
            Flush();
            global->dicf = memmove(global->dicf, global->dicf + delta, global->dicSize);
            global->dicfPos = global->dicfPos - delta;
            global->dicfLimit = global->dicfLimit - delta;
            global->writtenPos = global->writtenPos - delta;
            global->discardedSize = global->discardedSize + delta;
        }
    }

}

void GrowCapacity(uint32_t newCapacity)
{
    if(newCapacity > global->allocCapacity)
    {
        /* make sure we don't alloc too much */
        require(newCapacity <= MAX_DICF_SIZE, "GrowCapacity exceeds MAX_DICF_SIZE");

        /* Get our new block */
        uint8_t* dicf = calloc(newCapacity, sizeof(uint8_t));
        require(NULL != dicf, "GrowCapacity memory allocation failed");

        /* copy our old block into it  and get rid of the old block */
        if (NULL != global->dicf) {
            memcpy(dicf, global->dicf, global->allocCapacity);
            free(global->dicf);
        }

        /* now track that new state */
        global->dicf = dicf;
        global->allocCapacity = newCapacity;
    }

    /* else no need to grow */
}

void FlushDiscardGrowDic(uint32_t dicfPosDelta)
{
    uint32_t minCapacity = global->dicfPos + dicfPosDelta;
    uint32_t newCapacity;

    if(minCapacity > global->allocCapacity)
    {
        FlushDiscardOldFromStartOfDic();
        minCapacity = global->dicfPos + dicfPosDelta;

        if(minCapacity > global->allocCapacity)
        {
            /* start by assuming 64KB */
            newCapacity = (1 << 16);

            while(newCapacity + MAX_MATCH_SIZE < minCapacity)
            {
                /* No overflow. */
                if(newCapacity > global->dicSize)
                {
                    newCapacity = global->dicSize;
                    if(newCapacity + MAX_MATCH_SIZE < minCapacity)
                    {
                        newCapacity = minCapacity - MAX_MATCH_SIZE;
                    }
                    break;
                }
                newCapacity = newCapacity << 1;
            }

            GrowCapacity(newCapacity + MAX_MATCH_SIZE);
        }
    }
}


void LzmaDec_DecodeReal(uint32_t limit, uint8_t *bufLimit)
{
    uint32_t *probs = global->probs;
    uint32_t state = global->state;
    uint32_t rep0 = global->reps[0];
    uint32_t rep1 = global->reps[1];
    uint32_t rep2 = global->reps[2];
    uint32_t rep3 = global->reps[3];
    uint32_t pbMask = (1 << (global->pb)) - 1;
    uint32_t lpMask = (1 << (global->lp)) - 1;
    uint32_t lc = global->lc;
    uint8_t* dicl = global->dicf;
    uint32_t diclLimit = global->dicfLimit;
    uint32_t diclPos = global->dicfPos;
    uint32_t processedPos = global->processedPos;
    uint32_t checkDicSize = global->checkDicSize;
    uint32_t len = 0;
    uint8_t* buf = global->buf;
    uint32_t range = global->range;
    uint32_t code = global->code;

    uint32_t* prob;
    uint32_t bound;
    uint32_t ttt;
    uint32_t posState;
    uint32_t symbol;
    uint32_t matchByte;
    uint32_t offs;
    uint32_t bit;
    uint32_t* probLit;
    uint32_t distance;
    uint32_t limita;
    uint32_t *probLen;
    uint32_t offset;
    uint32_t posSlot;
    uint32_t numDirectBits;
    uint32_t mask;
    uint32_t i;
    uint32_t n;
    uint32_t t;
    uint32_t rem;
    uint32_t curLen;
    uint32_t pos;
    uint8_t* p;

    do
    {
        posState = processedPos & pbMask;
        p = probs;
        prob = p + 4 * (IsMatch + (state << kNumPosBitsMax) + posState);
        ttt = prob[0];

        if(range < kTopValue)
        {
            range = range << 8;
            code = (code << 8) | (0xFF & buf[0]);
            buf = buf + 1;
        }

        bound = (range >> kNumBitModelTotalBits) * ttt;

        if(code < bound)
        {
            range = bound;
            prob[0] = (BITS32 & ((ttt + ((kBitModelTotal - ttt) >> kNumMoveBits)))) | (HIGHBITS & prob[0]);
            p = probs;
            prob = p + 4 * Literal;

            if(checkDicSize != 0 || processedPos != 0)
            {
                if(diclPos == 0)
                {
                    p = prob;
                    prob = p + 4 * (LZMA_LIT_SIZE * (((processedPos & lpMask) << lc) + (0xFF & dicl[(diclLimit) - 1])) >> (8 - lc));
                }
                else
                {
                    p = prob;
                    prob = p + 4 *(LZMA_LIT_SIZE * ((((processedPos & lpMask) << lc) + (0xFF & dicl[diclPos - 1])) >> (8 - lc)));
                }
            }

            if(state < kNumLitStates)
            {
                if(state < 4) state = 0;
                else state = state - 3;
                symbol = 1;

                do
                {
                    ttt = prob[symbol];

                    if(range < kTopValue)
                    {
                        range = range << 8;
                        code = (code << 8) | (0xFF & buf[0]);
                        buf = buf + 1;
                    }

                    bound = (range >> kNumBitModelTotalBits) * ttt;

                    if(code < bound)
                    {
                        range = bound;
                        prob[symbol] = (BITS32 & ((ttt + ((kBitModelTotal - ttt) >> kNumMoveBits)))) | (HIGHBITS & prob[symbol]);
                        symbol = (symbol + symbol);
                    }
                    else
                    {
                        range = range - bound;
                        code = code - bound;
                        prob[symbol] = (BITS32 & ((ttt - (ttt >> kNumMoveBits)))) | (HIGHBITS & prob[symbol]);
                        symbol = (symbol + symbol) + 1;
                    }
                } while(symbol < 0x100);
            }
            else
            {
                if(diclPos < rep0) matchByte = 0xFF & dicl[(diclPos - rep0) + diclLimit];
                else matchByte = 0xFF & dicl[(diclPos - rep0)];

                offs = 0x100;

                if(state < 10) state = state - 3;
                else state = state - 6;

                symbol = 1;

                do
                {
                    matchByte = matchByte << 1;
                    bit = (matchByte & offs);
                    p = prob;
                    probLit = p + 4 * (offs + bit + symbol);
                    ttt = probLit[0];

                    if(range < kTopValue)
                    {
                        range = range << 8;
                        code = (code << 8) | (0xFF & buf[0]);
                        buf = buf + 1;
                    }

                    bound = (range >> kNumBitModelTotalBits) * ttt;

                    if(code < bound)
                    {
                        range = bound;
                        probLit[0] = (BITS32 & ((ttt + ((kBitModelTotal - ttt) >> kNumMoveBits)))) | (HIGHBITS & probLit[0]);
                        symbol = (symbol + symbol);
                        offs = offs & ~bit;
                    }
                    else
                    {
                        range = range - bound;
                        code = code - bound;
                        probLit[0] = (BITS32 & ((ttt - (ttt >> kNumMoveBits)))) | (HIGHBITS & probLit[0]);
                        symbol = (symbol + symbol) + 1;
                        offs = offs & bit;
                    }
                } while(symbol < 0x100);
            }

            if(diclPos >= global->allocCapacity)
            {
                global->dicfPos = diclPos;
                FlushDiscardGrowDic(1);
                dicl = global->dicf;
                diclLimit = global->dicfLimit;
                diclPos = global->dicfPos;
            }

            dicl[diclPos] = (0xFF & symbol) | ((~0xFF) & dicl[diclPos]);
            diclPos = diclPos + 1;
            processedPos = processedPos + 1;
            continue;
        }
        else
        {
            range = range - bound;
            code = code - bound;
            prob[0] = (BITS32 & ((ttt - (ttt >> kNumMoveBits)))) | (HIGHBITS & prob[0]);
            p = probs;
            prob = p + 4 * (IsRep + state);
            ttt = prob[0];

            if(range < kTopValue)
            {
                range = range << 8;
                code = (code << 8) | (0xFF & buf[0]);
                buf = buf + 1;
            }

            bound = (range >> kNumBitModelTotalBits) * ttt;

            if(code < bound)
            {
                range = bound;
                prob[0] = (BITS32 & ((ttt + ((kBitModelTotal - ttt) >> kNumMoveBits)))) | (HIGHBITS & prob[0]);
                state = state + kNumStates;
                p = probs;
                prob = p + 4 * LenCoder;
            }
            else
            {
                range = range - bound;
                code = code - bound;
                prob[0] = (BITS32 & ((ttt - (ttt >> kNumMoveBits)))) | (HIGHBITS & prob[0]);

                require((checkDicSize != 0) || (processedPos != 0), "checkDicsize == 0 && processPos == 0");

                p = probs;
                prob = p + 4 * (IsRepG0 + state);
                ttt = prob[0];

                if(range < kTopValue)
                {
                    range = range << 8;
                    code = (code << 8) | (0xFF & buf[0]);
                    buf = buf + 1;
                }

                bound = (range >> kNumBitModelTotalBits) * ttt;

                if(code < bound)
                {
                    range = bound;
                    prob[0] = (BITS32 & ((ttt + ((kBitModelTotal - ttt) >> kNumMoveBits)))) | (HIGHBITS & prob[0]);
                    p = probs;
                    prob = p + 4 * (IsRep0Long + (state << kNumPosBitsMax) + posState);
                    ttt = prob[0];

                    if(range < kTopValue)
                    {
                        range = range << 8;
                        code = (code << 8) | (0xFF & buf[0]);
                        buf = buf + 1;
                    }

                    bound = (range >> kNumBitModelTotalBits) * ttt;

                    if(code < bound)
                    {
                        range = bound;
                        prob[0] = (BITS32 & ((ttt + ((kBitModelTotal - ttt) >> kNumMoveBits)))) | (HIGHBITS & prob[0]);

                        if(diclPos >= global->allocCapacity)
                        {
                            global->dicfPos = diclPos;
                            FlushDiscardGrowDic(1);
                            dicl = global->dicf;
                            diclLimit = global->dicfLimit;
                            diclPos = global->dicfPos;
                        }

                        if(diclPos < rep0) dicl[diclPos] = (0xFF & dicl[(diclPos - rep0) + diclLimit]) | ((~0xFF) & dicl[diclPos]);
                        else dicl[diclPos] = (0xFF & dicl[(diclPos - rep0)]) | ((~0xFF) & dicl[diclPos]);

                        diclPos = diclPos + 1;
                        processedPos = processedPos + 1;

                        if(state < kNumLitStates) state = 9;
                        else state = 11;

                        continue;
                    }

                    range = range - bound;
                    code = code - bound;
                    prob[0] = (BITS32 & ((ttt - (ttt >> kNumMoveBits)))) | (HIGHBITS & prob[0]);
                }
                else
                {
                    range = range - bound;
                    code = code - bound;
                    prob[0] = (BITS32 & ((ttt - (ttt >> kNumMoveBits)))) | (HIGHBITS & prob[0]);
                    p = probs;
                    prob = p + 4 * (IsRepG1 + state);
                    ttt = prob[0];

                    if(range < kTopValue)
                    {
                        range = range << 8;
                        code = (code << 8) | (0xFF & buf[0]);
                        buf = buf + 1;
                    }

                    bound = (range >> kNumBitModelTotalBits) * ttt;

                    if(code < bound)
                    {
                        range = bound;
                        prob[0] = (BITS32 & ((ttt + ((kBitModelTotal - ttt) >> kNumMoveBits)))) | (HIGHBITS & prob[0]);
                        distance = rep1;
                    }
                    else
                    {
                        range = range - bound;
                        code = code - bound;
                        prob[0] = (BITS32 & ((ttt - (ttt >> kNumMoveBits)))) | (HIGHBITS & prob[0]);
                        p = probs;
                        prob = p + 4 * (IsRepG2 + state);
                        ttt = prob[0];

                        if(range < kTopValue)
                        {
                            range = range << 8;
                            code = (code << 8) | (0xFF & buf[0]);
                            buf = buf + 1;
                        }

                        bound = (range >> kNumBitModelTotalBits) * ttt;

                        if(code < bound)
                        {
                            range = bound;
                            prob[0] = (BITS32 & ((ttt + ((kBitModelTotal - ttt) >> kNumMoveBits)))) | (HIGHBITS & prob[0]);
                            distance = rep2;
                        }
                        else
                        {
                            range = range - bound;
                            code = code - bound;
                            prob[0] = (BITS32 & ((ttt - (ttt >> kNumMoveBits)))) | (HIGHBITS & prob[0]);
                            distance = rep3;
                            rep3 = rep2;
                        }

                        rep2 = rep1;
                    }

                    rep1 = rep0;
                    rep0 = distance;
                }

                if(state < kNumLitStates) state = 8;
                else state = 11;

                p = probs;
                prob = p + 4 * RepLenCoder;
            }

            p = prob;
            probLen = p + 4 * LenChoice;
            ttt = probLen[0];

            if(range < kTopValue)
            {
                range <<= 8;
                code = (code << 8) | (0xFF & buf[0]);
                buf = buf + 1;
            }

            bound = (range >> kNumBitModelTotalBits) * ttt;

            if(code < bound)
            {
                range = bound;
                probLen[0] = (BITS32 & ((ttt + ((kBitModelTotal - ttt) >> kNumMoveBits)))) | (HIGHBITS & probLen[0]);
                p = prob;
                probLen = p + 4 * (LenLow + (posState << kLenNumLowBits));
                offset = 0;
                limita = (1 << kLenNumLowBits);
            }
            else
            {
                range = range - bound;
                code = code - bound;
                probLen[0] = (BITS32 & ((ttt - (ttt >> kNumMoveBits)))) | (HIGHBITS & probLen[0]);
                p = prob;
                probLen = p + 4 * LenChoice2;
                ttt = probLen[0];

                if(range < kTopValue)
                {
                    range = range << 8;
                    code = (code << 8) | (0xFF & buf[0]);
                    buf = buf + 1;
                }

                bound = (range >> kNumBitModelTotalBits) * ttt;

                if(code < bound)
                {
                    range = bound;
                    probLen[0] = (BITS32 & ((ttt + ((kBitModelTotal - ttt) >> kNumMoveBits)))) | (HIGHBITS & probLen[0]);
                    p = prob;
                    probLen = p + 4 * (LenMid + (posState << kLenNumMidBits));
                    offset = kLenNumLowSymbols;
                    limita = (1 << kLenNumMidBits);
                }
                else
                {
                    range = range - bound;
                    code = code - bound;
                    probLen[0] = (BITS32 & ((ttt - (ttt >> kNumMoveBits)))) | (HIGHBITS & probLen[0]);
                    p = prob;
                    probLen = p + 4 * LenHigh;
                    offset = kLenNumLowSymbols + kLenNumMidSymbols;
                    limita = (1 << kLenNumHighBits);
                }
            }

            len = 1;

            do
            {
                ttt = probLen[len];

                if(range < kTopValue)
                {
                    range = range << 8;
                    code = (code << 8) | (0xFF & buf[0]);
                    buf = buf + 1;
                }

                bound = (range >> kNumBitModelTotalBits) * ttt;

                if(code < bound)
                {
                    range = bound;
                    probLen[len] = (BITS32 & ((ttt + ((kBitModelTotal - ttt) >> kNumMoveBits)))) | (HIGHBITS & probLen[len]);
                    len = (len + len);
                }
                else
                {
                    range = range - bound;
                    code = code - bound;
                    probLen[len] = (BITS32 & ((ttt - (ttt >> kNumMoveBits)))) | (HIGHBITS & probLen[len]);
                    len = (len + len) + 1;
                }
            } while(len < limita);

            len = len - limita + offset;

            if(state >= kNumStates)
            {
                if(len < kNumLenToPosStates) { p = probs; prob = p + 4 * (PosSlot + (len << kNumPosSlotBits));  }
                else { p = probs; prob = p + 4 * (PosSlot + ((kNumLenToPosStates - 1) << kNumPosSlotBits));  }

                distance = 1;

                do
                {
                    ttt = prob[distance];

                    if(range < kTopValue)
                    {
                        range = range << 8;
                        code = (code << 8) | (0xFF & buf[0]);
                        buf = buf + 1;
                    }

                    bound = (range >> kNumBitModelTotalBits) * ttt;
                    if(code < bound)
                    {
                        range = bound;
                        prob[distance] = (BITS32 & ((ttt + ((kBitModelTotal - ttt) >> kNumMoveBits)))) | (HIGHBITS & prob[distance]);
                        distance = (distance + distance);
                    }
                    else
                    {
                        range = range - bound;
                        code = code - bound;
                        prob[distance] = (BITS32 & ((ttt - (ttt >> kNumMoveBits)))) | (HIGHBITS & prob[distance]);
                        distance = (distance + distance) + 1;
                    }
                } while(distance < (1 << 6));

                distance = distance - (1 << 6);

                if(distance >= kStartPosModelIndex)
                {
                    posSlot = distance;
                    numDirectBits = (distance >> 1) - 1;
                    distance = (2 | (distance & 1));

                    if(posSlot < kEndPosModelIndex)
                    {
                        distance = distance << numDirectBits;
                        p = probs;
                        prob = p + 4 * (SpecPos + distance - posSlot - 1);
                        mask = 1;
                        i = 1;

                        do
                        {
                            ttt = prob[i];

                            if(range < kTopValue)
                            {
                                range = range << 8;
                                code = (code << 8) | (0xFF & buf[0]);
                                buf = buf + 1;
                            }

                            bound = (range >> kNumBitModelTotalBits) * ttt;

                            if(code < bound)
                            {
                                range = bound;
                                prob[i] = (BITS32 & ((ttt + ((kBitModelTotal - ttt) >> kNumMoveBits)))) | (HIGHBITS & prob[i]);
                                i = (i + i);
                            }
                            else
                            {
                                range = range - bound;
                                code = code - bound;
                                prob[i] = (BITS32 & ((ttt - (ttt >> kNumMoveBits)))) | (HIGHBITS & prob[i]);
                                i = (i + i) + 1;
                                distance = distance | mask;
                            }

                            mask = mask << 1;
                            numDirectBits = numDirectBits - 1;
                        } while(numDirectBits != 0);
                    }
                    else
                    {
                        numDirectBits = numDirectBits - kNumAlignBits;

                        do
                        {
                            if(range < kTopValue)
                            {
                                range = range << 8;
                                code = (code << 8) | (0xFF & buf[0]);
                                buf = buf + 1;
                            }

                            range = range >> 1;
                            {
                                code = code - range;
                                t = (0 - (code >> 31));
                                distance = (distance << 1) + (t + 1);
                                code = code + (range & t);
                            }
                            numDirectBits = numDirectBits - 1;
                        } while(numDirectBits != 0);

                        p = probs;
                        prob = p + 4 * Align;
                        distance = distance << kNumAlignBits;
                        i = 1;
                        ttt = prob[i];

                        if(range < kTopValue)
                        {
                            range = range << 8;
                            code = (code << 8) | (0xFF & buf[0]);
                            buf = buf + 1;
                        }

                        bound = (range >> kNumBitModelTotalBits) * ttt;

                        if(code < bound)
                        {
                            range = bound;
                            prob[i] = (BITS32 & ((ttt + ((kBitModelTotal - ttt) >> kNumMoveBits)))) | (HIGHBITS & prob[i]);
                            i = (i + i);
                        }
                        else
                        {
                            range = range - bound;
                            code = code - bound;
                            prob[i] = (BITS32 & ((ttt - (ttt >> kNumMoveBits)))) | (HIGHBITS & prob[i]);
                            i = (i + i) + 1;
                            distance = distance | 1;
                        }

                        ttt = prob[i];

                        if(range < kTopValue)
                        {
                            range = range << 8;
                            code = (code << 8) | (0xFF & buf[0]);
                            buf = buf + 1;
                        }

                        bound = (range >> kNumBitModelTotalBits) * ttt;

                        if(code < bound)
                        {
                            range = bound;
                            prob[i] = (BITS32 & ((ttt + ((kBitModelTotal - ttt) >> kNumMoveBits)))) | (HIGHBITS & prob[i]);
                            i = (i + i);
                        }
                        else
                        {
                            range = range - bound;
                            code = code - bound;
                            prob[i] = (BITS32 & ((ttt - (ttt >> kNumMoveBits)))) | (HIGHBITS & prob[i]);
                            i = (i + i) + 1;
                            distance = distance | 2;
                        }

                        ttt = prob[i];

                        if(range < kTopValue)
                        {
                            range = range << 8;
                            code = (code << 8) | (0xFF & buf[0]);
                            buf = buf + 1;
                        }

                        bound = (range >> kNumBitModelTotalBits) * ttt;

                        if(code < bound)
                        {
                            range = bound;
                            prob[i] = (BITS32 & ((ttt + ((kBitModelTotal - ttt) >> kNumMoveBits)))) | (HIGHBITS & prob[i]);
                            i = (i + i);
                        }
                        else
                        {
                            range = range - bound;
                            code = code - bound;
                            prob[i] = (BITS32 & ((ttt - (ttt >> kNumMoveBits)))) | (HIGHBITS & prob[i]);
                            i = (i + i) + 1;
                            distance = distance | 4;
                        }

                        ttt = prob[i];

                        if(range < kTopValue)
                        {
                            range = range << 8;
                            code = (code << 8) | (0xFF & buf[0]);
                            buf = buf + 1;
                        }

                        bound = (range >> kNumBitModelTotalBits) * ttt;

                        if(code < bound)
                        {
                            range = bound;
                            prob[i] = (BITS32 & ((ttt + ((kBitModelTotal - ttt) >> kNumMoveBits)))) | (HIGHBITS & prob[i]);
                            i = (i + i);
                        }
                        else
                        {
                            range = range - bound;
                            code = code - bound;
                            prob[i] = (BITS32 & ((ttt - (ttt >> kNumMoveBits)))) | (HIGHBITS & prob[i]);
                            i = (i + i) + 1;
                            distance = distance | 8;
                        }

                        if(distance == BITS32)
                        {
                            len = len + kMatchSpecLenStart;
                            state = state - kNumStates;
                            break;
                        }
                    }
                }

                rep3 = rep2;
                rep2 = rep1;
                rep1 = rep0;
                rep0 = distance + 1;

                if(checkDicSize == 0) require(distance < processedPos , "distance >= processedPos");
                else require(distance < checkDicSize, "distance >= checkDicSize");

                if(state < kNumStates + kNumLitStates) state = kNumLitStates;
                else state = kNumLitStates + 3;
            }

            len = len + kMatchMinLen;
            require(len <= MAX_MATCH_SIZE, "len greater than MAX_MATCH_SIZE");
            require(limit != diclPos, "limit == diclPos");

            rem = limit - diclPos;
            if(rem < len) curLen = rem;
            else curLen = len;

            if(diclPos < rep0) pos = (diclPos - rep0) + diclLimit;
            else pos = diclPos - rep0;

            processedPos = processedPos + curLen;
            len = len - curLen;

            /* TODO(pts): ASSERT(len == curLen);, simplify buffering code. */
            /* + cannot overflow. */
            if((diclPos + curLen) > global->allocCapacity)
            {
                global->dicfPos = diclPos;
                FlushDiscardGrowDic(curLen);

                pos = pos + global->dicfPos - diclPos;
                dicl = global->dicf;
                diclLimit = global->dicfLimit;
                diclPos = global->dicfPos;
            }

            if((pos + curLen) <= diclLimit)
            {
                require(diclPos > pos, "diclPos > pos");
                require(curLen > 0, "curLen > 0");
                i = 0;
                n = curLen;
                /* overlapping memcpy of sorts */
                while(n > 0)
                {
                    dicl[diclPos + i] = (0xFF & dicl[pos + i]) | ((~0xFF) & dicl[diclPos + i]);
                    i = i + 1;
                    n = n - 1;
                }
                diclPos = diclPos + curLen;
            }
            else
            {
                do
                {
                    dicl[diclPos] = (0xFF & dicl[pos]) | ((~0xFF) & dicl[diclPos]);
                    diclPos = diclPos + 1;
                    pos = pos + 1;

                    if(pos == diclLimit)
                    {
                        pos = 0;
                    }
                    curLen = curLen - 1;
                } while(curLen != 0);
            }
        }
    } while((diclPos < limit) && (buf < bufLimit));

    if(range < kTopValue)
    {
        range = range << 8;
        code = (code << 8) | (0xFF & buf[0]);
        buf = buf + 1;
    }

    global->buf = buf;
    global->range = range;
    global->code = code;
    global->remainLen = len;
    global->dicfPos = diclPos;
    global->processedPos = processedPos;
    global->reps[0] = rep0;
    global->reps[1] = rep1;
    global->reps[2] = rep2;
    global->reps[3] = rep3;
    global->state = state;
}

void LzmaDec_WriteRem(uint32_t limit)
{
    uint8_t *dicl;
    uint32_t diclPos;
    uint32_t diclLimit;
    uint32_t len;
    uint32_t rep0;

    if(global->remainLen != 0 && global->remainLen < kMatchSpecLenStart)
    {
        dicl = global->dicf;
        diclPos = global->dicfPos;
        diclLimit = global->dicfLimit;
        len = global->remainLen;
        rep0 = global->reps[0];

        if(limit - diclPos < len)
        {
            len = limit - diclPos;
        }

        if(diclPos + len > global->allocCapacity)
        {
            FlushDiscardGrowDic(len);
            dicl = global->dicf;
            diclLimit = global->dicfLimit;
            diclPos = global->dicfPos;
        }

        if((global->checkDicSize == 0) && ((global->dicSize - global->processedPos) <= len))
        {
            global->checkDicSize = global->dicSize;
        }

        global->processedPos = global->processedPos + len;
        global->remainLen = global->remainLen - len;

        while(len != 0)
        {
            len = len - 1;
            if(diclPos < rep0) dicl[diclPos] = (0xFF & dicl[(diclPos - rep0) + diclLimit]) | ((~0xFF) & dicl[diclPos]);
            else dicl[diclPos] = (0xFF & dicl[diclPos - rep0]) | ((~0xFF) & dicl[diclPos]);
            diclPos = diclPos + 1;
        }

        global->dicfPos = diclPos;
    }
}

void LzmaDec_DecodeReal2(uint32_t limit, uint8_t *bufLimit)
{
    uint32_t limit2;
    uint32_t rem;

    do
    {
        limit2 = limit;

        if(global->checkDicSize == 0)
        {
            rem = global->dicSize - global->processedPos;

            if((limit - global->dicfPos) > rem)
            {
                limit2 = global->dicfPos + rem;
            }
        }

        LzmaDec_DecodeReal(limit2, bufLimit);

        if(global->processedPos >= global->dicSize)
        {
            global->checkDicSize = global->dicSize;
        }

        LzmaDec_WriteRem(limit);
    } while((global->dicfPos < limit) && (global->buf < bufLimit) && (global->remainLen < kMatchSpecLenStart));

    if(global->remainLen > kMatchSpecLenStart)
    {
        global->remainLen = kMatchSpecLenStart;
    }
}

int LzmaDec_TryDummy(uint8_t* buf, uint32_t inSize)
{
    uint32_t range = global->range;
    uint32_t code = global->code;
    uint8_t* bufLimit = buf + inSize;
    uint32_t* probs = global->probs;
    uint32_t state = global->state;
    int res;
    uint32_t* prob;
    uint32_t bound;
    uint32_t ttt;
    uint32_t posState;
    uint32_t hold;
    uint32_t symbol;
    uint32_t matchByte;
    uint32_t offs;
    uint32_t bit;
    uint32_t* probLit;
    uint32_t len;
    uint32_t limit;
    uint32_t offset;
    uint32_t* probLen;
    uint32_t posSlot;
    uint32_t numDirectBits;
    uint32_t i;
    uint8_t* p;

    posState = (global->processedPos) & ((1 << global->pb) - 1);
    p = probs;
    prob = p + 4 * (IsMatch + (state << kNumPosBitsMax) + posState);
    ttt = prob[0];

    if(range < kTopValue)
    {
        if(buf >= bufLimit)
        {
            return DUMMY_ERROR;
        }

        range = range << 8;
        code = (code << 8) | (0xFF & buf[0]);
        buf = buf + 1;
    }

    bound = (range >> kNumBitModelTotalBits) * ttt;

    if(code < bound)
    {
        range = bound;
        p = probs;
        prob = p + 4 * Literal;

        if(global->checkDicSize != 0 || global->processedPos != 0)
        {
            hold = (((global->processedPos) & ((1 << (global->lp)) - 1)) << global->lc);
            if(global->dicfPos == 0)
            {
                hold = hold + ((0xFF & global->dicf[global->dicfLimit - 1]) >> (8 - global->lc));
            }
            else
            {
                hold = hold + ((0xFF & global->dicf[global->dicfPos - 1]) >> (8 - global->lc));
            }
            p = prob;
            prob = p + 4 * (LZMA_LIT_SIZE * hold);
        }

        if(state < kNumLitStates)
        {
            symbol = 1;

            do
            {
                ttt = prob[symbol];

                if(range < kTopValue)
                {
                    if(buf >= bufLimit)
                    {
                        return DUMMY_ERROR;
                    }

                    range = range << 8;
                    code = (code << 8) | (0xFF & buf[0]);
                    buf = buf + 1;
                }

                bound = (range >> kNumBitModelTotalBits) * ttt;

                if(code < bound)
                {
                    range = bound;
                    symbol = (symbol + symbol);
                }
                else
                {
                    range = range - bound;
                    code = code - bound;
                    symbol = (symbol + symbol) + 1;
                }
            } while(symbol < 0x100);
        }
        else
        {
            if(global->dicfPos < (global->reps[0] & BITS32))
            {
                hold = global->dicfPos - (global->reps[0] & BITS32) + global->dicfLimit;
            }
            else hold = global->dicfPos - (global->reps[0] & BITS32);
            matchByte = 0xFF & global->dicf[hold];

            offs = 0x100;
            symbol = 1;

            do
            {
                matchByte = matchByte << 1;
                bit = (matchByte & offs);
                p = prob;
                probLit = p + 4 * (offs + bit + symbol);
                ttt = probLit[0];

                if(range < kTopValue)
                {
                    if(buf >= bufLimit)
                    {
                        return DUMMY_ERROR;
                    }

                    range = range << 8;
                    code = (code << 8) | (0xFF & buf[0]);
                    buf = buf + 1;
                }

                bound = (range >> kNumBitModelTotalBits) * ttt;

                if(code < bound)
                {
                    range = bound;
                    symbol = (symbol + symbol);
                    offs = offs & ~bit;
                }
                else
                {
                    range = range - bound;
                    code = code - bound;
                    symbol = (symbol + symbol) + 1;
                    offs = offs & bit;
                }
            } while(symbol < 0x100);
        }

        res = DUMMY_LIT;
    }
    else
    {
        range = range - bound;
        code = code - bound;
        p = probs;
        prob = p + 4 * (IsRep + state);
        ttt = prob[0];

        if(range < kTopValue)
        {
            if(buf >= bufLimit)
            {
                return DUMMY_ERROR;
            }

            range = range << 8;
            code = (code << 8) | (0xFF & buf[0]);
            buf = buf + 1;
        }

        bound = (range >> kNumBitModelTotalBits) * ttt;

        if(code < bound)
        {
            range = bound;
            state = 0;
            p = probs;
            prob = p + 4 * LenCoder;
            res = DUMMY_MATCH;
        }
        else
        {
            range = range - bound;
            code = code - bound;
            res = DUMMY_REP;
            p = probs;
            prob = p + 4 * (IsRepG0 + state);
            ttt = prob[0];

            if(range < kTopValue)
            {
                if(buf >= bufLimit)
                {
                    return DUMMY_ERROR;
                }

                range = range << 8;
                code = (code << 8) | (0xFF & buf[0]);
                buf = buf + 1;
            }

            bound = (range >> kNumBitModelTotalBits) * ttt;

            if(code < bound)
            {
                range = bound;
                p = probs;
                prob = p + 4 * (IsRep0Long + (state << kNumPosBitsMax) + posState);
                ttt = prob[0];

                if(range < kTopValue)
                {
                    if(buf >= bufLimit)
                    {
                        return DUMMY_ERROR;
                    }

                    range = range << 8;
                    code = (code << 8) | (0xFF & buf[0]);
                    buf = buf + 1;
                }

                bound = (range >> kNumBitModelTotalBits) * ttt;

                if(code < bound)
                {
                    range = bound;

                    if(range < kTopValue)
                    {
                        if(buf >= bufLimit)
                        {
                            return DUMMY_ERROR;
                        }

                        range = range << 8;
                        code = (code << 8) | (0xFF & buf[0]);
                        buf = buf + 1;
                    }

                    return DUMMY_REP;
                }
                else
                {
                    range = range - bound;
                    code = code - bound;
                }
            }
            else
            {
                range = range - bound;
                code = code - bound;
                p = probs;
                prob = p + 4 * (IsRepG1 + state);
                ttt = prob[0];

                if(range < kTopValue)
                {
                    if(buf >= bufLimit)
                    {
                        return DUMMY_ERROR;
                    }

                    range = range << 8;
                    code = (code << 8) | (0xFF & buf[0]);
                    buf = buf + 1;
                }

                bound = (range >> kNumBitModelTotalBits) * ttt;

                if(code < bound)
                {
                    range = bound;
                }
                else
                {
                    range = range - bound;
                    code = code - bound;
                    p = probs;
                    prob = p + 4 * (IsRepG2 + state);
                    ttt = prob[0];

                    if(range < kTopValue)
                    {
                        if(buf >= bufLimit)
                        {
                            return DUMMY_ERROR;
                        }

                        range = range << 8;
                        code = (code << 8) | (0xFF & buf[0]);
                        buf = buf + 1;
                    }

                    bound = (range >> kNumBitModelTotalBits) * ttt;

                    if(code < bound)
                    {
                        range = bound;
                    }
                    else
                    {
                        range = range - bound;
                        code = code - bound;
                    }
                }
            }

            state = kNumStates;
            p = probs;
            prob = p + 4 * RepLenCoder;
        }

        p = prob;
        probLen = p + 4 * LenChoice;
        ttt = probLen[0];

        if(range < kTopValue)
        {
            if(buf >= bufLimit)
            {
                return DUMMY_ERROR;
            }

            range = range << 8;
            code = (code << 8) | (0xFF & buf[0]);
            buf = buf + 1;
        }

        bound = (range >> kNumBitModelTotalBits) * ttt;

        if(code < bound)
        {
            range = bound;
            p = prob;
            probLen = p + 4 * (LenLow + (posState << kLenNumLowBits));
            offset = 0;
            limit = 1 << kLenNumLowBits;
        }
        else
        {
            range = range - bound;
            code = code - bound;
            p = prob;
            probLen = p + 4 * LenChoice2;
            ttt = probLen[0];

            if(range < kTopValue)
            {
                if(buf >= bufLimit)
                {
                    return DUMMY_ERROR;
                }

                range = range << 8;
                code = (code << 8) | (0xFF & buf[0]);
                buf = buf + 1;
            }

            bound = (range >> kNumBitModelTotalBits) * ttt;

            if(code < bound)
            {
                range = bound;
                p = prob;
                probLen = p + 4 * (LenMid + (posState << kLenNumMidBits));
                offset = kLenNumLowSymbols;
                limit = 1 << kLenNumMidBits;
            }
            else
            {
                range = range - bound;
                code = code - bound;
                probLen = p + 4 * LenHigh;
                offset = kLenNumLowSymbols + kLenNumMidSymbols;
                limit = 1 << kLenNumHighBits;
            }
        }

        len = 1;

        do
        {
            ttt = probLen[len];

            if(range < kTopValue)
            {
                if(buf >= bufLimit)
                {
                    return DUMMY_ERROR;
                }

                range = range << 8;
                code = (code << 8) | (0xFF & buf[0]);
                buf = buf + 1;
            }

            bound = (range >> kNumBitModelTotalBits) * ttt;

            if(code < bound)
            {
                range = bound;
                len = (len + len);
            }
            else
            {
                range = range - bound;
                code = code - bound;
                len = (len + len) + 1;
            }
        } while(len < limit);

        len = len - limit + offset;

        if(state < 4)
        {
            if(len < kNumLenToPosStates) hold = len << kNumPosSlotBits;
            else hold = (kNumLenToPosStates - 1) << kNumPosSlotBits;

            p = probs;
            prob = p + 4 * (PosSlot + hold);
            posSlot = 1;

            do
            {
                ttt = prob[posSlot];

                if(range < kTopValue)
                {
                    if(buf >= bufLimit)
                    {
                        return DUMMY_ERROR;
                    }

                    range = range << 8;
                    code = (code << 8) | (0xFF & buf[0]);
                    buf = buf + 1;
                }

                bound = (range >> kNumBitModelTotalBits) * ttt;

                if(code < bound)
                {
                    range = bound;
                    posSlot = (posSlot + posSlot);
                }
                else
                {
                    range = range - bound;
                    code = code - bound;
                    posSlot = (posSlot + posSlot) + 1;
                }
            } while(posSlot < (1 << kNumPosSlotBits));

            posSlot = posSlot - (1 << kNumPosSlotBits);

            if(posSlot >= kStartPosModelIndex)
            {
                numDirectBits = ((posSlot >> 1) - 1);

                if(posSlot < kEndPosModelIndex)
                {
                    p = probs;
                    prob = p + 4 * (SpecPos + ((2 | (posSlot & 1)) << numDirectBits) - posSlot - 1);
                }
                else
                {
                    numDirectBits = numDirectBits - kNumAlignBits;

                    do
                    {
                        if(range < kTopValue)
                        {
                            if(buf >= bufLimit)
                            {
                                return DUMMY_ERROR;
                            }

                            range = range << 8;
                            code = (code << 8) | (0xFF & buf[0]);
                            buf = buf + 1;
                        }

                        range = range >> 1;
                        code = code - (range & ((((code - range) >> 31) & 1) - 1));
                        numDirectBits = numDirectBits - 1;
                    } while(numDirectBits != 0);

                    p = probs;
                    prob = p + 4 * Align;
                    numDirectBits = kNumAlignBits;
                }

                i = 1;

                do
                {
                    ttt = prob[i];

                    if(range < kTopValue)
                    {
                        if(buf >= bufLimit)
                        {
                            return DUMMY_ERROR;
                        }

                        range = range << 8;
                        code = (code << 8) | (0xFF & buf[0]);
                        buf = buf + 1;
                    }

                    bound = (range >> kNumBitModelTotalBits) * ttt;

                    if(code < bound)
                    {
                        range = bound;
                        i = (i + i);
                    }
                    else
                    {
                        range = range - bound;
                        code = code - bound;
                        i = (i + i) + 1;
                    }
                    numDirectBits = numDirectBits - 1;
                } while(numDirectBits != 0);
            }
        }
    }

    if(range < kTopValue)
    {
        if(buf >= bufLimit)
        {
            return DUMMY_ERROR;
        }

        /* is this even needed? */
        range = range << 8;
        code = (code << 8) | (0xFF & buf[0]);
        buf = buf + 1;
    }

    return res;
}


void LzmaDec_InitRc(uint8_t* data)
{
    global->code = ((0xFF & data[1]) << 24) | ((0xFF & data[2]) << 16) | ((0xFF & data[3]) << 8) | (0xFF & data[4]);
    global->range = BITS32;
    global->needFlush = FALSE;
}

void LzmaDec_InitDicAndState(int initDic, int initState)
{
    global->needFlush = TRUE;
    global->remainLen = 0;
    global->tempBufSize = 0;

    if(initDic)
    {
        global->processedPos = 0;
        global->checkDicSize = 0;
        global->needInitLzma = TRUE;
    }

    if(initState)
    {
        global->needInitLzma = TRUE;
    }
}

void LzmaDec_InitStateReal(void)
{
    uint32_t numProbs = Literal + (LZMA_LIT_SIZE << (global->lc + global->lp));
    uint32_t i;
    uint32_t* probs = global->probs;

    for(i = 0; i < numProbs; i = i + 1)
    {
        probs[i] = (BITS32 & (kBitModelTotal >> 1)) | (HIGHBITS & probs[i]);
    }

    global->reps[0] = 1; global->reps[1] = 1; global->reps[2] = 1; global->reps[3] = 1;
    global->state = 0;
    global->needInitLzma = FALSE;
}

uint32_t LzmaDec_DecodeToDic(uint8_t* src, uint32_t srcLen)
{
    uint32_t srcLen0 = srcLen;
    uint32_t inSize = srcLen;
    int checkEndMarkNow;
    uint32_t processed;
    uint8_t *bufLimit;
    uint32_t dummyRes;
    uint32_t rem;
    uint32_t lookAhead;

    srcLen = 0;
    LzmaDec_WriteRem(global->dicfLimit);

    while(global->remainLen != kMatchSpecLenStart)
    {
        if(global->needFlush)
        {
            while(inSize > 0 && global->tempBufSize < RC_INIT_SIZE)
            {
                global->tempBuf[global->tempBufSize] = 0xFF & src[0];
                global->tempBufSize = global->tempBufSize + 1;
                src = src + 1;
                srcLen = srcLen + 1;
                inSize = inSize - 1;
            }

            if(global->tempBufSize < RC_INIT_SIZE)
            {
                if(srcLen != srcLen0) return SZ_ERROR_NEEDS_MORE_INPUT_PARTIAL;
                return SZ_ERROR_NEEDS_MORE_INPUT;
            }

            if((0xFF & global->tempBuf[0]) != 0) return SZ_ERROR_DATA;

            LzmaDec_InitRc(global->tempBuf);
            global->tempBufSize = 0;
        }

        checkEndMarkNow = FALSE;

        if(global->dicfPos >= global->dicfLimit)
        {
            if((global->remainLen == 0) && (global->code == 0))
            {
                if(srcLen != srcLen0) return SZ_ERROR_CHUNK_NOT_CONSUMED;
                return SZ_OK /* MAYBE_FINISHED_WITHOUT_MARK */;
            }

            if(global->remainLen != 0) return SZ_ERROR_NOT_FINISHED;
            checkEndMarkNow = TRUE;
        }

        if(global->needInitLzma) LzmaDec_InitStateReal();

        if(global->tempBufSize == 0)
        {

            if(inSize < LZMA_REQUIRED_INPUT_MAX || checkEndMarkNow)
            {
                dummyRes = LzmaDec_TryDummy(src, inSize);

                if(dummyRes == DUMMY_ERROR)
                {
                    memcpy(global->tempBuf, src, inSize);
                    global->tempBufSize = inSize;
                    srcLen += inSize;
                    if(srcLen != srcLen0) return SZ_ERROR_NEEDS_MORE_INPUT_PARTIAL;
                    return SZ_ERROR_NEEDS_MORE_INPUT;
                }

                if(checkEndMarkNow && dummyRes != DUMMY_MATCH) return SZ_ERROR_NOT_FINISHED;
                bufLimit = src;
            }
            else
            {
                bufLimit = src + inSize - LZMA_REQUIRED_INPUT_MAX;
            }

            global->buf = src;
            LzmaDec_DecodeReal2(global->dicfLimit, bufLimit);
            processed = (global->buf - src);
            srcLen = srcLen + processed;
            src = src + processed;
            inSize = inSize - processed;
        }
        else
        {
            rem = global->tempBufSize;
            lookAhead = 0;

            while((rem < LZMA_REQUIRED_INPUT_MAX) && (lookAhead < inSize))
            {
                global->tempBuf[rem] = 0xFF & src[lookAhead];
                rem = rem + 1;
                lookAhead = lookAhead + 1;
            }

            global->tempBufSize = rem;

            if(rem < LZMA_REQUIRED_INPUT_MAX || checkEndMarkNow)
            {
                dummyRes = LzmaDec_TryDummy(global->tempBuf, rem);

                if(dummyRes == DUMMY_ERROR)
                {
                    srcLen = srcLen + lookAhead;
                    if(srcLen != srcLen0) return SZ_ERROR_NEEDS_MORE_INPUT_PARTIAL;
                    return SZ_ERROR_NEEDS_MORE_INPUT;
                }

                if(checkEndMarkNow && dummyRes != DUMMY_MATCH) return SZ_ERROR_NOT_FINISHED;
            }

            global->buf = global->tempBuf;
            LzmaDec_DecodeReal2(global->dicfLimit, global->buf);
            lookAhead = lookAhead - (rem - (global->buf - global->tempBuf));
            srcLen = srcLen + lookAhead;
            src = src + lookAhead;
            inSize = inSize - lookAhead;
            global->tempBufSize = 0;
        }
    }

    if(global->code != 0) return SZ_ERROR_DATA;
    return SZ_ERROR_FINISHED_WITH_MARK;
}



/* Tries to preread r bytes to the read buffer. Returns the number of bytes
 * available in the read buffer. If smaller than r, that indicates EOF.
 *
 * Doesn't try to preread more than absolutely necessary, to avoid copies in
 * the future.
 *
 * Works only if r <= sizeof(readBuf).
 */
uint32_t Preread(uint32_t r)
{
    uint32_t hold;
    uint32_t p = global->readEnd - global->readCur;
    require(r <= sizeof_readBuf, "r <= sizeof_readBuf");

    if(p < r)     /* Not enough pending available. */
    {
        if(global->readBuf + sizeof_readBuf - global->readCur + 0 < r)
        {
            /* If no room for r bytes to the end, discard bytes from the beginning. */
            global->readBuf = memmove(global->readBuf, global->readCur, p);
            global->readEnd = global->readBuf + p;
            global->readCur = global->readBuf;
        }

        while(p < r)
        {
            /* our single spot for reading input */
            hold = fgetc(source);
            pos = pos + 1;
            /* EOF or error on input. */
            if(EOF == hold) break;

            /* otherwise just add it */
            global->readEnd[0] = (0xFF & hold) | ((~0xFF) & global->readEnd[0]);
            global->readEnd = global->readEnd + 1;
            p = p + 1;
        }
    }

    return p;
}

void IgnoreVarint(void)
{
    while((0xFF & global->readCur[0]) >= 0x80)
    {
        global->readCur = global->readCur + 1;
    }
    global->readCur = global->readCur + 1;
}

uint32_t IgnoreZeroBytes(uint32_t c)
{
    while(c > 0)
    {
        if((0xFF & global->readCur[0]) != 0)
        {
            global->readCur = global->readCur + 1;
            return SZ_ERROR_BAD_PADDING;
        }
        global->readCur = global->readCur + 1;
        c = c - 1;
    }

    return SZ_OK;
}

uint32_t GetLE4(uint8_t *p)
{
    return (0xFF & p[0]) | (0xFF & p[1]) << 8 | (0xFF & p[2]) << 16 | (0xFF & p[3]) << 24;
}

/* Expects global->dicSize be set already. Can be called before or after InitProp. */
void InitDecode(void)
{
    /* global->lc = global->pb = global->lp = 0; */  /* needinitprop will initialize it */
    global->dicfLimit = 0;  /* We'll increment it later. */
    global->needInitDic = TRUE;
    global->needInitState = TRUE;
    global->needInitProp = TRUE;
    global->writtenPos = 0;
    global->writeRemaining = BITS32;
    global->discardedSize = 0;
    global->dicfPos = 0;
    LzmaDec_InitDicAndState(TRUE, TRUE);
}

uint32_t InitProp(uint8_t b)
{
    uint32_t lc;
    uint32_t lp;

    if(b >= (9 * 5 * 5))
    {
        return SZ_ERROR_BAD_LCLPPB_PROP;
    }

    lc = b % 9;
    b = b / 9;
    global->pb = b / 5;
    lp = b % 5;

    if(lc + lp > LZMA2_LCLP_MAX)
    {
        return SZ_ERROR_BAD_LCLPPB_PROP;
    }

    global->lc = lc;
    global->lp = lp;
    global->needInitProp = FALSE;
    return SZ_OK;
}


/* Reads .xz or .lzma data from source, writes uncompressed bytes to destination,
 * uses CLzmaDec.dic. It verifies some aspects of the file format (so it
 * can't be tricked to an infinite loop etc.), it doesn't verify checksums
 * (e.g. CRC32).
 */
uint32_t DecompressXzOrLzma(void)
{
    uint8_t checksumSize;
    /* Block header flags */
    uint32_t bhf;
    uint32_t result;
    /* uncompressed chunk size*/
    uint32_t us;

    /* needed by lzma */
    uint32_t srcLen;
    uint32_t res;

    /* needed by xz */
    uint8_t blockSizePad;
    uint32_t bhs;
    uint32_t bhs2;
    uint8_t dicSizeProp;
    uint8_t* readAtBlock;
    uint8_t control;
    uint8_t numRecords;
    /* compressed chunk size */
    uint32_t cs;
    int initDic;
    uint8_t mode;
    int initState;
    int isProp;

    /* 12 for the stream header + 12 for the first block header + 6 for the
     * first chunk header. empty.xz is 32 bytes.
     */
    if(Preread(12 + 12 + 6) < 12 + 12 + 6)
    {
        return SZ_ERROR_INPUT_EOF;
    }

    /* readbuf[7] is actually stream flags, should also be 0. */
    if(0 != memcmp(global->readCur, "\xFD""7zXZ\0", 7))
    {
        /* sanity check for lzma */
        require((0xFF & global->readCur[0]) <= 225, "lzma check 1 failed");
        require((0xFF & global->readCur[13]) == 0, "lzma check 2 failed");
        require((((bhf = GetLE4(global->readCur + 9)) == 0) || (bhf == BITS32)), "lzma check 3 failed");
        require((global->dicSize = GetLE4(global->readCur + 1)) >= LZMA_DIC_MIN, "lzma check 4 failed");

        /* Based on https://svn.python.org/projects/external/xz-5.0.3/doc/lzma-file-format.txt */
        /* TODO(pts): Support 8-byte uncompressed size. */
        if(bhf == 0) us = GetLE4(global->readCur + 5);
        else us = bhf;

        if(global->dicSize > MAX_DIC_SIZE) return SZ_ERROR_UNSUPPORTED_DICTIONARY_SIZE;

        InitDecode();
        global->allocCapacity = 0;
        global->dicf = NULL;
        /* LZMA2 restricts lc + lp <= 4. LZMA requires lc + lp <= 12.
         * We apply the LZMA2 restriction here (to save memory in
         * CLzmaDec.probs), thus we are not able to extract some legitimate
         * .lzma files.
         */
        result = (InitProp(0xFF & global->readCur[0]));
        if(result != SZ_OK) return result;

        global->readCur = global->readCur + 13;  /* Start decompressing the 0 byte. */
        global->dicfLimit = global->writeRemaining;
        global->writeRemaining = us;

        if(us <= global->dicSize) GrowCapacity(us);

        while((global->discardedSize + global->dicfPos) != us)
        {

            if((srcLen = Preread(sizeof_readBuf)) == 0)
            {
                if(us != BITS32) return SZ_ERROR_INPUT_EOF;
                break;
            }

            res = LzmaDec_DecodeToDic(global->readCur, srcLen);
            global->readCur = global->readCur + srcLen;

            if(res == SZ_ERROR_FINISHED_WITH_MARK) break;

            if(res != SZ_ERROR_NEEDS_MORE_INPUT && res != SZ_OK) return res;
        }

        Flush();
        return SZ_OK;
    }

    global->allocCapacity = 0;
    global->dicf = NULL;

    while(TRUE)
    {
        /* Based on https://tukaani.org/xz/xz-file-format-1.0.4.txt */
        switch(0xFF & global->readCur[7])
        {
            /* None */
            case 0: checksumSize = 1;
                    break;
            /* CRC32 */
            case 1: checksumSize = 4;
                    break;
            /* CRC64, typical xz output. */
            case 4: checksumSize = 8;
                    break;
            default: return SZ_ERROR_BAD_CHECKSUM_TYPE;
        }

        /* Also ignore the CRC32 after checksumSize. */
        global->readCur = global->readCur + 12;

        while(TRUE)
        {
            /* We need it modulo 4, so a uint8_t is enough. */
            blockSizePad = 3;
            require(global->readEnd - global->readCur >= 12, "readEnd - readCur >= 12");  /* At least 12 bytes preread. */

            bhs = 0xFF & global->readCur[0];
            /* Last block, index follows. */
            if(bhs == 0)
            {
                global->readCur = global->readCur + 1;
                /* This is actually a varint, but it's shorter to read it as a byte. */
                numRecords = 0xFF & global->readCur[0];
                global->readCur = global->readCur + 1;
                while(0 != numRecords) {
                    /* a varint is at most 9 bytes long, but may be shorter */
                    Preread(9);
                    IgnoreVarint();
                    Preread(9);
                    IgnoreVarint();
                    numRecords = numRecords - 1;
                }
                /* Synchronize to 4-byte boundary */
                if (0 != ((pos - (global->readEnd - global->readCur)) & 3)) {
                    Preread(4 - ((pos - (global->readEnd - global->readCur)) & 3));
                    global->readCur = global->readCur + (4 - ((pos - (global->readEnd - global->readCur)) & 3));
                }
                /* Consume crc32 of index + stream footer */
                Preread(16);
                global->readCur = global->readCur + 16;
                break;
            }
            global->readCur = global->readCur + 1;

            /* Block header size includes the bhs field above and the CRC32 below. */
            bhs = (bhs + 1) << 2;

            /* Typically the Preread(12 + 12 + 6) above covers it. */
            if(Preread(bhs) < bhs)
            {
                return SZ_ERROR_INPUT_EOF;
            }

            readAtBlock = global->readCur;
            bhf = 0xFF & global->readCur[0];
            global->readCur = global->readCur + 1;

            if((bhf & 2) != 0) return SZ_ERROR_UNSUPPORTED_FILTER_COUNT;
            if((bhf & 20) != 0) return SZ_ERROR_BAD_BLOCK_FLAGS;
            /* Compressed size present. */
            /* Usually not present, just ignore it. */
            if((bhf & 64) != 0) IgnoreVarint();
            /* Uncompressed size present. */
            /* Usually not present, just ignore it. */
            if((bhf & 128) != 0) IgnoreVarint();

            /* This is actually a varint, but it's shorter to read it as a byte. */
            if((0xFF & global->readCur[0]) != FILTER_ID_LZMA2) return SZ_ERROR_UNSUPPORTED_FILTER_ID;
            global->readCur = global->readCur + 1;

            /* This is actually a varint, but it's shorter to read it as a byte. */
            if((0xFF & global->readCur[0]) != 1) return SZ_ERROR_UNSUPPORTED_FILTER_PROPERTIES_SIZE;
            global->readCur = global->readCur + 1;

            dicSizeProp = 0xFF & global->readCur[0];
            global->readCur = global->readCur + 1;

            /* Typical large dictionary sizes:
             * 35: 805306368 bytes == 768 MiB
             * 36: 1073741824 bytes == 1 GiB
             * 37: 1610612736 bytes, largest supported by .xz
             * 38: 2147483648 bytes == 2 GiB
             * 39: 3221225472 bytes == 3 GiB
             * 40: 4294967295 bytes, largest supported by .7z
             */
            if(dicSizeProp > 40) return SZ_ERROR_BAD_DICTIONARY_SIZE;

            /* LZMA2 and .xz support it, we don't (for simpler memory management on
             * 32-bit systems).
             */
            if(dicSizeProp > MAX_DIC_SIZE_PROP) return SZ_ERROR_UNSUPPORTED_DICTIONARY_SIZE;

            /* Works if dicSizeProp <= 39. */
            global->dicSize = ((2 | ((dicSizeProp) & 1)) << ((dicSizeProp) / 2 + 11));
            /* TODO(pts): Free dic after use, also after realloc error. */
            require(global->dicSize >= LZMA_DIC_MIN, "global->dicSize >= LZMA_DIC_MIN");
            GrowCapacity(global->dicSize + MAX_MATCH_SIZE + sizeof_writeBuf);
            bhs2 = global->readCur - readAtBlock + 5;

            if(bhs2 > bhs) return SZ_ERROR_BLOCK_HEADER_TOO_LONG;

            result = IgnoreZeroBytes(bhs - bhs2);
            if(result != 0) return result;

            /* Ignore CRC32. */
            global->readCur = global->readCur + 4;
            /* Typically it's offset 24, xz creates it by default, minimal. */

            /* Finally Parse LZMA2 stream. */
            InitDecode();

            while(TRUE)
            {
                require(global->dicfPos == global->dicfLimit, "global->dicfPos == global->dicfLimit");

                /* Actually 2 bytes is enough to get to the index if everything is
                 * aligned and there is no block checksum.
                 */
                if(Preread(6) < 6) return SZ_ERROR_INPUT_EOF;
                control = 0xFF & global->readCur[0];

                if(control == 0)
                {
                    global->readCur = global->readCur + 1;
                    break;
                }
                else if(((control - 3) & 0xFF) < 0x7D) return SZ_ERROR_BAD_CHUNK_CONTROL_BYTE;

                us = ((0xFF & global->readCur[1]) << 8) + (0xFF & global->readCur[2]) + 1;

                /* Uncompressed chunk. */
                if(control < 3)
                {
                    /* assume it was already setup */
                    initDic = FALSE;
                    cs = us;
                    global->readCur = global->readCur + 3;
                    blockSizePad = blockSizePad - 3;

                    /* now test that assumption */
                    if(control == 1)
                    {
                        global->needInitProp = global->needInitState;
                        global->needInitState = TRUE;
                        global->needInitDic = FALSE;
                    }
                    else if(global->needInitDic) return SZ_ERROR_DATA;

                    LzmaDec_InitDicAndState(initDic, FALSE);
                }
                else
                {
                    /* LZMA chunk. */
                    mode = (((control) >> 5) & 3);
                    if(mode == 3) initDic = TRUE;
                    else initDic = FALSE;

                    if(mode > 0) initState = TRUE;
                    else initState = FALSE;

                    if((control & 64) != 0) isProp = TRUE;
                    else isProp = FALSE;

                    us = us + ((control & 31) << 16);
                    cs = ((0xFF & global->readCur[3]) << 8) + (0xFF & global->readCur[4]) + 1;

                    if(isProp)
                    {
                        result = InitProp(0xFF & global->readCur[5]);
                        if(result != 0) return result;

                        global->readCur = global->readCur + 1;
                        blockSizePad = blockSizePad - 1;
                    }
                    else if(global->needInitProp) return SZ_ERROR_MISSING_INITPROP;

                    global->readCur = global->readCur + 5;
                    blockSizePad = blockSizePad - 5;

                    if((!initDic && global->needInitDic) || (!initState && global->needInitState))
                    {
                        return SZ_ERROR_DATA;
                    }

                    LzmaDec_InitDicAndState(initDic, initState);
                    global->needInitDic = FALSE;
                    global->needInitState = FALSE;
                }

                require(us <= (1 << 24), "us <= (1 << 24)");
                require(cs <= (1 << 16), "cs <= (1 << 16)");
                require(global->dicfPos == global->dicfLimit, "global->dicfPos == global->dicfLimit");
                FlushDiscardOldFromStartOfDic();
                global->dicfLimit = global->dicfLimit + us;

                if(global->dicfLimit < us) return SZ_ERROR_MEM;

                /* Read 6 extra bytes to optimize away a read(...) system call in
                 * the Prefetch(6) call in the next chunk header.
                 */
                if(Preread(cs + 6) < cs) return SZ_ERROR_INPUT_EOF;

                /* Uncompressed chunk, at most 64 KiB. */
                if(control < 3)
                {
                    require((global->dicfPos + us) == global->dicfLimit, "global->dicfPos + us == global->dicfLimit");
                    FlushDiscardGrowDic(us);
                    memcpy(global->dicf + global->dicfPos, global->readCur, us);
                    global->dicfPos = global->dicfPos + us;

                    if((global->checkDicSize == 0) && ((global->dicSize - global->processedPos) <= us))
                    {
                        global->checkDicSize = global->dicSize;
                    }

                    global->processedPos = global->processedPos + us;
                }
                else
                {
                    /* Compressed chunk. */
                    /* This call doesn't change global->dicfLimit. */
                    result = LzmaDec_DecodeToDic(global->readCur, cs);

                    if(result != 0) return result;
                }

                if(global->dicfPos != global->dicfLimit) return SZ_ERROR_BAD_DICPOS;

                global->readCur = global->readCur + cs;
                blockSizePad = blockSizePad - cs;
                /* We can't discard decompressbuf[:global->dicfLimit] now,
                 * because we need it a dictionary in which subsequent calls to
                 * Lzma2Dec_DecodeToDic will look up backreferences.
                 */
            }

            Flush();
            /* End of LZMA2 stream. */

            /* End of block. */
            /* 7 for padding4 and CRC32 + 12 for the next block header + 6 for the next
             * chunk header.
             */
            if(Preread(7 + 12 + 6) < 7 + 12 + 6) return SZ_ERROR_INPUT_EOF;
            /* Ignore block padding. */
            result = (IgnoreZeroBytes(blockSizePad & 3));
            if(result != 0) return result;

            global->readCur = global->readCur + checksumSize;  /* Ignore CRC32, CRC64 etc. */
        }

        /* Look for another concatenated stream */

        /* 12 for the stream header + 12 for the first block header + 6 for the
         * first chunk header. empty.xz is 32 bytes.
         */
        if(Preread(12 + 12 + 6) < 12 + 12 + 6)
        {
            break;
        }

        if(0 != memcmp(global->readCur, "\xFD""7zXZ\0", 7)) {
            break;
        }
    }

    /* The .xz input file continues with the index, which we ignore from here. */
    return SZ_OK;
}

int main(int argc, char **argv)
{
    uint32_t res;
    char* name;
    char* dest;
    FUZZING = FALSE;
    name = NULL;
    dest = NULL;
    pos = 0;

    /* process arguments */
    int i = 1;
    while (i < argc)
    {
        if(NULL == argv[i])
        {
            i = i + 1;
        }
        else if(match(argv[i], "-f") || match(argv[i], "--file"))
        {
            name = argv[i+1];
            require(NULL != name, "the --file option requires a filename to be given\n");
            i = i + 2;
        }
        else if(match(argv[i], "-o") || match(argv[i], "--output"))
        {
            dest = argv[i+1];
            require(NULL != dest, "the --output option requires a filename to be given\n");
            i = i + 2;
        }
        else if(match(argv[i], "--chaos") || match(argv[i], "--fuzz-mode") || match(argv[i], "--fuzzing"))
        {
            FUZZING = TRUE;
            fputs("fuzz-mode enabled, preparing for chaos\n", stderr);
            i = i + 1;
        }
        else if(match(argv[i], "-h") || match(argv[i], "--help"))
        {
            fputs("Usage: ", stderr);
            fputs(argv[0], stderr);
            fputs(" [--file $input.xz or --file $input.lzma] (or it'll read from stdin)\n", stderr);
            fputs(" [--output $output] (or it'll write to stdout)\n", stderr);
            fputs("--help to get this message\n", stderr);
            fputs("--fuzz-mode if you wish to fuzz this application safely\n", stderr);
            exit(EXIT_SUCCESS);
        }
        else
        {
            fputs("Unknown option:", stderr);
            fputs(argv[i], stderr);
            fputs("\nAborting to avoid problems\n", stderr);
            exit(EXIT_FAILURE);
        }
    }

    if(NULL != name) source = fopen(name, "r");
    else source = stdin;
    if(source == NULL)
    {
        fputs("File ", stderr);
        fputs(name, stderr);
        fputs(" not found!\n", stderr);
        return 1;
    }
    if(NULL != dest) destination = fopen(dest, "w");
    else destination = stdout;

    if(FUZZING) destination = fopen("/dev/null", "w");
    global = calloc(1, sizeof(struct CLzmaDec));
    global->readBuf = calloc(sizeof_readBuf, sizeof(uint8_t));
    global->readCur = global->readBuf;
    global->readEnd = global->readBuf;
    global->allocCapacity = 0;
    global->dicSize = 0;
    res = DecompressXzOrLzma();
    free(global->dicf);  /* Pacify valgrind(1). */
    free(global->readBuf);
    free(global);
    return res;
}

File /src/unbz2.c

Source file is 'src/unbz2.c'.
URL: https://github.com/FransFaase/MES-replacement/blob/64abad6a2a55cbef00ffa065e1c019c6a1932acf/src/unbz2.c
/* Copyright (C) 2003, 2007 Rob Landley <rob@landley.net>
 * Copyright (C) 2022 Paul Dersey <pdersey@gmail.com>
 * This file is part of mescc-tools-extra
 *
 * mescc-tools-extra is free software: you can redistribute it and/or modify
 * it under the terms of the GNU General Public License as published by
 * the Free Software Foundation, either version 3 of the License, or
 * (at your option) any later version.
 *
 * mescc-tools-extra is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 * GNU General Public License for more details.
 *
 * You should have received a copy of the GNU General Public License
 * along with mescc-tools-extra.  If not, see <http://www.gnu.org/licenses/>.
 */

/* bzcat.c - bzip2 decompression
 *
 * Copyright 2003, 2007 Rob Landley <rob@landley.net>
 *
 * Based on a close reading (but not the actual code) of the original bzip2
 * decompression code by Julian R Seward (jseward@acm.org), which also
 * acknowledges contributions by Mike Burrows, David Wheeler, Peter Fenwick,
 * Alistair Moffat, Radford Neal, Ian H. Witten, Robert Sedgewick, and
 * Jon L. Bentley.
 *
 * No standard.
*/

/********************************************************************************
 * unbz2.c is a bz2 file decompression utility based on bzcat.c with            *
 * modifications to enable being built by M2-Planet with M2libc.                *
 ********************************************************************************/

#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <unistd.h>
#include <fcntl.h>
#include "bootstrappable.c"

// Constants for huffman coding
#define MAX_GROUPS               6
#define GROUP_SIZE               50     /* 64 would have been more efficient */
#define MAX_HUFCODE_BITS         20     /* Longest huffman code allowed */
#define MAX_SYMBOLS              258    /* 256 literals + RUNA + RUNB */
#define SYMBOL_RUNA              0
#define SYMBOL_RUNB              1

// Other housekeeping constants
#define IOBUF_SIZE               4096

// Status return values
#define RETVAL_LAST_BLOCK        (-100)
#define RETVAL_NOT_BZIP_DATA     (-1)
#define RETVAL_DATA_ERROR        (-2)
#define RETVAL_OBSOLETE_INPUT    (-3)

#define INT_MAX 2147483647

// This is what we know about each huffman coding group
struct group_data
{
    int *limit;
    int *base;
    int *permute;
    char minLen;
    char maxLen;
};

// Data for burrows wheeler transform

struct bwdata
{
    unsigned origPtr;
    int *byteCount;
    // State saved when interrupting output
    int writePos;
    int writeRun;
    int writeCount;
    int writeCurrent;
    unsigned dataCRC;
    unsigned headerCRC;
    unsigned *dbuf;
};

// Structure holding all the housekeeping data, including IO buffers and
// memory that persists between calls to bunzip
struct bunzip_data
{
    // Input stream, input buffer, input bit buffer
    int in_fd;
    int inbufCount;
    int inbufPos;
    char *inbuf;
    unsigned inbufBitCount;
    unsigned inbufBits;

    // Output buffer
    char *outbuf;
    int outbufPos;

    unsigned totalCRC;

    // First pass decompression data (Huffman and MTF decoding)
    char *selectors;                  // nSelectors=15 bits
    struct group_data *groups;   // huffman coding tables
    int symTotal;
    int groupCount;
    int nSelectors;
    unsigned *symToByte;
    unsigned *mtfSymbol;

    // The CRC values stored in the block header and calculated from the data
    unsigned *crc32Table;

    // Second pass decompression data (burrows-wheeler transform)
    unsigned dbufSize;
    struct bwdata* bwdata;
};

int FUZZING;


void crc_init(unsigned *crc_table, int little_endian)
{
    unsigned i;
    unsigned j;
    unsigned c;

    // Init the CRC32 table (big endian)
    for(i = 0; i < 256; i += 1)
    {
        if(little_endian)
        {
            c = i;
        }
        else
        {
            c = i << 24;
        }

        for(j = 8; j > 0; j -= 1)
        {
            if(little_endian)
            {
                if(c & 1)
                {
                    c = (c >> 1) ^ 0xEDB88320;
                }
                else
                {
                    c = c >> 1;
                }
            }
            else
            {
                if(c & 0x80000000)
                {
                    c = (c << 1) ^ 0x04C11DB7;
#if defined(__M2__)

                    // & 0xFFFFFFFF not working
                    if(sizeof(unsigned) == 8)
                    {
                        c <<= 32;
                        c >>= 32;
                    }

#endif
                }
                else
                {
                    c = c << 1;
                }
            }
        }

        crc_table[i] = c;
    }
}

// Return the next nnn bits of input.  All reads from the compressed input
// are done through this function.  All reads are big endian.
unsigned get_bits(struct bunzip_data *bd, char bits_wanted)
{
    unsigned bits = 0;

    // If we need to get more data from the byte buffer, do so.  (Loop getting
    // one byte at a time to enforce endianness and avoid unaligned access.)
    while(bd->inbufBitCount < bits_wanted)
    {
        // If we need to read more data from file into byte buffer, do so
        if(bd->inbufPos == bd->inbufCount)
        {
            if(0 >= (bd->inbufCount = read(bd->in_fd, bd->inbuf, IOBUF_SIZE)))
            {
                exit(1);
            }

            bd->inbufPos = 0;
        }

        // Avoid 32-bit overflow (dump bit buffer to top of output)
        if(bd->inbufBitCount >= 24)
        {
            bits = bd->inbufBits & ((1 << bd->inbufBitCount) - 1);
            bits_wanted = bits_wanted - bd->inbufBitCount;
            bits = bits << bits_wanted;
            bd->inbufBitCount = 0;
        }

        // Grab next 8 bits of input from buffer.
        bd->inbufBits = (bd->inbufBits << 8) | (bd->inbuf[bd->inbufPos] & 0xFF);
        bd->inbufPos = bd->inbufPos + 1;
        bd->inbufBitCount = bd->inbufBitCount + 8;
    }

    // Calculate result
    bd->inbufBitCount = bd->inbufBitCount - bits_wanted;
    bits = bits | ((bd->inbufBits >> bd->inbufBitCount) & ((1 << bits_wanted) - 1));
    return bits;
}

/* Read block header at start of a new compressed data block.  Consists of:
 *
 * 48 bits : Block signature, either pi (data block) or e (EOF block).
 * 32 bits : bw->headerCRC
 * 1  bit  : obsolete feature flag.
 * 24 bits : origPtr (Burrows-wheeler unwind index, only 20 bits ever used)
 * 16 bits : Mapping table index.
 *[16 bits]: symToByte[symTotal] (Mapping table.  For each bit set in mapping
 *           table index above, read another 16 bits of mapping table data.
 *           If correspondig bit is unset, all bits in that mapping table
 *           section are 0.)
 *  3 bits : groupCount (how many huffman tables used to encode, anywhere
 *           from 2 to MAX_GROUPS)
 * variable: hufGroup[groupCount] (MTF encoded huffman table data.)
 */

int read_block_header(struct bunzip_data *bd, struct bwdata *bw)
{
    struct group_data *hufGroup;
    int hh;
    int ii;
    int jj;
    int kk;
    int symCount;
    int *base;
    int *limit;
    unsigned uc;
    unsigned *length = calloc(MAX_SYMBOLS, sizeof(unsigned));
    unsigned *temp = calloc(MAX_HUFCODE_BITS + 1, sizeof(unsigned));
    size_t minLen;
    size_t maxLen;
    int pp;
#if defined(__M2__)
    int int_array = sizeof(int);
    int group_data_array = sizeof(struct group_data);
#else
    int int_array = 1;
    int group_data_array = 1;
#endif
    size_t hold;
    // Read in header signature and CRC (which is stored big endian)
    ii = get_bits(bd, 24);
    jj = get_bits(bd, 24);
    bw->headerCRC = get_bits(bd, 32);

    // Is this the EOF block with CRC for whole file?  (Constant is "e")
    if(ii == 0x177245 && jj == 0x385090)
    {
        free(length);
        free(temp);
        return RETVAL_LAST_BLOCK;
    }

    // Is this a valid data block?  (Constant is "pi".)
    if(ii != 0x314159 || jj != 0x265359)
    {
        return RETVAL_NOT_BZIP_DATA;
    }

    // We can add support for blockRandomised if anybody complains.
    if(get_bits(bd, 1))
    {
        return RETVAL_OBSOLETE_INPUT;
    }

    if((bw->origPtr = get_bits(bd, 24)) > bd->dbufSize)
    {
        return RETVAL_DATA_ERROR;
    }

    // mapping table: if some byte values are never used (encoding things
    // like ascii text), the compression code removes the gaps to have fewer
    // symbols to deal with, and writes a sparse bitfield indicating which
    // values were present.  We make a translation table to convert the symbols
    // back to the corresponding bytes.
    hh = get_bits(bd, 16);
    bd->symTotal = 0;

    for(ii = 0; ii < 16; ii += 1)
    {
        if(hh & (1 << (15 - ii)))
        {
            kk = get_bits(bd, 16);

            for(jj = 0; jj < 16; jj += 1)
            {
                if(kk & (1 << (15 - jj)))
                {
                    bd->symToByte[bd->symTotal] = (16 * ii) + jj;
                    bd->symTotal += 1;
                }
            }
        }
    }

    // How many different huffman coding groups does this block use?
    bd->groupCount = get_bits(bd, 3);

    if(bd->groupCount < 2 || bd->groupCount > MAX_GROUPS)
    {
        return RETVAL_DATA_ERROR;
    }

    // nSelectors: Every GROUP_SIZE many symbols we switch huffman coding
    // tables.  Each group has a selector, which is an index into the huffman
    // coding table arrays.
    //
    // Read in the group selector array, which is stored as MTF encoded
    // bit runs.  (MTF = Move To Front.  Every time a symbol occurs its moved
    // to the front of the table, so it has a shorter encoding next time.)
    if(!(bd->nSelectors = get_bits(bd, 15)))
    {
        return RETVAL_DATA_ERROR;
    }

    for(ii = 0; ii < bd->groupCount; ii += 1)
    {
        bd->mtfSymbol[ii] = ii;
    }

    for(ii = 0; ii < bd->nSelectors; ii += 1)
    {
        // Get next value
        for(jj = 0; get_bits(bd, 1); jj += 1)
            if(jj >= bd->groupCount)
            {
                return RETVAL_DATA_ERROR;
            }

        // Decode MTF to get the next selector, and move it to the front.
        uc = bd->mtfSymbol[jj];

        while(jj)
        {
            jj = jj - 1;
            bd->mtfSymbol[jj + 1] = bd->mtfSymbol[jj];
        }

        bd->mtfSymbol[0] = bd->selectors[ii] = uc;
    }

    // Read the huffman coding tables for each group, which code for symTotal
    // literal symbols, plus two run symbols (RUNA, RUNB)
    symCount = bd->symTotal + 2;

    for(jj = 0; jj < bd->groupCount; jj += 1)
    {
        // Read lengths
        hh = get_bits(bd, 5);

        for(ii = 0; ii < symCount; ii += 1)
        {
            while(TRUE)
            {
                // !hh || hh > MAX_HUFCODE_BITS in one test.
                if(MAX_HUFCODE_BITS - 1 < hh - 1)
                {
                    return RETVAL_DATA_ERROR;
                }

                // Grab 2 bits instead of 1 (slightly smaller/faster).  Stop if
                // first bit is 0, otherwise second bit says whether to
                // increment or decrement.
                kk = get_bits(bd, 2);

                if(kk & 2)
                {
                    hh += (1 - ((kk & 1) << 1));
                }
                else
                {
                    bd->inbufBitCount += 1;
                    break;
                }
            }

            length[ii] = hh;
        }

        // Find largest and smallest lengths in this group
        minLen = maxLen = length[0];

        for(ii = 1; ii < symCount; ii += 1)
        {
            hold = length[ii];
            if(hold > maxLen)
            {
                maxLen = hold;
            }
            else if(hold < minLen)
            {
                minLen = hold;
            }
        }

        /* Calculate permute[], base[], and limit[] tables from length[].
         *
         * permute[] is the lookup table for converting huffman coded symbols
         * into decoded symbols.  It contains symbol values sorted by length.
         *
         * base[] is the amount to subtract from the value of a huffman symbol
         * of a given length when using permute[].
         *
         * limit[] indicates the largest numerical value a symbol with a given
         * number of bits can have.  It lets us know when to stop reading.
         *
         * To use these, keep reading bits until value <= limit[bitcount] or
         * youve read over 20 bits (error).  Then the decoded symbol
         * equals permute[hufcode_value - base[hufcode_bitcount]].
         */
        hufGroup = bd->groups + (group_data_array * jj);
        require(minLen > 0, "hufGroup minLen can't have negative values\n");
        require(minLen <= MAX_HUFCODE_BITS, "hufGroup minLen can't exceed MAX_HUFCODE_BITS\n");
        hufGroup->minLen = minLen;
        require(maxLen > 0, "hufGroup maxLen can't have negative values\n");
        require(maxLen <= MAX_HUFCODE_BITS, "hufGroup maxLen can't exceed MAX_HUFCODE_BITS\n");
        hufGroup->maxLen = maxLen;
        // Note that minLen cant be smaller than 1, so we adjust the base
        // and limit array pointers so were not always wasting the first
        // entry.  We do this again when using them (during symbol decoding).
        base = hufGroup->base - (int_array * 1);
        require(0 <= base, "can't have a negative hufGroup->base\n");
        limit = hufGroup->limit - (int_array * 1);
        // zero temp[] and limit[], and calculate permute[]
        pp = 0;

        for(ii = minLen; ii <= maxLen; ii += 1)
        {
            require(MAX_HUFCODE_BITS >= ii, "Invalid HUFCODE_BITS length\n");
            temp[ii] = 0;
            limit[ii] = 0;

            for(hh = 0; hh < symCount; hh += 1)
            {
                if(length[hh] == ii)
                {
                    require(MAX_SYMBOLS >= pp, "pp exceeded MAX_SYMBOLS\n");
                    hufGroup->permute[pp] = hh;
                    pp += 1;
                }
            }
        }

        // Count symbols coded for at each bit length
        for(ii = 0; ii < symCount; ii += 1)
        {
            hold = length[ii];
            require(MAX_HUFCODE_BITS >= hold, "Invalid HUFCODE_BITS length\n");
            temp[hold] += 1;
        }

        /* Calculate limit[] (the largest symbol-coding value at each bit
         * length, which is (previous limit<<1)+symbols at this level), and
         * base[] (number of symbols to ignore at each bit length, which is
         * limit minus the cumulative count of symbols coded for already). */
        pp = hh = 0;

        for(ii = minLen; ii < maxLen; ii += 1)
        {
            pp += temp[ii];
            limit[ii] = pp - 1;
            pp = pp << 1;
            hh += temp[ii];
            base[ii + 1] = pp - hh;
        }

        limit[maxLen] = pp + temp[maxLen] - 1;
        limit[maxLen + 1] = INT_MAX;
        base[minLen] = 0;
    }

    free(length);
    free(temp);
    return 0;
}

/* First pass, read blocks symbols into dbuf[dbufCount].
 *
 * This undoes three types of compression: huffman coding, run length encoding,
 * and move to front encoding.  We have to undo all those to know when weve
 * read enough input.
 */

int read_huffman_data(struct bunzip_data *bd, struct bwdata *bw)
{
    struct group_data *hufGroup;
    int ii;
    int jj;
    int kk;
    int runPos;
    int dbufCount;
    int symCount;
    int selector;
    int nextSym;
    int *byteCount;
    int *base;
    int *limit;
    unsigned hh;
    unsigned *dbuf = bw->dbuf;
    unsigned uc;
#if defined(__M2__)
    int int_array = sizeof(int);
    int group_data_array = sizeof(struct group_data);
#else
    int int_array = 1;
    int group_data_array = 1;
#endif
    // Weve finished reading and digesting the block header.  Now read this
    // blocks huffman coded symbols from the file and undo the huffman coding
    // and run length encoding, saving the result into dbuf[dbufCount++] = uc
    // Initialize symbol occurrence counters and symbol mtf table
    byteCount = bw->byteCount;

    for(ii = 0; ii < 256; ii += 1)
    {
        byteCount[ii] = 0;
        bd->mtfSymbol[ii] = ii;
    }

    // Loop through compressed symbols.  This is the first "tight inner loop"
    // that needs to be micro-optimized for speed.  (This one fills out dbuf[]
    // linearly, staying in cache more, so isnt as limited by DRAM access.)
    runPos = 0;
    dbufCount = 0;
    symCount = 0;
    selector = 0;
    // Some unnecessary initializations to shut gcc up.
    base = 0;
    limit = 0;
    hufGroup = 0;
    hh = 0;

    while(TRUE)
    {
        // Have we reached the end of this huffman group?
        if(!(symCount))
        {
            // Determine which huffman coding group to use.
            symCount = GROUP_SIZE - 1;

            if(selector >= bd->nSelectors)
            {
                return RETVAL_DATA_ERROR;
            }

            hufGroup = bd->groups + (group_data_array * bd->selectors[selector]);
            selector += 1;
            base = hufGroup->base - (int_array * 1);
            require(0 <= base, "can't have negative hufGroup->base\n");
            limit = hufGroup->limit - (int_array * 1);
        }
        else
        {
            symCount -= 1;
        }

        // Read next huffman-coded symbol (into jj).
        ii = hufGroup->minLen;
        jj = get_bits(bd, ii);

        while(jj > limit[ii])
        {
            // if (ii > hufGroup->maxLen) return RETVAL_DATA_ERROR;
            ii += 1;

            // Unroll get_bits() to avoid a function call when the datas in
            // the buffer already.
            if(bd->inbufBitCount)
            {
                bd->inbufBitCount -= 1;
                kk = (bd->inbufBits >> bd->inbufBitCount) & 1;
            }
            else
            {
                kk = get_bits(bd, 1);
            }

            jj = (jj << 1) | kk;
        }

        // Huffman decode jj into nextSym (with bounds checking)
        jj -= base[ii];

        if(ii > hufGroup->maxLen || jj >= MAX_SYMBOLS)
        {
            return RETVAL_DATA_ERROR;
        }

        nextSym = hufGroup->permute[jj];

        // If this is a repeated run, loop collecting data
        if(nextSym <= SYMBOL_RUNB)
        {
            // If this is the start of a new run, zero out counter
            if(!runPos)
            {
                runPos = 1;
                hh = 0;
            }

            /* Neat trick that saves 1 symbol: instead of or-ing 0 or 1 at
               each bit position, add 1 or 2 instead. For example,
               1011 is 1<<0 + 1<<1 + 2<<2. 1010 is 2<<0 + 2<<1 + 1<<2.
               You can make any bit pattern that way using 1 less symbol than
               the basic or 0/1 method (except all bits 0, which would use no
               symbols, but a run of length 0 doesnt mean anything in this
               context). Thus space is saved. */
            hh += (runPos << nextSym); // +runPos if RUNA; +2*runPos if RUNB
            runPos = runPos << 1;
            continue;
        }

        /* When we hit the first non-run symbol after a run, we now know
           how many times to repeat the last literal, so append that many
           copies to our buffer of decoded symbols (dbuf) now. (The last
           literal used is the one at the head of the mtfSymbol array.) */
        if(runPos)
        {
            runPos = 0;

            // Check for integer overflow
            if(hh > bd->dbufSize || dbufCount + hh > bd->dbufSize)
            {
                return RETVAL_DATA_ERROR;
            }

            uc = bd->symToByte[bd->mtfSymbol[0]];
            byteCount[uc] += hh;

            while(hh)
            {
                hh -= 1;
                dbuf[dbufCount] = uc;
                dbufCount += 1;
            }
        }

        // Is this the terminating symbol?
        if(nextSym > bd->symTotal)
        {
            break;
        }

        /* At this point, the symbol we just decoded indicates a new literal
           character. Subtract one to get the position in the MTF array
           at which this literal is currently to be found. (Note that the
           result cant be -1 or 0, because 0 and 1 are RUNA and RUNB.
           Another instance of the first symbol in the mtf array, position 0,
           would have been handled as part of a run.) */
        if(dbufCount >= bd->dbufSize)
        {
            return RETVAL_DATA_ERROR;
        }

        ii = nextSym - 1;
        uc = bd->mtfSymbol[ii];

        // On my laptop, unrolling this memmove() into a loop shaves 3.5% off
        // the total running time.
        while(ii)
        {
            ii -= 1;
            bd->mtfSymbol[ii + 1] = bd->mtfSymbol[ii];
        }

        bd->mtfSymbol[0] = uc;
        uc = bd->symToByte[uc];
        // We have our literal byte.  Save it into dbuf.
        byteCount[uc] += 1;
        dbuf[dbufCount] = uc;
        dbufCount += 1;
    }

    // Now we know what dbufCount is, do a better sanity check on origPtr.
    if(bw->origPtr >= (bw->writeCount = dbufCount))
    {
        return RETVAL_DATA_ERROR;
    }

    return 0;
}

// Flush output buffer to disk
void flush_bunzip_outbuf(struct bunzip_data *bd, int out_fd)
{
    if(bd->outbufPos)
    {
        if(write(out_fd, bd->outbuf, bd->outbufPos) != bd->outbufPos)
        {
            exit(1);
        }

        bd->outbufPos = 0;
    }
}

void burrows_wheeler_prep(struct bunzip_data *bd, struct bwdata *bw)
{
    int ii;
    int jj;
    int kk;
    unsigned *dbuf = bw->dbuf;
    int *byteCount = bw->byteCount;
    unsigned uc;
    // Turn byteCount into cumulative occurrence counts of 0 to n-1.
    jj = 0;

    for(ii = 0; ii < 256; ii += 1)
    {
        kk = jj + byteCount[ii];
        byteCount[ii] = jj;
        jj = kk;
    }

    // Use occurrence counts to quickly figure out what order dbuf would be in
    // if we sorted it.
    for(ii = 0; ii < bw->writeCount; ii += 1)
    {
        uc = dbuf[ii] & 0xFF;
        dbuf[byteCount[uc]] = dbuf[byteCount[uc]] | (ii << 8);
        byteCount[uc] += 1;
    }

    // blockRandomised support would go here.
    // Using ii as position, jj as previous character, hh as current character,
    // and uc as run count.
    bw->dataCRC = 0xffffffff;

    /* Decode first byte by hand to initialize "previous" byte. Note that it
       doesnt get output, and if the first three characters are identical
       it doesnt qualify as a run (hence uc=255, which will either wrap
       to 1 or get reset). */
    if(bw->writeCount)
    {
        bw->writePos = dbuf[bw->origPtr];
        bw->writeCurrent = bw->writePos;
        bw->writePos = bw->writePos >> 8;
        bw->writeRun = -1;
    }
}

// Decompress a block of text to intermediate buffer
int read_bunzip_data(struct bunzip_data *bd)
{
    int rc = read_block_header(bd, bd->bwdata);

    if(!rc)
    {
        rc = read_huffman_data(bd, bd->bwdata);
    }

    // First thing that can be done by a background thread.
    burrows_wheeler_prep(bd, bd->bwdata);
    return rc;
}

// Undo burrows-wheeler transform on intermediate buffer to produce output.
// If !len, write up to len bytes of data to buf.  Otherwise write to out_fd.
// Returns len ? bytes written : 0.  Notice all errors are negative #s.
//
// Burrows-wheeler transform is described at:
// http://dogma.net/markn/articles/bwt/bwt.htm
// http://marknelson.us/1996/09/01/bwt/

int write_bunzip_data(struct bunzip_data *bd, struct bwdata *bw,
                      int out_fd, char *outbuf, int len)
{
    unsigned *dbuf = bw->dbuf;
    int count;
    int pos;
    int current;
    int run;
    int copies;
    int outbyte;
    int previous;
    int gotcount = 0;
    int i;
    int crc_index;

    while(TRUE)
    {
        // If last read was short due to end of file, return last block now
        if(bw->writeCount < 0)
        {
            return bw->writeCount;
        }

        // If we need to refill dbuf, do it.
        if(!bw->writeCount)
        {
            i = read_bunzip_data(bd);

            if(i)
            {
                if(i == RETVAL_LAST_BLOCK)
                {
                    bw->writeCount = i;
                    return gotcount;
                }
                else
                {
                    return i;
                }
            }
        }

        // loop generating output
        count = bw->writeCount;
        pos = bw->writePos;
        current = bw->writeCurrent;
        run = bw->writeRun;

        while(count)
        {
            // If somebody (like tar) wants a certain number of bytes of
            // data from memory instead of written to a file, humor them.
            if(len && bd->outbufPos >= len)
            {
                goto dataus_interruptus;
            }

            count -= 1;
            // Follow sequence vector to undo Burrows-Wheeler transform.
            previous = current;
            pos = dbuf[pos];
            current = pos & 0xff;
            pos = pos >> 8;

            // Whenever we see 3 consecutive copies of the same byte,
            // the 4th is a repeat count
            if(run == 3)
            {
                run += 1;
                copies = current;
                outbyte = previous;
                current = -1;
            }
            else
            {
                run += 1;
                copies = 1;
                outbyte = current;
            }

            // Output bytes to buffer, flushing to file if necessary
            while(copies)
            {
                copies -= 1;

                if(bd->outbufPos == IOBUF_SIZE)
                {
                    flush_bunzip_outbuf(bd, out_fd);
                }

                bd->outbuf[bd->outbufPos] = outbyte;
                bd->outbufPos += 1;
                crc_index = ((bw->dataCRC >> 24) ^ outbyte) & 0xFF;
                bw->dataCRC = (bw->dataCRC << 8) ^ bd->crc32Table[crc_index];
            }

            if(current != previous)
            {
                run = 0;
            }
        }

        // decompression of this block completed successfully
        bw->dataCRC = ~(bw->dataCRC);
#if defined(__M2__)

        // & 0xFFFFFFFF not working
        if(sizeof(unsigned) == 8)
        {
            bw->dataCRC <<= 32;
            bw->dataCRC >>= 32;
        }

#endif
        bd->totalCRC = ((bd->totalCRC << 1) | (bd->totalCRC >> 31)) ^ bw->dataCRC;

        // if this block had a crc error, force file level crc error.
        if(bw->dataCRC != bw->headerCRC)
        {
            bd->totalCRC = bw->headerCRC + 1;
            return RETVAL_LAST_BLOCK;
        }

dataus_interruptus:
        bw->writeCount = count;

        if(len)
        {
            gotcount += bd->outbufPos;
            memcpy(outbuf, bd->outbuf, len);
            // If we got enough data, checkpoint loop state and return
            len -= bd->outbufPos;

            if(len < 1)
            {
                bd->outbufPos -= len;

                if(bd->outbufPos)
                {
                    memmove(bd->outbuf, bd->outbuf + len, bd->outbufPos);
                }

                bw->writePos = pos;
                bw->writeCurrent = current;
                bw->writeRun = run;
                return gotcount;
            }
        }
    }
}

// Allocate the structure, read file header. If !len, src_fd contains
// filehandle to read from. Else inbuf contains data.
int start_bunzip(struct bunzip_data **bdp, int src_fd)
{
    struct bunzip_data *bd;
    unsigned i;
    // Figure out how much data to allocate.
    i = sizeof(struct bunzip_data);
    // Allocate bunzip_data. Most fields initialize to zero.
    *bdp = malloc(i);
    bd = *bdp;
    memset(bd, 0, i);
    bd->inbuf = calloc(IOBUF_SIZE, sizeof(char));
    bd->outbuf = calloc(IOBUF_SIZE, sizeof(char));
    bd->selectors = calloc(32768, sizeof(char));
    bd->groups = calloc(MAX_GROUPS, sizeof(struct group_data));

    for(i = 0; i < MAX_GROUPS; i += 1)
    {
        bd->groups[i].limit = calloc(MAX_HUFCODE_BITS + 1, sizeof(int));
        bd->groups[i].base = calloc(MAX_HUFCODE_BITS, sizeof(int));
        bd->groups[i].permute = calloc(MAX_SYMBOLS, sizeof(int));
    }

    bd->symToByte = calloc(256, sizeof(unsigned));
    bd->mtfSymbol = calloc(256, sizeof(unsigned));
    bd->crc32Table = calloc(256, sizeof(unsigned));
    bd->bwdata = calloc(1, sizeof(struct bwdata));
    bd->bwdata->byteCount = calloc(256, sizeof(int));
    unsigned *crc32Table;
    bd->in_fd = src_fd;
    crc_init(bd->crc32Table, 0);
    // Ensure that file starts with "BZh".
    char *header = "BZh";

    for(i = 0; i < 3; i += 1) if(get_bits(bd, 8) != header[i])
        {
            return RETVAL_NOT_BZIP_DATA;
        }

    // Next byte ascii 1-9, indicates block size in units of 100k of
    // uncompressed data. Allocate intermediate buffer for block.
    i = get_bits(bd, 8);

    if(i < 49 || i > 57)
    {
        return RETVAL_NOT_BZIP_DATA;
    }

    bd->dbufSize = 100000 * (i - 48);
    bd->bwdata[0].dbuf = malloc(bd->dbufSize * sizeof(int));
    return 0;
}

// Example usage: decompress src_fd to dst_fd. (Stops at end of bzip data,
// not end of file.)
int bunzipStream(int src_fd, int dst_fd)
{
    struct bunzip_data *bd;
    int i;
    int j;

    if(!(i = start_bunzip(&bd, src_fd)))
    {
        i = write_bunzip_data(bd, bd->bwdata, dst_fd, 0, 0);

        if(i == RETVAL_LAST_BLOCK)
        {
            if(bd->bwdata[0].headerCRC == bd->totalCRC)
            {
                i = 0;
            }
            else
            {
                i = RETVAL_DATA_ERROR;
            }
        }
    }

    flush_bunzip_outbuf(bd, dst_fd);
    free(bd->bwdata[0].dbuf);
    free(bd->inbuf);
    free(bd->outbuf);
    free(bd->selectors);

    for(j = 0; j < MAX_GROUPS; j += 1)
    {
        free(bd->groups[j].limit);
        free(bd->groups[j].base);
        free(bd->groups[j].permute);
    }

    free(bd->groups);
    free(bd->symToByte);
    free(bd->mtfSymbol);
    free(bd->crc32Table);
    free(bd->bwdata->byteCount);
    free(bd->bwdata);
    free(bd);
    return -i;
}

void do_bunzip2(int in_fd, int out_fd)
{
    int err = bunzipStream(in_fd, out_fd);

    if(err)
    {
        exit(1);
    }
}

int main(int argc, char **argv)
{
    char *name = NULL;
    char *dest = NULL;
    FUZZING = FALSE;

    /* process arguments */
    int i = 1;

    while(i < argc)
    {
        if(NULL == argv[i])
        {
            i += 1;
        }
        else if(match(argv[i], "-f") || match(argv[i], "--file"))
        {
            name = argv[i + 1];
            require(NULL != name, "the --file option requires a filename to be given\n");
            i += 2;
        }
        else if(match(argv[i], "-o") || match(argv[i], "--output"))
        {
            dest = argv[i + 1];
            require(NULL != dest, "the --output option requires a filename to be given\n");
            i += 2;
        }
        else if(match(argv[i], "--fuzzing-mode"))
        {
            FUZZING = TRUE;
            i += 1;
        }
        else if(match(argv[i], "-h") || match(argv[i], "--help"))
        {
            fputs("Usage: ", stderr);
            fputs(argv[0], stderr);
            fputs(" --file $input.bz2", stderr);
            fputs(" --output $output\n", stderr);
            fputs("--help to get this message\n", stderr);
            exit(EXIT_SUCCESS);
        }
        else
        {
            fputs("Unknown option:", stderr);
            fputs(argv[i], stderr);
            fputs("\nAborting to avoid problems\n", stderr);
            exit(EXIT_FAILURE);
        }
    }

    /* Deal with no input */
    if(NULL == name)
    {
        fputs("an input file (--file $name) must be provided\n", stderr);
        exit(EXIT_FAILURE);
    }

    int in_fd = open(name, 0, 0);

    if(in_fd < 0)
    {
        fputs("Unable to open input file\n", stderr);
        exit(EXIT_FAILURE);
    }

    /* If an output name isn't provided */
    if(NULL == dest)
    {
        int length = strlen(name);
        require(length > 4, "file name length not sufficient, please provide output name with --output $filename\n");
        /* Assume they want the output file name to be the input file name minus the .bz2 */
        dest = calloc(length, sizeof(char));
        require(NULL != dest, "Failed to allocate new output file name\n");
        /* do name.bz2 => name */
        strcpy(dest, name);
        dest[length-3] = 0;
    }

    int out_fd;
    if(FUZZING)
    {
        /* Dump to /dev/null the garbage data produced during fuzzing */
        out_fd = open("/dev/null", O_WRONLY|O_CREAT|O_TRUNC, 0600);
    }
    else
    {
        out_fd = open(dest, O_WRONLY|O_CREAT|O_TRUNC, 0600);
    }

    if(out_fd < 0)
    {
        fputs("Unable to open output file for writing\n", stderr);
        exit(EXIT_FAILURE);
    }

    do_bunzip2(in_fd, out_fd);
    close(in_fd);
    close(out_fd);
    exit(0);
}

File /x86/after.kaem

Source file is 'task3/after.kaem'.
URL: https://github.com/FransFaase/MES-replacement/blob/64abad6a2a55cbef00ffa065e1c019c6a1932acf/task3/after.kaem
#!/bin/sh

# SPDX-FileCopyrightText: 2021 Andrius Å tikonas <andrius@stikonas.eu>
# SPDX-FileCopyrightText: 2021 Paul Dersey <pdersey@gmail.com>
# SPDX-FileCopyrightText: 2020-2022 Samuel Tyler <samuel@samuelt.me>
# SPDX-FileCopyrightText: 2022 Dor Askayo <dor.askayo@gmail.com>
#
# SPDX-License-Identifier: GPL-3.0-or-later

set -ex

PATH=/usr/bin

catm seed-full.kaem /steps/bootstrap.cfg /steps/env seed.kaem
kaem --file seed-full.kaem

File /steps/bootstrap.cfg

Source file is 'task3/steps/bootstrap.cfg'.
URL: https://github.com/FransFaase/MES-replacement/blob/64abad6a2a55cbef00ffa065e1c019c6a1932acf/task3/steps/bootstrap.cfg
ARCH=x86
ARCH_DIR=/x86
FORCE_TIMESTAMPS=False
CHROOT=True
UPDATE_CHECKSUMS=False
JOBS=1
SWAP_SIZE=0
FINAL_JOBS=1
INTERNAL_CI=False
INTERACTIVE=False
BARE_METAL=False
DISK=sda1
KERNEL_BOOTSTRAP=False
BUILD_KERNELS=False
CONFIGURATOR=False
MIRRORS=file://
MIRRORS_LEN=1

File /steps/env

Source file is 'task3/steps/env'.
URL: https://github.com/FransFaase/MES-replacement/blob/64abad6a2a55cbef00ffa065e1c019c6a1932acf/task3/steps/env
# SPDX-FileCopyrightText: 2023 Samuel Tyler <samuel@samuelt.me>
#
# SPDX-License-Identifier: GPL-3.0-or-later

DISTFILES=/external/distfiles
PREFIX=/usr
BINDIR=${PREFIX}/bin
LIBDIR=${PREFIX}/lib/mes
INCDIR=${PREFIX}/include/mes
SRCDIR=/steps
TMPDIR=/tmp

File /seed.kaem

Source file is 'task3/seed.kaem'.
URL: https://github.com/FransFaase/MES-replacement/blob/64abad6a2a55cbef00ffa065e1c019c6a1932acf/task3/seed.kaem
#!/bin/sh

# SPDX-FileCopyrightText: 2021 Andrius Å tikonas <andrius@stikonas.eu>
# SPDX-FileCopyrightText: 2021 Paul Dersey <pdersey@gmail.com>
# SPDX-FileCopyrightText: 2020-2022 Samuel Tyler <samuel@samuelt.me>
# SPDX-FileCopyrightText: 2022 Dor Askayo <dor.askayo@gmail.com>
#
# SPDX-License-Identifier: GPL-3.0-or-later

set -ex

# mes envars
MES_PKG=mes-0.27.1

tcc_cc -o /tmp/configurator.sl /src/stdlib.c /src/configurator.c
stack_c -i /x86/stack_c_intro.M1 /tmp/configurator.sl -o tmp/configurator.M1
blood-elf --file tmp/configurator.M1 --little-endian --output /tmp/configurator.blood_elf
M1 /tmp/configurator.M1 -o /tmp/configurator.macro
hex2 -o /tmp/configurator /x86/ELF-x86-debug.hex2 /tmp/configurator.macro /tmp/configurator.blood_elf
# Checksums
if match x${UPDATE_CHECKSUMS} xTrue; then
    sha256sum -o configurator.${ARCH}.checksums /tmp/configurator
else
    sha256sum -c configurator.${ARCH}.checksums
fi
/tmp/configurator /steps/configurator

tcc_cc -o /tmp/script-generator.sl /src/stdlib.c /src/script-generator.c
stack_c -i /x86/stack_c_intro.M1 /tmp/script-generator.sl -o tmp/script-generator.M1
blood-elf --file tmp/script-generator.M1 --little-endian --output /tmp/script-generator.blood_elf
M1 /tmp/script-generator.M1 -o /tmp/script-generator.macro
hex2 -o /tmp/script-generator /x86/ELF-x86-debug.hex2 /tmp/script-generator.macro /tmp/script-generator.blood_elf
# Checksums
if match x${UPDATE_CHECKSUMS} xTrue; then
    sha256sum -o script-generator.${ARCH}.checksums /tmp/script-generator
else
    sha256sum -c script-generator.${ARCH}.checksums
fi
/tmp/script-generator /steps/manifest

kaem --file /steps/0.sh

File /src/configurator.c

Source file is 'src/configurator.c'.
URL: https://github.com/FransFaase/MES-replacement/blob/64abad6a2a55cbef00ffa065e1c019c6a1932acf/src/configurator.c
/*
 * SPDX-FileCopyrightText: 2024 Samuel Tyler <samuel@samuelt.me>
 *
 * SPDX-License-Identifier: GPL-3.0-or-later
 */

#define MAX_STRING 2048
#define MAX_SHORT 512
#define MAX_ID 128
#define MAX_VAR 128

#include <bootstrappable.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include <sys/utsname.h>

#define TRUE 1
#define FALSE 0

#define KIND_NONE 0
#define KIND_MENU 1
#define KIND_OPTION 2

#define TYPE_NONE 0
#define TYPE_BOOL 1
#define TYPE_SIZE 2
#define TYPE_STRING 3
#define TYPE_INT 4

struct Entry {
    int kind; // either menu or option
    char *env_var; // name of the environment variable this option is stored in
    char *id; // the id of the configuration item
    char *short_desc; // short description of the config
    char *full_desc; // extended description of the config

    int type; // the type of the configuration option
    char *validation; // any validation rules
    char *val;
    char *default_val;

    struct Entry *children; // submenus
    struct Entry *parent;
    struct Entry *next;
};
typedef struct Entry Entry;

Entry *find_entry(Entry *head, char *id) {
    char *component = strchr(id, '/');
    if (component == NULL) {
        component = id + strlen(id);
    }

    Entry *current;
    Entry *final;
    int len;
    while (1) {
        len = component - id;

        current = head;
        while (current != NULL) {
            /* ensure that the id isn't just a substring of the component but actually is the component */
            if (strlen(current->id) == len && strncmp(id, current->id, len) == 0) {
                /* Found it! */
                final = current;
                head = current->children;
                break;
            }
            current = current->next;
        }
        if (current == NULL) {
            /* Did not find it */
            return NULL;
        }

        if (component[0] == '\0') {
            break;
        }

        component += 1;
        component = strchr(component, '/');
        if (component == NULL) {
            component = id + strlen(id);
        }
    }

    return final;
}

Entry *get_parent(Entry *head, char *id) {
    char *parent_id = calloc(MAX_ID, sizeof(char));
    strcpy(parent_id, id);
    char *final_slash = strrchr(parent_id, '/');
    final_slash[0] = '\0';
    Entry *ret = find_entry(head, parent_id);
    free(parent_id);
    return ret;
}

char read_string(FILE *f, char *out, int length) {
    int i = 0;
    char c = fgetc(f);
    while (c != ' ' && c != '\n' && c != EOF && i < length - 1) {
        out[i] = c;
        i += 1;
        c = fgetc(f);
    }
    if (i >= length - 1) {
        fputs("String too long!\n", stdout);
        fclose(f);
        exit(1);
    }
    out[i] = '\0';
    return c;
}

int set_val(Entry *entry, char *val) {
    if (entry->type == TYPE_BOOL) {
        if (strcmp(val, "True") != 0 && strcmp(val, "False") != 0) {
            fputs("Invalid input: ", stdout);
            fputs(val, stdout);
            fputs(" is not a boolean value\n", stdout);
            return 1;
        }
    } else if (entry->type == TYPE_INT) {
        int intval = atoi(val);
        if (intval == 0 && strcmp(val, "0") != 0) {
            fputs("Invalid input: ", stdout);
            fputs(val, stdout);
            fputs(" is not an integer\n", stdout);
            return 1;
        }
    } else if (entry->type == TYPE_SIZE) {
        /* We should have either a K, M, G, T, or no letter, at the end of the size. */
        char c = val[strlen(val) - 1];
        if (!(('0' <= c && c <= '9') || c == 'K' || c == 'M' || c == 'G' || c == 'T')) {
            fputs("Invalid input: ", stdout);
            fputc(c, stdout);
            fputs(" is not a valid suffix for a size\n", stdout);
            return 1;
        }
        /* Check it is an integer */
        char *final_char = val + strlen(val) - 1;
        if ('A' <= final_char[0] && final_char[0] <= 'Z') {
            final_char[0] = '\0';
        }
        int intval = atoi(val);
        if (intval == 0 && strcmp(val, "0") != 0) {
            fputs("Invalid input: ", stdout);
            fputs(val, stdout);
            fputs(" is not a valid size\n", stdout);
            return 1;
        }
        final_char[0] = c;
    } else if (entry->type == TYPE_STRING) {
        /* Validation rules. */
        char *validation = entry->validation;
        char *next;
        int found = FALSE;
        while (validation != NULL) {
            if (validation[0] == '\0') {
                found = TRUE;
                break;
            }
            next = strchr(validation, '|');
            if (next == NULL) {
                if (strcmp(validation, val) == 0) {
                    found = TRUE;
                }
                break;
            } else {
                if (strncmp(validation, val, next - validation) == 0) {
                    found = TRUE;
                }
            }
            validation = next + 1;
        }
        if (found == FALSE) {
            fputs("Invalid input: ", stdout);
            fputs(val, stdout);
            fputs(" does not match the validation rules ", stdout);
            fputs(entry->validation, stdout);
            fputc('\n', stdout);
            return 1;
        }
    }

    entry->val = calloc(strlen(val) + 1, sizeof(char));
    strcpy(entry->val, val);
    return 0;
}

void read_entry(char c, FILE *conf, Entry *head) {
    Entry *new = calloc(1, sizeof(Entry));

    /* Read the kind */
    if (c == 'm') {
        new->kind = KIND_MENU;
    } else if (c == 'o') {
        new->kind = KIND_OPTION;
    } else {
        fputs("Invalid entry: kind ", stdout);
        fputc(c, stdout);
        fputc('\n', stdout);
        fclose(conf);
        exit(1);
    }
    fgetc(conf);

    /* Read the id */
    new->id = calloc(MAX_ID, sizeof(char));
    c = read_string(conf, new->id, MAX_ID);
    if (c != ' ') {
        fputs("Invalid entry: no variable\n", stdout);
        fclose(conf);
        exit(1);
    }

    /* Read the environment variable */
    new->env_var = calloc(MAX_VAR, sizeof(char));
    c = read_string(conf, new->env_var, MAX_VAR);
    if (c != ' ') {
        fputs("Invalid entry: no data type\n", stdout);
        fclose(conf);
        exit(1);
    }
    if (strcmp(new->env_var, "_") == 0) {
        free(new->env_var);
        new->env_var = NULL;
    }

    /* Read the data type */
    char *data_type = calloc(MAX_ID, sizeof(char));
    read_string(conf, data_type, MAX_ID);
    if (c != ' ') {
        fputs("Invalid entry: no default value\n", stdout);
        fclose(conf);
        exit(1);
    }
    if (strcmp(data_type, "_") == 0) {
        new->type = TYPE_NONE;
    } else if (strcmp(data_type, "bool") == 0) {
        new->type = TYPE_BOOL;
    } else if (strcmp(data_type, "size") == 0) {
        new->type = TYPE_SIZE;
    } else if (strcmp(data_type, "int") == 0) {
        new->type = TYPE_INT;
    } else if (data_type[0] == '"') {
        new->type = TYPE_STRING;
        new->validation = data_type + 1;
        char *closing_quote = strrchr(data_type, '"');
        closing_quote[0] = '\0';
    } else {
        fputs("Invalid entry: unknown type: ", stdout);
        fputs(data_type, stdout);
        fputc('\n', stdout);
        fclose(conf);
        exit(1);
    }
    if (new->type != TYPE_STRING) {
        free(data_type);
    }

    /* Read the default value */
    char *default_val = calloc(MAX_STRING, sizeof(char));
    read_string(conf, default_val, MAX_ID);
    if (strcmp(default_val, "_") != 0) {
        set_val(new, default_val);
        new->default_val = default_val;
    } else {
        new->default_val = NULL;
    }

    /* Read the short description */
    new->short_desc = calloc(MAX_SHORT, sizeof(char));
    int i = 0;
    c = fgetc(conf);
    while (c != '\n' && c != EOF) {
        new->short_desc[i] = c;
        c = fgetc(conf);
        i += 1;
    }

    /* Read the long description */
    new->full_desc = calloc(MAX_STRING, sizeof(char));
    i = 0;
    c = fgetc(conf);
    char prev = '\0';
    while (!(c == '\n' && prev == '\n') && c != EOF) {
        new->full_desc[i] = c;
        prev = c;
        c = fgetc(conf);
        i += 1;
    }

    new->children = NULL;
    new->next = NULL;

    Entry *parent = get_parent(head, new->id);
    new->parent = parent;
    if (parent->children == NULL) {
        parent->children = new;
    } else {
        Entry *current = parent->children;
        while (current->next != NULL) {
            current = current->next;
        }
        current->next = new;
    }
}

Entry *read_config(char *filename) {
    FILE *conf = fopen(filename, "r");
    if (conf == NULL) {
        fputs("Unable to open ", stdout);
        fputs(filename, stdout);
        fputc('\n', stdout);
        exit(0);
    }
    char c = fgetc(conf);

    Entry *head = calloc(1, sizeof(Entry));
    head->id = "";
    head->env_var = "";
    head->next = NULL;
    Entry *current = head;

    while (c != EOF) {
        if (c == '#' || c == '\n') {
            /* Skip comments or empty lines. */
            while (c != '\n' && c != EOF) {
                c = fgetc(conf);
            }
        } else {
            read_entry(c, conf, head);
        }
        c = fgetc(conf);
    }

    fclose(conf);

    return head;
}

Entry *get_env_var(Entry *head, char *var) {
    Entry *ret;
    Entry *current;
    for (current = head->children; current != NULL; current = current->next) {
        if (current->env_var != NULL) {
            if (strcmp(current->env_var, var) == 0) {
                return current;
            }
        }
        if (current->children != NULL) {
            ret = get_env_var(current, var);
            if (ret != NULL) {
                return ret;
            }
        }
    }
    return NULL;
}

int set_cfg_varline(Entry *head, char *line) {
    char *var = calloc(strlen(line) + 1, sizeof(char));
    strcpy(var, line);
    char *val = strchr(var, '=');
    val[0] = '\0';
    val += 1;
    char *newline = strchr(val, '\n');
    if (newline != NULL) {
        newline[0] = '\0';
    }
    Entry *entry = get_env_var(head, var);
    if (entry != NULL) {
        int not_ok = set_val(entry, val);
        if (not_ok) {
            fputs("^ Originated from ", stdout);
            fputs(var, stdout);
            fputs("=", stdout);
            fputs(val, stdout);
            fputs("\n", stdout);
        }
    }
    return entry == NULL;
}

char *set_cfg_values(Entry *head, char **envp) {
    int i = 0;

    FILE *cfg = fopen("/steps/bootstrap.cfg", "r");
    if (cfg == NULL) {
        return "";
    }

    char *extra = calloc(MAX_STRING, sizeof(char));
    char *line = calloc(MAX_STRING, sizeof(char));
    while (fgets(line, MAX_STRING, cfg) != NULL) {
        if (set_cfg_varline(head, line)) {
            if (strncmp("CONFIGURATOR=", line, 13) != 0) {
                strcat(extra, line);
            }
        }
        free(line);
        line = calloc(MAX_STRING, sizeof(char));
    }

    fclose(cfg);

    return extra;
}

void write_cfg_list(Entry *head, FILE *cfg) {
    Entry *current;
    for (current = head->children; current != NULL; current = current->next) {
        if (current->kind == KIND_OPTION && current->val != NULL) {
            fputs(current->env_var, cfg);
            fputs("=", cfg);
            fputs(current->val, cfg);
            fputs("\n", cfg);
        }
        if (current->children != NULL) {
            write_cfg_list(current, cfg);
        }
    }
}

void write_cfg_values(Entry *head, char *extra, int configurator_done) {
    FILE *cfg = fopen("/steps/bootstrap.cfg", "w");
    if (cfg == NULL) {
        fputs("Unable to open /steps/bootstrap.cfg", stderr);
        exit(1);
    }
    if (configurator_done == TRUE) {
        fputs("CONFIGURATOR=False\n", cfg);
    }
    fputs(extra, cfg);
    write_cfg_list(head, cfg);
    fclose(cfg);
}

void print_short_desc(char *short_desc) {
    char *post_markers = strrchr(short_desc, ']');
    if (post_markers == NULL) {
        post_markers = short_desc;
    } else {
        post_markers += 1;
        while (post_markers[0] == ' ') {
            post_markers += 1;
        }
    }
    fputs(post_markers, stdout);
}

void print_recursive_desc(Entry *entry) {
    if (entry->parent != NULL) {
        if (strcmp(entry->parent->id, "") != 0) {
            print_recursive_desc(entry->parent);
            fputs("/", stdout);
            print_short_desc(entry->short_desc);
            return;
        }
    }
    print_short_desc(entry->short_desc);
}

int any_unset(Entry *head);

int check_set(Entry *entry, Entry *head) {
    int ret = 0;
    if (entry->kind == KIND_OPTION && entry->val == NULL) {
        fputs("The configuration option ", stdout);
        print_recursive_desc(entry);
        fputs(" is unset\n", stdout);
        ret = 1;
    }
    if (entry->children != NULL) {
        ret |= any_unset(entry);
    }
    return ret;
}

int any_unset(Entry *head) {
    int ret = 0;
    Entry *current;
    for (current = head->children; current != NULL; current = current->next) {
        ret |= check_set(current, head);
    }
    return ret;
}

void print_menu(Entry *menu, int is_toplevel) {
    if (!is_toplevel) {
        fputs("(0) [MENU] Go up\n", stdout);
    }
    int i = 1;
    Entry *current;
    for (current = menu->children; current != NULL; current = current->next) {
        printf("(%d)", i);
        if (current->kind == KIND_MENU) {
            fputs("[MENU] ", stdout);
        }
        fputs(current->short_desc, stdout);
        fputc('\n', stdout);
        i += 1;
    }
}

Entry *get_nth_option(Entry *menu, int n) {
    int i = 1;
    Entry *current;
    for (current = menu->children; current != NULL && i < n; current = current->next) {
        i += 1;
    }
    if (current == NULL) {
        printf("There is no option %d!\n", n);
    }
    return current;
}

void how_to_use(void) {
    fputs(
        "How to navigate around this configuration menu:\n"
        "h or help: at any time, will reprint this help message\n"
        "l or list: shows the current menu options\n"
        "o <num> or open <num>: open a (sub)menu\n"
        "? <num> or describe <num>: provides a more detailed description of an option or menu\n"
        "s <num> <val> or set <num> <val>: set the value of an option\n"
        "g <num> or get <num>: get the value of an option\n"
        "g all or get all: get the value of all options in the menu\n"
        "r <num> or reset <num>: reset the value of an option to the default (if there is one)\n"
        "e or exit: exits the program\n",
    stdout);
}

Entry *extract_num(char **command, Entry *menu) {
    command[0] = strchr(command[0], ' ');
    if (command[0] == NULL) {
        fputs("Expected menu number to operate on!\n", stdout);
    }
    command[0] += 1;
    char *num = command[0];
    char *new = strchr(command[0], ' ');
    if (new == NULL) {
        new = strchr(command[0], '\n');
    }
    command[0] = new;
    command[0][0] = '\0';
    command[0] += 1;
    /* strtoint does not check if it is not a number */
    int i;
    for (i = 0; i < strlen(num); i += 1) {
        if (!('0' <= num[i] && num[i] <= '9')) {
            fputs(num, stdout);
            fputs(" is not a menu number!\n", stdout);
            return NULL;
        }
    }
    int n = atoi(num);
    return get_nth_option(menu, n);
}

Entry *submenu(char *command, Entry *menu, Entry *head) {
    command = strchr(command, ' ');
    if (strlen(command) < 1) {
        fputs("Expected menu number to operate on!\n", stdout);
    }
    /* 0 is the "go up" menu option */
    if (command[1] == '0') {
        if (strcmp(menu->id, "") == 0) {
            fputs("There is no option 0!\n", stdout);
            return menu;
        }
        return menu->parent;
    }

    Entry *new = extract_num(&command, menu);
    if (new == NULL) {
        return menu;
    }
    if (new->kind != KIND_MENU) {
        fputs("This is not a menu!\n", stdout);
        return menu;
    }
    return new;
}

void print_description(char *command, Entry *menu) {
    Entry *opt = extract_num(&command, menu);
    if (opt != NULL) {
        fputs(opt->full_desc, stdout);
    }
}

void set_opt_value(char *command, Entry *menu) {
    Entry *opt = extract_num(&command, menu);
    if (opt == NULL) {
        return;
    }
    if (opt->kind != KIND_OPTION) {
        fputs("Cannot set a menu's value!\n", stdout);
        return;
    }

    /* Remove the newline */
    char *newline = strchr(command, '\n');
    newline[0] = '\0';
    set_val(opt, command);
}

void print_opt_value(Entry *opt) {
    print_short_desc(opt->short_desc);

    fputs(": ", stdout);
    if (opt->val == NULL) {
        fputs("unset", stdout);
    } else {
        fputs(opt->val, stdout);
    }
    fputc('\n', stdout);
}

void get_opt_value(char *command, Entry *menu) {
    Entry *opt = extract_num(&command, menu);
    if (opt == NULL) {
        return;
    }
    if (opt->kind != KIND_OPTION) {
        fputs("Cannot get a menu's value!\n", stdout);
        return;
    }

    print_opt_value(opt);
}

void get_all_values(Entry *menu) {
    Entry *current;
    for (current = menu->children; current != NULL; current = current->next) {
        if (current->kind == KIND_OPTION) {
            print_opt_value(current);
        }
    }
}

void reset_value(char *command, Entry *menu) {
    Entry *opt = extract_num(&command, menu);
    if (opt == NULL) {
        return;
    }
    if (opt->kind != KIND_OPTION) {
        fputs("Cannot reset a menu's value!\n", stdout);
        return;
    }
    opt->val = opt->default_val;
}

void no_input(Entry *head) {
    fputs("You don't seem to be running under Fiwix or Linux currently.\n", stdout);
    fputs("Likely, you are currently running under builder-hex0.\n", stdout);
    fputs("That's ok! We're going to make some assumptions; namely, that you do need\n", stdout);
    fputs("the kernel bootstrap, and that you'll get a chance to configure later.\n", stdout);
    write_cfg_values(head, "KERNEL_BOOTSTRAP=True\nBUILD_KERNELS=True\n", FALSE);
}

int main(int argc, char **argv) {
    char **envp = argv + (argc + 1);
    /*
     * Check we are being non-interactive and bootstrap.cfg exists in
     * which case we do not need to do anything.
     */
    char *interactivity = getenv("CONFIGURATOR");
    if (interactivity != NULL) {
        if (strcmp(interactivity, "False") == 0) {
            return 0;
        }
    }
    FILE *bootstrap_cfg = fopen("/steps/bootstrap.cfg", "r");
    if (bootstrap_cfg != NULL) {
        char *line = calloc(MAX_STRING, sizeof(char));
        while (fgets(line, MAX_STRING, bootstrap_cfg) != NULL) {
            if (strcmp(line, "CONFIGURATOR=False\n") == 0) {
                fclose(bootstrap_cfg);
                return 0;
            }
            free(line);
            line = calloc(MAX_STRING, sizeof(char));
        }
        fclose(bootstrap_cfg);
    }

    if (argc != 2) {
        fputs("Usage: ", stdout);
        fputs(argv[0], stdout);
        fputs(" <configuration>\n", stdout);
        exit(1);
    }
    Entry *head = read_config(argv[1]);
    char *extra = set_cfg_values(head, envp);

    /*
     * Check if we are NOT running under fiwix or linux.
     * If we are not, and need configuration to occur, then we presume that
     * we will not be able to get any input from the user.
     */
    struct utsname *kernel = calloc(1, sizeof(struct utsname));
    uname(kernel);
    if (kernel->sysname == NULL) {
        no_input(head);
        return 0;
    } else if (strcmp(kernel->sysname, "Linux") != 0 && strcmp(kernel->sysname, "Fiwix") != 0) {
        no_input(head);
        return 0;
    }

    fputs("Welcome to live-bootstrap!\n", stdout);
    fputs("We need to do some brief configuration before continuing.\n\n", stdout);
    how_to_use();
    fputc('\n', stdout);

    Entry *menu = head;
    print_menu(menu, menu == head);
    char *command = calloc(MAX_STRING, sizeof(char));
    fputs("\nCommand: ", stdout);
    fflush(stdout);
    command = fgets(command, MAX_STRING, stdin);
    while (command != NULL) {
        if (strcmp("h\n", command) == 0 || strcmp("help\n", command) == 0) {
            how_to_use();
        } else if (strcmp("l\n", command) == 0 || strcmp("list\n", command) == 0) {
            print_menu(menu, menu == head);
        } else if (strncmp("o ", command, 2) == 0 || strncmp("open ", command, 5) == 0) {
            menu = submenu(command, menu, head);
            print_menu(menu, menu == head);
        } else if (strncmp("? ", command, 2) == 0 || strncmp("describe ", command, 9) == 0) {
            print_description(command, menu);
        } else if (strcmp("g all\n", command) == 0 || strcmp("get all\n", command) == 0) {
            get_all_values(menu);
        } else if (strncmp("g ", command, 2) == 0 || strncmp("get ", command, 4) == 0) {
            get_opt_value(command, menu);
        } else if (strncmp("s ", command, 2) == 0 || strncmp("set ", command, 4) == 0) {
            set_opt_value(command, menu);
        } else if (strncmp("r ", command, 2) == 0 || strncmp("reset ", command, 6) == 0) {
            reset_value(command, menu);
        } else if (strcmp("e\n", command) == 0 || strcmp("exit\n", command) == 0) {
            if (!any_unset(head)) {
                break;
            }
        } else {
            fputs("Unknown command ", stdout);
            fputs(command, stdout);
        }
        fputs("\nCommand: ", stdout);
        fflush(stdout);
        /*
         * M2-Planet's fgets does not properly terminate the buffer if there is
         * already data in it
         */
        free(command);
        command = calloc(MAX_STRING, sizeof(char));
        command = fgets(command, MAX_STRING, stdin);
    }

    if (any_unset(head)) {
        fputs(
            "Uh oh! You have left me in a tough position - you can't input further because you\n"
            "closed the input stream. But the inputs you gave me are not valid!\n"
            "I'm going to re-exec myself and hope you are able to start again from scratch.\n",
            stderr
        );
        execve(argv[0], argv, envp);
        return 0;
    }

    write_cfg_values(head, extra, TRUE);

    fputs("\nThank you! We will now continue with the bootstrap.\n", stdout);

    return 0;
}

File /configurator.x86.checksums

Source file is 'task3/configurator.x86.checksums'.
URL: https://github.com/FransFaase/MES-replacement/blob/64abad6a2a55cbef00ffa065e1c019c6a1932acf/task3/configurator.x86.checksums
a990a8e2407bb4b01abcb3c2522a21ba26e1f6b86ab97c3fc9892ae5f2219f6f  ./tmp/configurator

File /src/script-generator.c

Source file is 'src/script-generator.c'.
URL: https://github.com/FransFaase/MES-replacement/blob/64abad6a2a55cbef00ffa065e1c019c6a1932acf/src/script-generator.c
/*
 * SPDX-FileCopyrightText: 2023 Samuel Tyler <samuel@samuelt.me>
 *
 * SPDX-License-Identifier: GPL-3.0-or-later
 */

#define MAX_TOKEN 64
#define MAX_STRING 2048

#include <bootstrappable.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

struct Token {
    char *val;
    struct Token *next;
};
typedef struct Token Token;

#define TYPE_BUILD 1
#define TYPE_IMPROVE 2
#define TYPE_DEFINE 3
#define TYPE_JUMP 4
#define TYPE_UNINSTALL 5

struct Directive {
    Token *tok;
    struct Directive *next;
    int type;
    char *arg; /* The primary argument */
};
typedef struct Directive Directive;

/* Tokenizer. */

/* Skip over a comment. */
char consume_comment(FILE *in) {
    /* Discard the rest of the line. */
    char c = fgetc(in);
    while (c != -1 && c != '\n')
        c = fgetc(in);
    return c;
}

char consume_line(FILE *in, Directive *directive) {
    char c = fgetc(in);

    /* Short-circuit if whole line is comment or blank line. */
    if (c == '#') {
        c = consume_comment(in);
        return c;
    } else if (c == '\n' || c == -1) {
        return c;
    }

    /* Ok, we will have something to put here. */
    directive->next = calloc(1, sizeof(Directive));
    directive = directive->next;

    Token *head = calloc(1, sizeof(Token));
    Token *cur = head;
    char *out;
    int i = 0;
    while (c != -1 && c != '\n') {
        /* Initialize next token. */
        cur->next = calloc(1, sizeof(Token));
        cur = cur->next;
        cur->val = calloc(MAX_TOKEN, sizeof(char));
        out = cur->val;
        /* Copy line to token until a space (or EOL/EOF) or comment is found. */
        while (c != -1 && c != '\n' && c != ' ' && c != '#') {
            out[0] = c;
            out += 1;
            c = fgetc(in);
        }
        /* Go to start of next token. */
        if (c == ' ') {
            c = fgetc(in);
        }
        /* Handle comment. */
        if (c == '#') {
            c = consume_comment(in);
        }
    }

    /* Add information to directive. */
    directive->tok = head->next;

    return c;
}

Directive *tokenizer(FILE *in) {
    Directive *head = calloc(1, sizeof(Directive));
    Directive *cur = head;

    char c;
    while (c != -1) {
        /*
         * Note that consume_line fills cur->next, not cur.
         * This avoids having an empty last Directive.
         */
        c = consume_line(in, cur);
        if (cur->next != NULL) {
            cur = cur->next;
        }
    }
    return head->next;
}

/* Config variables. */

struct Variable {
    char *name;
    char *val;
    struct Variable *next;
};
typedef struct Variable Variable;

Variable *variables;

Variable *load_config(void) {
    FILE *config = fopen("/steps/bootstrap.cfg", "r");
    /* File does not exist check. */
    if (config == NULL) {
        return NULL;
    }

    char *line = calloc(MAX_STRING, sizeof(char));
    Variable *head = calloc(1, sizeof(Variable));
    Variable *cur = head;
    /* For each line... */
    char *equals;
    while (fgets(line, MAX_STRING, config) != 0) {
        /* Weird M2-Planet behaviour. */
        if (*line == 0) {
            break;
        }
        cur->next = calloc(1, sizeof(Variable));
        cur = cur->next;
        /* Split on the equals. First half is name, second half is value. */
        equals = strchr(line, '=');
        if (equals == 0) {
            fputs("bootstrap.cfg should have the format var=val on each line.", stderr);
            exit(1);
        }
        cur->name = calloc(equals - line + 1, sizeof(char));
        strncpy(cur->name, line, equals - line);
        equals += 1;
        cur->val = calloc(strlen(equals), sizeof(char));
        strncpy(cur->val, equals, strlen(equals) - 1);
        line = calloc(MAX_STRING, sizeof(char));
    }
    variables = head->next;
    fclose(config);
}

void output_config(FILE *out) {
    Variable *variable;
    for (variable = variables; variable != NULL; variable = variable->next) {
        fputs(variable->name, out);
        fputs("=", out);
        fputs(variable->val, out);
        fputs("\n", out);
    }
}

char *get_var(char *name) {
    /* Search through existing variables. */
    Variable *var;
    Variable *last = NULL;
    for (var = variables; var != NULL; var = var->next) {
        if (strcmp(name, var->name) == 0) {
            return var->val;
        }
        last = var;
    }

    /* If the variable is unset, take it to be the empty string. */
    return "";
}

/* Recursive descent interpreter. */

Token *fill(Token *tok, Directive *directive, int type) {
    directive->type = type;
    directive->arg = tok->val;
    return tok->next;
}

Token *logic(Token *tok, char **val) {
    /* logic = "("
     *   (name |
     *   (name "==" value) |
     *   (name "!=" value) |
     *   (logic "||" logic) |
     *   (logic "&&" logic))
     *   ")"
     */

    char *lhs = tok->val;
    char *rhs;
    tok = tok->next;
    if (strcmp(tok->val, ")") == 0) {
        /* Case where it's just a constant. */
        *val = lhs;
        return tok;
    } else if (strcmp(tok->val, "==") == 0) {
        /* Case for equality. */
        rhs = tok->next->val;
        tok = tok->next->next;
        if (strcmp(get_var(lhs), rhs) == 0) {
            lhs = "True";
        } else {
            lhs = "False";
        }
    } else if (strcmp(tok->val, "!=") == 0) {
        /* Case for inequality. */
        rhs = tok->next->val;
        tok = tok->next->next;
        if (strcmp(get_var(lhs), rhs) == 0) {
            lhs = "False";
        } else {
            lhs = "True";
        }
    } else {
        fputs("Expected == or != after ", stderr);
        fputs(lhs, stderr);
        fputs(" in logic\n", stderr);
        exit(1);
    }

    if (strcmp(tok->val, ")") == 0) {
        *val = lhs;
        return tok;
    } else if (strcmp(tok->val, "||") == 0) {
        /* OR */
        tok = logic(tok->next, &rhs);
        if (strcmp(lhs, "True") == 0 || strcmp(rhs, "True") == 0) {
            lhs = "True";
        } else {
            lhs = "False";
        }
    } else if (strcmp(tok->val, "&&") == 0) {
        /* AND */
        tok = logic(tok->next, &rhs);
        if (strcmp(lhs, "True") == 0 && strcmp(rhs, "True") == 0) {
            lhs = "True";
        } else {
            lhs = "False";
        }
    } else {
        fputs("Expected || or && in logic\n", stderr);
        exit(1);
    }

    *val = lhs;
    return tok;
}

Token *primary_logic(Token *tok, char **val) {
    /* Starting ( */
    if (strcmp(tok->val, "(") != 0) {
        fputs("Expected logic to begin with (\n", stderr);
        exit(1);
    }
    tok = tok->next;

    tok = logic(tok, val);

    if (strcmp(tok->val, ")") != 0) {
        fputs("Expected logic to end with )\n", stderr);
        exit(1);
    }

    return tok;
}

int eval_predicate(Token *tok) {
    char *result;
    tok = primary_logic(tok, &result);
    return strcmp(result, "True") == 0;
}

Token *define(Token *tok, Directive *directive) {
    /* define = name "=" (logic | constant) */
    char *name = tok->val;
    tok = tok->next;
    if (strcmp(tok->val, "=") != 0) {
        fputs("define of ", stderr);
        fputs(name, stderr);
        fputs(" has a missing equals\n", stderr);
        exit(1);
    }
    tok = tok->next;

    char *val = calloc(MAX_STRING, sizeof(char));
    if (strcmp(tok->val, "(") == 0) {
        /* It is a logic. */
        tok = primary_logic(tok, &val);
    } else {
        /* It is a constant. */
        strcpy(val, tok->val);
    }

    /* Check for predicate. */
    tok = tok->next;
    if (tok != NULL) {
        if (!eval_predicate(tok)) {
            /* Nothing more to do. */
            return tok;
        }
    }

    /* Update existing variable, or else, add to the end of variables. */
    /* Special case: empty variables. */
    if (variables == NULL) {
        variables = calloc(1, sizeof(Variable));
        variables->name = name;
        variables->val = val;
    }

    Variable *var;
    for (var = variables; var->next != NULL; var = var->next) {
        if (strcmp(var->next->name, name) == 0) {
            var->next->val = val;
            break;
        }
    }
    if (var->next == NULL) {
        /* We did not update an existing variable. */
        var->next = calloc(1, sizeof(Variable));
        var->next->name = name;
        var->next->val = val;
    }

    return tok;
}

int interpret(Directive *directive) {
    /* directive = (build | improve | define | jump | uninstall) predicate? */
    Token *tok = directive->tok;
    if (strcmp(tok->val, "build:") == 0) {
        tok = fill(tok->next, directive, TYPE_BUILD);
    } else if (strcmp(tok->val, "improve:") == 0) {
        tok = fill(tok->next, directive, TYPE_IMPROVE);
    } else if (strcmp(tok->val, "jump:") == 0) {
        tok = fill(tok->next, directive, TYPE_JUMP);
    } else if (strcmp(tok->val, "define:") == 0) {
        tok = define(tok->next, directive);
        return 1; /* There is no codegen for a define. */
    } else if (strcmp(tok->val, "uninstall:") == 0) {
        tok = fill(tok->next, directive, TYPE_UNINSTALL);
        while (tok != NULL) {
            if (strcmp(tok->val, "(") == 0) {
                break;
            }
            if (strlen(directive->arg) + strlen(tok->val) + 1 > MAX_STRING) {
                fputs("somehow you have managed to have too many uninstall arguments.\n", stderr);
                exit(1);
            }
            directive->arg = strcat(directive->arg, " ");
            directive->arg = strcat(directive->arg, tok->val);
            tok = tok->next;
        }
    }

    if (tok != NULL) {
        return !eval_predicate(tok);
    }
    return 0;
}

Directive *interpreter(Directive *directives) {
    Directive *directive;
    Directive *last = NULL;
    for (directive = directives; directive != NULL; directive = directive->next) {
        if (interpret(directive)) {
            /* This means this directive needs to be removed from the linked list. */
            if (last == NULL) {
                /* First directive. */
                directives = directive->next;
            } else {
                last->next = directive->next;
            }
        } else {
            last = directive;
        }
    }
    return directives;
}

/* Script generator. */
FILE *start_script(int id, int bash_build) {
    /* Create the file /steps/$id.sh */
    char *filename = calloc(MAX_STRING, sizeof(char));
    sprintf(filename, "/steps/%d.sh", id);

    FILE *out = fopen(filename, "w");
    if (out == NULL) {
        fputs("Error opening output file ", stderr);
        fputs(filename, stderr);
        fputs("\n", stderr);
        exit(1);
    }

    if (bash_build) {
        fputs("#!/bin/bash\n", out);
        if (strcmp(get_var("INTERACTIVE"), "True") == 0) {
            if (bash_build != 1) {
                fputs("set -eEo pipefail\ntrap 'env PS1=\"[TRAP] \\w # \" bash -i' ERR\n", out);
            } else {
                /* FIXME early bash has buggy ERR trap handling */
                fputs("set -e\ntrap 'bash -c '\"'\"'while true; do printf \""
                "[TRAP - use Ctrl+D] $(pwd) # \"; eval \"$(cat)\"; done'\"'\"'' EXIT\n",
                out);
            }
        } else {
            fputs("set -e\n", out);
        }
        fputs("cd /steps\n", out);
        fputs(". ./bootstrap.cfg\n", out);
        fputs(". ./env\n", out);
        fputs(". ./helpers.sh\n", out);
    } else {
        fputs("set -ex\n", out);
        fputs("cd /steps\n", out);
        output_config(out);
        FILE *env = fopen("/steps/env", "r");
        char *line = calloc(MAX_STRING, sizeof(char));
        while (fgets(line, MAX_STRING, env) != 0) {
            /* Weird M2-Planet behaviour. */
            if (*line == 0) {
                break;
            }
            fputs(line, out);
            line = calloc(MAX_STRING, sizeof(char));
        }
        fclose(env);
    }

    return out;
}

void output_call_script(FILE *out, char *type, char *name, int bash_build, int source) {
    if (bash_build) {
        if (source) {
            fputs(". ", out);
        } else {
            fputs("bash ", out);
        }
    } else {
        fputs("kaem --file ", out);
    }
    fputs("/steps/", out);
    if (strlen(type) != 0) {
        fputs(type, out);
        fputs("/", out);
    }
    fputs(name, out);
    fputs(".sh\n", out);
}

void output_build(FILE *out, Directive *directive, int pass_no, int bash_build) {
    if (bash_build) {
        fputs("build ", out);
        fputs(directive->arg, out);
        fprintf(out, " pass%d.sh\n", pass_no);
    } else {
        fputs("pkg=", out);
        fputs(directive->arg, out);
        fputs("\n", out);
        fputs("cd ${pkg}\n", out);
        fprintf(out, "kaem --file pass%d.kaem\n", pass_no);
        fputs("cd ..\n", out);
    }
}

void generate_preseed_jump(int id) {
    FILE *out = fopen("/preseed-jump.kaem", "w");
    fputs("set -ex\n", out);
    fputs("PATH=/usr/bin\n", out);
    fprintf(out, "bash /steps/%d.sh\n", id);
    fclose(out);
}

void generate(Directive *directives) {
    /*
     * We are separating the stages given in the mainfest into a bunch of
     * smaller scripts. The following conditions call for the creation of
     * a new script:
     * - a jump
     * - build of bash
     */

    int counter = 0;

    /* Initially, we use kaem, not bash. */
    int bash_build = 0;

    FILE *out = start_script(counter, bash_build);
    counter += 1;

    Directive *directive;
    Directive *past;
    char *filename;
    int pass_no;
    for (directive = directives; directive != NULL; directive = directive->next) {
        if (directive->type == TYPE_BUILD) {
            /* Get what pass number this is. */
            pass_no = 1;
            for (past = directives; past != directive; past = past->next) {
                if (strcmp(past->arg, directive->arg) == 0) {
                    pass_no += 1;
                }
            }
            output_build(out, directive, pass_no, bash_build);
            if (strncmp(directive->arg, "bash-", 5) == 0) {
                if (!bash_build) {
                    /*
                     * We are transitioning from bash to kaem, the point at which "early
                     * preseed" occurs. So generate the preseed jump script at this point.
                     */
                    generate_preseed_jump(counter);
                }
                bash_build += 1;
                /* Create call to new script. */
                char s_counter[10];
                sprintf(s_counter, "%d", counter);
                output_call_script(out, "", s_counter, bash_build, 0);
                fclose(out);
                out = start_script(counter, bash_build);
                counter += 1;
            }
        } else if (directive->type == TYPE_IMPROVE) {
            output_call_script(out, "improve", directive->arg, bash_build, 1);
        } else if (directive->type == TYPE_JUMP) {
            /*
             * Create /init to call new script.
             * We actually do this by creating /init.X for some number X, and then
             * moving that to /init at the appropriate time.
             */
            filename = calloc(MAX_STRING, sizeof(char));
            if (bash_build) {
                fputs("mv /init /init.bak\n", out);
                /* Move new init to /init. */
                sprintf(filename, "/init.%d", counter);
                fputs("cp ", out);
                fputs(filename, out);
                fputs(" /init\n", out);
                fputs("chmod 755 /init\n", out);
            } else {
                sprintf(filename, "/kaem.run.%d", counter);
                fputs("cp ", out);
                fputs(filename, out);
                fputs(" /kaem.run\n", out);
                fputs("cp /usr/bin/kaem /init\n", out);
                fputs("chmod 755 /init\n", out);
            }

            output_call_script(out, "jump", directive->arg, bash_build, 1);
            fclose(out);

            if (bash_build) {
                out = fopen(filename, "w");
                if (out == NULL) {
                    fputs("Error opening /init\n", stderr);
                    exit(1);
                }
                fputs("#!/bin/bash\n", out);
            } else {
                out = fopen(filename, "w");
                if (out == NULL) {
                    fputs("Error opening /kaem.run\n", stderr);
                    exit(1);
                }
                fputs("set -ex\n", out);
            }
            char s_counter[10];
            sprintf(s_counter, "%d", counter);
            output_call_script(out, "", s_counter, bash_build, 0);
            fclose(out);
            out = start_script(counter, bash_build);
            counter += 1;
        } else if (directive->type == TYPE_UNINSTALL) {
            fputs("uninstall ", out);
            fputs(directive->arg, out);
            fputs("\n", out);
        }
    }
    fclose(out);
}

void main(int argc, char **argv) {
    if (argc != 2) {
        fputs("Usage: script-generator <script>\n", stderr);
        exit(1);
    }

    FILE *in = fopen(argv[1], "r");
    if (in == NULL) {
        fputs("Error opening input file\n", stderr);
        exit(1);
    }
    Directive *directives = tokenizer(in);
    fclose(in);
    load_config();
    directives = interpreter(directives);
    generate(directives);
    FILE *config = fopen("/steps/bootstrap.cfg", "w");
    output_config(config);
    fclose(config);
}

File /script-generator.x86.checksums

Source file is 'task3/script-generator.x86.checksums'.
URL: https://github.com/FransFaase/MES-replacement/blob/64abad6a2a55cbef00ffa065e1c019c6a1932acf/task3/script-generator.x86.checksums
de6344a81396f7a97d593b895d435f2d7484d5d1d9c1d5030c22707bf2297793  ./tmp/script-generator

File /steps/manifest

Source file is 'task3/steps/manifest'.
URL: https://github.com/FransFaase/MES-replacement/blob/64abad6a2a55cbef00ffa065e1c019c6a1932acf/task3/steps/manifest
# SPDX-FileCopyrightText: 2023 Samuel Tyler <samuel@samuelt.me>
#
# SPDX-License-Identifier: GPL-3.0-or-later
#
# This file follows a very simple, human readable and machine parseable syntax.
# Each line is in the format:
# <directive>: <arguments> <predicate>
#
# The supported directives and arguments are:
# - build; simply builds a particular package.
#   eg, build: make-3.82
# - improve; runs a script that makes a distinct and logical improvement to the system.
#   eg, improve: use_fhs
# - define: define a variable based upon other variables
#   eg, define: BUILD_FIWIX = KERNEL_BOOTSTRAP == True || BUILD_KERNELS == True
# - jump: jump (usually) to a new kernel, executes a script with that name
#   eg, jump: fiwix
# - uninstall; removes a package or filenames
#   eg, uninstall: perl-5.6.2
#   eg, uninstall: /usr/bin/lex /usr/bin/flex
#
# The following directives have special significance:
# - build directives beginning with "bash" (as well as jumps) trigger the generation of
#   a new script
# - the first improve directive containing "network" is used by generator.py to deduce
#   what source files need to be downloaded in advance (files referenced after that will
#   be downloaded during bootstrap, unless --external-sources is given)
#
# Other features:
# - predicate; based on variables set in bootstrap.cfg, require for something to execute
#   must be enclosed in brackets with spaces padded
#   eg, build: fiwix-1.5.0-lb1 ( BUILD_FIWIX == True )

build: checksum-transcriber-1.0
build: simple-patch-1.0
build: tcc-0.9.26
build: tcc-0.9.27

File /steps/checksum-transcriber-1.0/pass1.kaem

Source file is 'task3/steps/checksum-transcriber-1.0/pass1.kaem'.
URL: https://github.com/FransFaase/MES-replacement/blob/64abad6a2a55cbef00ffa065e1c019c6a1932acf/task3/steps/checksum-transcriber-1.0/pass1.kaem
#!/bin/sh

# SPDX-FileCopyrightText: 2023 Samuel Tyler <samuel@samuelt.me>
#
# SPDX-License-Identifier: GPL-3.0-or-later

set -ex

# Build & install
tcc_cc -o /tmp/checksum-transcriber.sl /src/stdlib.c src/checksum-transcriber.c
stack_c -i /${ARCH}/stack_c_intro.M1 /tmp/checksum-transcriber.sl -o /tmp/checksum-transcriber.M1
blood-elf --file /tmp/checksum-transcriber.M1 --little-endian --output /tmp/checksum-transcriber.blood_elf
M1 /tmp/checksum-transcriber.M1 -o /tmp/checksum-transcriber.macro
hex2 -o ${BINDIR}/checksum-transcriber /${ARCH}/ELF-${ARCH}-debug.hex2 /tmp/checksum-transcriber.macro /tmp/checksum-transcriber.blood_elf

# Checksums
if match x${UPDATE_CHECKSUMS} xTrue; then
    sha256sum -o ${pkg}.${ARCH}.checksums \
        /usr/bin/checksum-transcriber

    cp ${pkg}.${ARCH}.checksums ${SRCDIR}
else
    sha256sum -c ${pkg}.${ARCH}.checksums
fi

File /steps/checksum-transcriber-1.0/src/checksum-transcriber.c

Source file is 'task3/steps/checksum-transcriber-1.0/src/checksum-transcriber.c'.
URL: https://github.com/FransFaase/MES-replacement/blob/64abad6a2a55cbef00ffa065e1c019c6a1932acf/task3/steps/checksum-transcriber-1.0/src/checksum-transcriber.c
/*
 * SPDX-FileCopyrightText: 2022 Samuel Tyler <samuel@samuelt.me>
 *
 * SPDX-License-Identifier: GPL-3.0-or-later
 */

#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <bootstrappable.h>
#include <unistd.h>
#include "../../../src/bootstrappable.c"

#define MAX_STRING 4096
#define MAX_TOKENS 8

char *get_distfiles(char **envp) {
    char *envvar = "DISTFILES=";
    int i = 0;
    while (envp[i] != NULL && strncmp(envp[i], envvar, strlen(envvar)) != 0) i += 1;
    // Now we have distfiles= - get just the part we want.
    require(envp[i] != NULL, "Unable to find distfiles environment variable");
    return envp[i] + strlen(envvar);
}

int main(int argc, char **argv) {
    char **envp = argv + (argc + 1);
    // Random file things
    require(argc == 2, "Usage: checksum-transcriber FILENAME");
    char *input = argv[1];
    FILE *in = fopen(input, "r");
    require(in != NULL, "File does not exist");
    char *output = calloc(MAX_STRING, sizeof(char));
    require(strcpy(output, input) != NULL, "Failed copying string");
    require(strcat(output, ".SHA256SUM") != NULL, "Failed concating string");
    FILE *out = fopen(output, "w+");
    require(out != NULL, "Failed opening output file");

    char *orig_line;
    char *line = calloc(MAX_STRING, sizeof(char));
    require(line != NULL, "Failed allocating string");
    char **tokens;
    char *new_line;
    char *checksum;
    char *filename;
    int i;
    fgets(line, MAX_STRING, in);
    while (strlen(line) != 0) {
        // Split each line into tokens
        orig_line = line;
        tokens = calloc(MAX_TOKENS, sizeof(char*));
        i = 0;
        while (i < MAX_TOKENS) {
            tokens[i] = line;
            new_line = strchr(line, ' ');
            // Occurs when there are only two tokens
            if (new_line == NULL) break;
            line = new_line;
            line[0] = '\0';
            line += 1;
            i += 1;
        }
        line = strchr(line, '\n');
        line[0] = '\0';
        // Only "file" type of distfile supported at this point
        require(strcmp(tokens[0], "f") == 0 || strcmp(tokens[0], "file") == 0,
                "Only support file distfile type at this point");
        // Get checksum and filename
        checksum = tokens[2];
        if (tokens[3] != NULL) {
            filename = tokens[3];
        } else {
            filename = strrchr(tokens[1], '/');
            filename += 1;
        }
        // Put it all together
        fputs(checksum, out);
        fputs("  ", out);
        fputs(get_distfiles(envp), out);
        fputc('/', out);
        fputs(filename, out);
        fputc('\n', out);
        // Cleanup
        i = 0;
        free(orig_line);
        free(tokens);
        line = calloc(MAX_STRING, sizeof(char));
        require(line != NULL, "Failed allocating string");
        fgets(line, MAX_STRING, in);
    }

    // Clean up
    fclose(in);
    fclose(out);
}

File /steps/checksum-transcriber-1.0/checksum-transcriber-1.0.x86.checksums

Source file is 'task3/steps/checksum-transcriber-1.0/checksum-transcriber-1.0.x86.checksums'.
URL: https://github.com/FransFaase/MES-replacement/blob/64abad6a2a55cbef00ffa065e1c019c6a1932acf/task3/steps/checksum-transcriber-1.0/checksum-transcriber-1.0.x86.checksums
4207b0472b21a04b69a9bd748661b7cd6c61b2f77de62891d878e65538b47ea2  /usr/bin/checksum-transcriber

File /steps/simple-patch-1.0/pass1.kaem

Source file is 'task3/steps/simple-patch-1.0/pass1.kaem'.
URL: https://github.com/FransFaase/MES-replacement/blob/64abad6a2a55cbef00ffa065e1c019c6a1932acf/task3/steps/simple-patch-1.0/pass1.kaem
#!/bin/sh

# SPDX-FileCopyrightText: 2023 Samuel Tyler <samuel@samuelt.me>
#
# SPDX-License-Identifier: GPL-3.0-or-later

set -ex

# Build & install
tcc_cc -o /tmp/simple-patch.sl /src/stdlib.c src/simple-patch.c
stack_c -i /${ARCH}/stack_c_intro.M1 /tmp/simple-patch.sl -o /tmp/simple-patch.M1
blood-elf --file /tmp/simple-patch.M1 --little-endian --output /tmp/simple-patch.blood_elf
M1 /tmp/simple-patch.M1 -o /tmp/simple-patch.macro
hex2 -o ${BINDIR}/simple-patch /${ARCH}/ELF-${ARCH}-debug.hex2 /tmp/simple-patch.macro /tmp/simple-patch.blood_elf

# Checksums
if match x${UPDATE_CHECKSUMS} xTrue; then
    sha256sum -o ${pkg}.${ARCH}.checksums \
        /usr/bin/simple-patch

    cp ${pkg}.${ARCH}.checksums ${SRCDIR}
else
    sha256sum -c ${pkg}.${ARCH}.checksums
fi

File /steps/simple-patch-1.0/src/simple-patch.c

Source file is 'task3/steps/simple-patch-1.0/src/simple-patch.c'.
URL: https://github.com/FransFaase/MES-replacement/blob/64abad6a2a55cbef00ffa065e1c019c6a1932acf/task3/steps/simple-patch-1.0/src/simple-patch.c
#include <string.h>
#include <stdio.h>
#include <stdlib.h>

#include "../../../src/bootstrappable.c"


/*
SPDX-FileCopyrightText: 2023 Richard Masters <grick23@gmail.com>
SPDX-License-Identifier: MIT

Simple Patch program.

This program is written in a subset of C called M2, which is from the
stage0-posix bootstrap project.

Example usage:
./simple-patch file_to_patch before_pattern_file after_pattern_file

*/

// function prototypes
void read_file_or_die(char *file_name, char **buffer, int *file_size);
void patch_buffer_or_die(char *patch_file_before_buffer, int patch_file_before_size,
                 char *before_pattern_buffer, int before_pattern_size,
                 char *after_pattern_buffer, int after_pattern_size,
                 char *patch_file_after_buffer);
void writestr_fd(int fd, char *str);
int memsame(char *search_buffer, int search_size,
            char *pattern_buffer, int pattern_size);


int main(int argc, char **argv) {
    char *patch_file_before_buffer;
    int patch_file_before_size;

    char *before_pattern_buffer;
    int before_pattern_size;

    char *after_pattern_buffer;
    int after_pattern_size;

    int patch_file_after_size;
    char *patch_file_after_buffer;

    int patch_file_fd;

    read_file_or_die(argv[1], &patch_file_before_buffer, &patch_file_before_size);
    read_file_or_die(argv[2], &before_pattern_buffer, &before_pattern_size);
    read_file_or_die(argv[3], &after_pattern_buffer, &after_pattern_size);

    patch_file_after_size = patch_file_before_size - before_pattern_size + after_pattern_size;
    patch_file_after_buffer = calloc(patch_file_after_size, sizeof(char));

    patch_buffer_or_die(patch_file_before_buffer, patch_file_before_size,
                 before_pattern_buffer, before_pattern_size,
                 after_pattern_buffer, after_pattern_size,
                 patch_file_after_buffer);
    
    patch_file_fd = open(argv[1], O_WRONLY | O_CREAT | O_TRUNC, 0);
    write(patch_file_fd, patch_file_after_buffer, patch_file_after_size);
    close(patch_file_fd);

    return EXIT_SUCCESS;
}


void read_file_or_die(char *file_name, char **buffer, int *file_size) {
    int file_fd;
    int num_bytes_read;

    file_fd = open(file_name, O_RDONLY, 0);
    if (file_fd == -1) {
        writestr_fd(2, "Could not open file: ");
        writestr_fd(2, file_name);
        writestr_fd(2, "\n");
        exit(1);
    }
    // determine file size
    *file_size = lseek(file_fd, 0, SEEK_END);
    // go back to beginning of file
    lseek(file_fd, 0, SEEK_SET);
    // alloc a buffer to read the entire file
    *buffer = calloc(*file_size, sizeof(char));

    // read the entire patch file
    num_bytes_read = read(file_fd, *buffer, *file_size);
    if (num_bytes_read != *file_size) {
        writestr_fd(2, "Could not read file: ");
        writestr_fd(2, file_name);
        writestr_fd(2, "\n");
        exit(1);
    }
    close(file_fd);
}

void patch_buffer_or_die(char *patch_file_before_buffer, int patch_file_before_size,
                 char *before_pattern_buffer, int before_pattern_size,
                 char *after_pattern_buffer, int after_pattern_size,
                 char *patch_file_after_buffer) {

    char *pos = patch_file_before_buffer;
    int prefix_len = 0;

    // look for the pattern at every offset
    while (prefix_len < patch_file_before_size) {
        // if we find the pattern, replace it and return
        if (memsame(pos, patch_file_before_size - prefix_len, before_pattern_buffer, before_pattern_size)) {
           memcpy(patch_file_after_buffer, patch_file_before_buffer, prefix_len);
           memcpy(patch_file_after_buffer + prefix_len, after_pattern_buffer, after_pattern_size);
           memcpy(patch_file_after_buffer + prefix_len + after_pattern_size, 
                  patch_file_before_buffer + prefix_len + before_pattern_size, 
                  patch_file_before_size - (prefix_len + before_pattern_size));
           return;
        }
        pos = pos + 1;
        prefix_len = prefix_len + 1;
    }

    /* if we don't find the pattern, something is wrong, so exit with error */
    exit(1);
}

/*
    Write the string to the given file descriptor.
*/
void writestr_fd(int fd, char *str) {
    write(fd, str, strlen(str));
}

/*
    Is the pattern located at the start of the search buffer
    (and not exceeding the length of the search buffer)?
*/

int memsame(char *search_buffer, int search_size,
            char *pattern_buffer, int pattern_size) {
    int check_offset = 0;

    if (pattern_size > search_size) {
        return FALSE;
    }
    while (check_offset < pattern_size) {
        if (search_buffer[check_offset] != pattern_buffer[check_offset]) {
             return FALSE;
        }
        check_offset = check_offset + 1;
    }
    return TRUE;
}

File /steps/simple-patch-1.0/simple-patch-1.0.x86.checksums

Source file is 'task3/steps/simple-patch-1.0/simple-patch-1.0.x86.checksums'.
URL: https://github.com/FransFaase/MES-replacement/blob/64abad6a2a55cbef00ffa065e1c019c6a1932acf/task3/steps/simple-patch-1.0/simple-patch-1.0.x86.checksums
d028725b7b8be45c7858b73acef848f8b015d78c68ad69dba45526f9b27453e5  /usr/bin/simple-patch

File /steps/tcc-0.9.26/pass1.kaem

Source file is 'task3/steps/tcc-0.9.26/pass1.kaem'.
URL: https://github.com/FransFaase/MES-replacement/blob/64abad6a2a55cbef00ffa065e1c019c6a1932acf/task3/steps/tcc-0.9.26/pass1.kaem
#!/bin/sh

# SPDX-FileCopyrightText: 2021-22 Samuel Tyler <samuel@samuelt.me>
#
# SPDX-License-Identifier: GPL-3.0-or-later

set -ex

# Vars
TCC_TAR=tcc-0.9.26
TCC_PKG=tcc-0.9.26-1147-gee75a10c

# Check tarball checksums
checksum-transcriber sources
sha256sum -c sources.SHA256SUM

# Unpack
mkdir -p build

cd build
ungz --file ${DISTFILES}/${TCC_TAR}.tar.gz --output ${TCC_TAR}.tar
untar --non-strict --file ${TCC_TAR}.tar
simple-patch ${TCC_PKG}/tcctools.c \
    ../simple-patches/remove-fileopen.before ../simple-patches/remove-fileopen.after
simple-patch ${TCC_PKG}/tcctools.c \
    ../simple-patches/addback-fileopen.before ../simple-patches/addback-fileopen.after

ungz --file ${DISTFILES}/${MES_PKG}.tar.gz --output ${MES_PKG}.tar
untar --non-strict --file ${MES_PKG}.tar

# Create config.h
catm ${MES_PKG}/include/mes/config.h
catm ${TCC_PKG}/config.h
cd ${TCC_PKG}

if match ${ARCH} x86; then
    MES_ARCH=x86
    TCC_TARGET_ARCH=I386
    HAVE_LONG_LONG=0
fi
if match ${ARCH} amd64; then
    MES_ARCH=x86_64
    TCC_TARGET_ARCH=X86_64
    HAVE_LONG_LONG=1
fi
if match ${ARCH} riscv64; then
    MES_ARCH=riscv64
    TCC_TARGET_ARCH=RISCV64
    HAVE_LONG_LONG=1
fi


${BINDIR}/tcc_cc \
    -o ${TMPDIR}/tcc.sl \
    -D BOOTSTRAP=1 \
    -D HAVE_LONG_LONG=${HAVE_LONG_LONG} \
    -D TCC_TARGET_${TCC_TARGET_ARCH}=1 \
    -D CONFIG_TCCDIR=\"${LIBDIR}/tcc\" \
    -D CONFIG_SYSROOT=\"/\" \
    -D CONFIG_TCC_CRTPREFIX=\"${LIBDIR}\" \
    -D CONFIG_TCC_ELFINTERP=\"/mes/loader\" \
    -D CONFIG_TCC_SYSINCLUDEPATHS=\"${PREFIX}/include/mes\" \
    -D TCC_LIBGCC=\"${LIBDIR}/libc.a\" \
    -D CONFIG_TCC_LIBTCC1_MES=0 \
    -D CONFIG_TCCBOOT=1 \
    -D CONFIG_TCC_STATIC=1 \
    -D CONFIG_USE_LIBGCC=1 \
    -D TCC_VERSION=\"0.9.26\" \
    -D ONE_SOURCE=1 \
    /src/stdlib.c tcc.c
${BINDIR}/stack_c -i /${ARCH}/stack_c_intro.M1 ${TMPDIR}/tcc.sl -o ${TMPDIR}/tcc_s.M1
${BINDIR}/blood-elf --file ${TMPDIR}/tcc_s.M1 --little-endian --output ${TMPDIR}/tcc_s.blood_elf
${BINDIR}/M1 ${TMPDIR}/tcc_s.M1 -o ${TMPDIR}/tcc_s.macro
${BINDIR}/hex2 -o /usr/bin/tcc_s /${ARCH}/ELF-${ARCH}-debug.hex2 ${TMPDIR}/tcc_s.macro ${TMPDIR}/tcc_s.blood_elf

# test tcc_s
tcc_s -version

# Recompile the mes C library
cd ../${MES_PKG}

# Install header files
cd include
mkdir -p ${INCDIR}
cp alloca.h ${INCDIR}/alloca.h
cp argz.h ${INCDIR}/argz.h
cp ar.h ${INCDIR}/ar.h
cp assert.h ${INCDIR}/assert.h
cp ctype.h ${INCDIR}/ctype.h
cp dirent.h ${INCDIR}/dirent.h
cp dirstream.h ${INCDIR}/dirstream.h
cp dlfcn.h ${INCDIR}/dlfcn.h
cp endian.h ${INCDIR}/endian.h
cp errno.h ${INCDIR}/errno.h
cp fcntl.h ${INCDIR}/fcntl.h
cp features.h ${INCDIR}/features.h
cp float.h ${INCDIR}/float.h
cp getopt.h ${INCDIR}/getopt.h
cp grp.h ${INCDIR}/grp.h
cp inttypes.h ${INCDIR}/inttypes.h
cp libgen.h ${INCDIR}/libgen.h
cp limits.h ${INCDIR}/limits.h
cp locale.h ${INCDIR}/locale.h
cp math.h ${INCDIR}/math.h
cp memory.h ${INCDIR}/memory.h
cp pwd.h ${INCDIR}/pwd.h
cp setjmp.h ${INCDIR}/setjmp.h
cp signal.h ${INCDIR}/signal.h
cp stdarg.h ${INCDIR}/stdarg.h
cp stdbool.h ${INCDIR}/stdbool.h
cp stddef.h ${INCDIR}/stddef.h
cp stdint.h ${INCDIR}/stdint.h
cp stdio.h ${INCDIR}/stdio.h
cp stdlib.h ${INCDIR}/stdlib.h
cp stdnoreturn.h ${INCDIR}/stdnoreturn.h
cp string.h ${INCDIR}/string.h
cp strings.h ${INCDIR}/strings.h
cp termio.h ${INCDIR}/termio.h
cp time.h ${INCDIR}/time.h
cp unistd.h ${INCDIR}/unistd.h

mkdir -p ${INCDIR}/arch
cp linux/${MES_ARCH}/kernel-stat.h ${INCDIR}/arch/kernel-stat.h
cp linux/${MES_ARCH}/signal.h ${INCDIR}/arch/signal.h
cp linux/${MES_ARCH}/syscall.h ${INCDIR}/arch/syscall.h

mkdir -p ${INCDIR}/linux/${MES_ARCH}
cp linux/syscall.h ${INCDIR}/linux/syscall.h

mkdir -p ${INCDIR}/mes
cp mes/builtins.h ${INCDIR}/mes/builtins.h
cp mes/cc.h ${INCDIR}/mes/cc.h
catm ${INCDIR}/mes/config.h
cp mes/constants.h ${INCDIR}/mes/constants.h
cp mes/lib.h ${INCDIR}/mes/lib.h
cp mes/lib-cc.h ${INCDIR}/mes/lib-cc.h
cp mes/lib-mini.h ${INCDIR}/mes/lib-mini.h
cp mes/mes.h ${INCDIR}/mes/mes.h
cp mes/symbols.h ${INCDIR}/mes/symbols.h

mkdir -p ${INCDIR}/sys
cp sys/cdefs.h ${INCDIR}/sys/cdefs.h
cp sys/dir.h ${INCDIR}/sys/dir.h
cp sys/file.h ${INCDIR}/sys/file.h
cp sys/ioctl.h ${INCDIR}/sys/ioctl.h
cp sys/mman.h ${INCDIR}/sys/mman.h
cp sys/param.h ${INCDIR}/sys/param.h
cp sys/resource.h ${INCDIR}/sys/resource.h
cp sys/select.h ${INCDIR}/sys/select.h
cp sys/stat.h ${INCDIR}/sys/stat.h
cp sys/timeb.h ${INCDIR}/sys/timeb.h
cp sys/time.h ${INCDIR}/sys/time.h
cp sys/times.h ${INCDIR}/sys/times.h
cp sys/types.h ${INCDIR}/sys/types.h
cp sys/ucontext.h ${INCDIR}/sys/ucontext.h
cp sys/user.h ${INCDIR}/sys/user.h
cp sys/wait.h ${INCDIR}/sys/wait.h

cd ..

# Create unified libc file
cd lib
catm ../unified-libc.c ctype/isalnum.c ctype/isalpha.c ctype/isascii.c ctype/iscntrl.c ctype/isdigit.c ctype/isgraph.c ctype/islower.c ctype/isnumber.c ctype/isprint.c ctype/ispunct.c ctype/isspace.c ctype/isupper.c ctype/isxdigit.c ctype/tolower.c ctype/toupper.c dirent/closedir.c dirent/__getdirentries.c dirent/opendir.c linux/readdir.c linux/access.c linux/brk.c linux/chdir.c linux/chmod.c linux/clock_gettime.c linux/close.c linux/dup2.c linux/dup.c linux/execve.c linux/fcntl.c linux/fork.c linux/fsync.c linux/fstat.c linux/_getcwd.c linux/getdents.c linux/getegid.c linux/geteuid.c linux/getgid.c linux/getpid.c linux/getppid.c linux/getrusage.c linux/gettimeofday.c linux/getuid.c linux/ioctl.c linux/ioctl3.c linux/kill.c linux/link.c linux/lseek.c linux/lstat.c linux/malloc.c linux/mkdir.c linux/mknod.c linux/nanosleep.c linux/_open3.c linux/pipe.c linux/_read.c linux/readlink.c linux/rename.c linux/rmdir.c linux/setgid.c linux/settimer.c linux/setuid.c linux/signal.c linux/sigprogmask.c linux/symlink.c linux/stat.c linux/time.c linux/unlink.c linux/waitpid.c linux/wait4.c linux/${MES_ARCH}-mes-gcc/_exit.c linux/${MES_ARCH}-mes-gcc/syscall.c linux/${MES_ARCH}-mes-gcc/_write.c math/ceil.c math/fabs.c math/floor.c mes/abtod.c mes/abtol.c mes/__assert_fail.c mes/assert_msg.c mes/__buffered_read.c mes/__init_io.c mes/cast.c mes/dtoab.c mes/eputc.c mes/eputs.c mes/fdgetc.c mes/fdgets.c mes/fdputc.c mes/fdputs.c mes/fdungetc.c mes/globals.c mes/itoa.c mes/ltoab.c mes/ltoa.c mes/__mes_debug.c mes/mes_open.c mes/ntoab.c mes/oputc.c mes/oputs.c mes/search-path.c mes/ultoa.c mes/utoa.c posix/alarm.c posix/buffered-read.c posix/execl.c posix/execlp.c posix/execv.c posix/execvp.c posix/getcwd.c posix/getenv.c posix/isatty.c posix/mktemp.c posix/open.c posix/pathconf.c posix/raise.c posix/sbrk.c posix/setenv.c posix/sleep.c posix/unsetenv.c posix/wait.c posix/write.c stdio/clearerr.c stdio/fclose.c stdio/fdopen.c stdio/feof.c stdio/ferror.c stdio/fflush.c stdio/fgetc.c stdio/fgets.c stdio/fileno.c stdio/fopen.c stdio/fprintf.c stdio/fputc.c stdio/fputs.c stdio/fread.c stdio/freopen.c stdio/fscanf.c stdio/fseek.c stdio/ftell.c stdio/fwrite.c stdio/getc.c stdio/getchar.c stdio/perror.c stdio/printf.c stdio/putc.c stdio/putchar.c stdio/remove.c stdio/snprintf.c stdio/sprintf.c stdio/sscanf.c stdio/ungetc.c stdio/vfprintf.c stdio/vfscanf.c stdio/vprintf.c stdio/vsnprintf.c stdio/vsprintf.c stdio/vsscanf.c stdlib/abort.c stdlib/abs.c stdlib/alloca.c stdlib/atexit.c stdlib/atof.c stdlib/atoi.c stdlib/atol.c stdlib/calloc.c stdlib/__exit.c stdlib/exit.c stdlib/free.c stdlib/mbstowcs.c stdlib/puts.c stdlib/qsort.c stdlib/realloc.c stdlib/strtod.c stdlib/strtof.c stdlib/strtol.c stdlib/strtold.c stdlib/strtoll.c stdlib/strtoul.c stdlib/strtoull.c string/bcmp.c string/bcopy.c string/bzero.c string/index.c string/memchr.c string/memcmp.c string/memcpy.c string/memmem.c string/memmove.c string/memset.c string/rindex.c string/strcat.c string/strchr.c string/strcmp.c string/strcpy.c string/strcspn.c string/strdup.c string/strerror.c string/strlen.c string/strlwr.c string/strncat.c string/strncmp.c string/strncpy.c string/strpbrk.c string/strrchr.c string/strspn.c string/strstr.c string/strupr.c stub/atan2.c stub/bsearch.c stub/chown.c stub/__cleanup.c stub/cos.c stub/ctime.c stub/exp.c stub/fpurge.c stub/freadahead.c stub/frexp.c stub/getgrgid.c stub/getgrnam.c stub/getlogin.c stub/getpgid.c stub/getpgrp.c stub/getpwnam.c stub/getpwuid.c stub/gmtime.c stub/ldexp.c stub/localtime.c stub/log.c stub/mktime.c stub/modf.c stub/mprotect.c stub/pclose.c stub/popen.c stub/pow.c stub/putenv.c stub/rand.c stub/realpath.c stub/rewind.c stub/setbuf.c stub/setgrent.c stub/setlocale.c stub/setvbuf.c stub/sigaction.c stub/sigaddset.c stub/sigblock.c stub/sigdelset.c stub/sigemptyset.c stub/sigsetmask.c stub/sin.c stub/sys_siglist.c stub/system.c stub/sqrt.c stub/strftime.c stub/times.c stub/ttyname.c stub/umask.c stub/utime.c ${MES_ARCH}-mes-gcc/setjmp.c
cd ..

# crt1.o
mkdir -p ${LIBDIR}
tcc_s -c -D HAVE_CONFIG_H=1 -I include -I include/linux/${MES_ARCH} -o ${LIBDIR}/crt1.o lib/linux/${MES_ARCH}-mes-gcc/crt1.c

catm ${LIBDIR}/crtn.o
catm ${LIBDIR}/crti.o
if match ${ARCH} x86; then
    # crtn.o
    tcc_s -c -D HAVE_CONFIG_H=1 -I include -I include/linux/${MES_ARCH} -o ${LIBDIR}/crtn.o lib/linux/${MES_ARCH}-mes-gcc/crtn.c

    # crti.o
    tcc_s -c -D HAVE_CONFIG_H=1 -I include -I include/linux/${MES_ARCH} -o ${LIBDIR}/crti.o lib/linux/${MES_ARCH}-mes-gcc/crti.c
fi

# libc+gcc.a
tcc_s -c -D HAVE_CONFIG_H=1 -I include -I include/linux/${MES_ARCH} -o unified-libc.o unified-libc.c
tcc_s -ar cr ${LIBDIR}/libc.a unified-libc.o

# libtcc1.a
mkdir -p ${LIBDIR}/tcc
tcc_s -c -D HAVE_CONFIG_H=1 -D HAVE_LONG_LONG=1 -D HAVE_FLOAT=1 -I include -I include/linux/${MES_ARCH} -o libtcc1.o lib/libtcc1.c
if match ${ARCH} riscv64; then
    tcc_s -c -D HAVE_CONFIG_H=1 -D HAVE_LONG_LONG=1 -D HAVE_FLOAT=1 -I include -I include/linux/${MES_ARCH} -o lib-arm64.o ../${TCC_PKG}/lib/lib-arm64.c
    tcc_s -ar cr ${LIBDIR}/tcc/libtcc1.a libtcc1.o lib-arm64.o
else
    tcc_s -ar cr ${LIBDIR}/tcc/libtcc1.a libtcc1.o
fi

# libgetopt.a
tcc_s -c -D HAVE_CONFIG_H=1 -I include -I include/linux/${MES_ARCH} lib/posix/getopt.c
tcc_s -ar cr ${LIBDIR}/libgetopt.a getopt.o

cd ../${TCC_PKG}

# boot0 (ref comments here for all boot*)
# compile
tcc_s \
    -g \
    -v \
    -static \
    -o tcc-boot0 \
    -D BOOTSTRAP=1 \
    -D HAVE_FLOAT=1 \
    -D HAVE_BITFIELD=1 \
    -D HAVE_LONG_LONG=1 \
    -D HAVE_SETJMP=1 \
    -I . \
    -I ${PREFIX}/include/mes \
    -D TCC_TARGET_${TCC_TARGET_ARCH}=1 \
    -D CONFIG_TCCDIR=\"${LIBDIR}/tcc\" \
    -D CONFIG_TCC_CRTPREFIX=\"${LIBDIR}\" \
    -D CONFIG_TCC_ELFINTERP=\"/mes/loader\" \
    -D CONFIG_TCC_LIBPATHS=\"${LIBDIR}:${LIBDIR}/tcc\" \
    -D CONFIG_TCC_SYSINCLUDEPATHS=\"${PREFIX}/include/mes\" \
    -D TCC_LIBGCC=\"${LIBDIR}/libc.a\" \
    -D TCC_LIBTCC1=\"libtcc1.a\" \
    -D CONFIG_TCCBOOT=1 \
    -D CONFIG_TCC_STATIC=1 \
    -D CONFIG_USE_LIBGCC=1 \
    -D TCC_VERSION=\"0.9.26\" \
    -D ONE_SOURCE=1 \
    -L . \
    -L ${LIBDIR} \
    tcc.c
# Install
cp tcc-boot0 ${BINDIR}/
chmod 755 ${BINDIR}/tcc-boot0
cd ../${MES_PKG}
# Recompile libc: crt{1,n,i}, libtcc.a, libc.a
tcc-boot0 -c -D HAVE_CONFIG_H=1 -I include -I include/linux/${MES_ARCH} -o ${LIBDIR}/crt1.o lib/linux/${MES_ARCH}-mes-gcc/crt1.c
if match ${ARCH} x86; then
    tcc-boot0 -c -D HAVE_CONFIG_H=1 -I include -I include/linux/${MES_ARCH} -o ${LIBDIR}/crtn.o lib/linux/${MES_ARCH}-mes-gcc/crtn.c
    tcc-boot0 -c -D HAVE_CONFIG_H=1 -I include -I include/linux/${MES_ARCH} -o ${LIBDIR}/crti.o lib/linux/${MES_ARCH}-mes-gcc/crti.c
fi

tcc-boot0 -c -D HAVE_CONFIG_H=1 -D HAVE_LONG_LONG=1 -D HAVE_FLOAT=1 -I include -I include/linux/${MES_ARCH} -o libtcc1.o lib/libtcc1.c
if match ${ARCH} riscv64; then
    tcc-boot0 -c -D HAVE_CONFIG_H=1 -D HAVE_LONG_LONG=1 -D HAVE_FLOAT=1 -I include -I include/linux/${MES_ARCH} -o lib-arm64.o ../${TCC_PKG}/lib/lib-arm64.c
    tcc-boot0 -ar cr ${LIBDIR}/tcc/libtcc1.a libtcc1.o lib-arm64.o
else
    tcc-boot0 -ar cr ${LIBDIR}/tcc/libtcc1.a libtcc1.o
fi

tcc-boot0 -c -D HAVE_CONFIG_H=1 -I include -I include/linux/${MES_ARCH} -o unified-libc.o unified-libc.c
tcc-boot0 -ar cr ${LIBDIR}/libc.a unified-libc.o
cd ../${TCC_PKG}

# Test boot0
tcc-boot0 -version

# boot1
tcc-boot0 \
    -g \
    -v \
    -static \
    -o tcc-boot1 \
    -D BOOTSTRAP=1 \
    -D HAVE_FLOAT=1 \
    -D HAVE_BITFIELD=1 \
    -D HAVE_LONG_LONG=1 \
    -D HAVE_SETJMP=1 \
    -I . \
    -I ${PREFIX}/include/mes \
    -D TCC_TARGET_${TCC_TARGET_ARCH}=1 \
    -D CONFIG_TCCDIR=\"${LIBDIR}/tcc\" \
    -D CONFIG_TCC_CRTPREFIX=\"${LIBDIR}\" \
    -D CONFIG_TCC_ELFINTERP=\"/mes/loader\" \
    -D CONFIG_TCC_LIBPATHS=\"${LIBDIR}:${LIBDIR}/tcc\" \
    -D CONFIG_TCC_SYSINCLUDEPATHS=\"${PREFIX}/include/mes\" \
    -D TCC_LIBGCC=\"${LIBDIR}/libc.a\" \
    -D TCC_LIBTCC1=\"libtcc1.a\" \
    -D CONFIG_TCCBOOT=1 \
    -D CONFIG_TCC_STATIC=1 \
    -D CONFIG_USE_LIBGCC=1 \
    -D TCC_VERSION=\"0.9.26\" \
    -D ONE_SOURCE=1 \
    -L . \
    tcc.c
cp tcc-boot1 ${BINDIR}
chmod 755 ${BINDIR}/tcc-boot1
cd ../${MES_PKG}
tcc-boot1 -c -D HAVE_CONFIG_H=1 -I include -I include/linux/${MES_ARCH} -o ${LIBDIR}/crt1.o lib/linux/${MES_ARCH}-mes-gcc/crt1.c
if match ${ARCH} x86; then
    tcc-boot1 -c -D HAVE_CONFIG_H=1 -I include -I include/linux/${MES_ARCH} -o ${LIBDIR}/crtn.o lib/linux/${MES_ARCH}-mes-gcc/crtn.c
    tcc-boot1 -c -D HAVE_CONFIG_H=1 -I include -I include/linux/${MES_ARCH} -o ${LIBDIR}/crti.o lib/linux/${MES_ARCH}-mes-gcc/crti.c
fi

tcc-boot1 -c -D HAVE_CONFIG_H=1 -D HAVE_LONG_LONG=1 -D HAVE_FLOAT=1 -I include -I include/linux/${MES_ARCH} -o libtcc1.o lib/libtcc1.c
if match ${ARCH} riscv64; then
    tcc-boot1 -c -D HAVE_CONFIG_H=1 -I include -I include/linux/${MES_ARCH} -o lib-arm64.o ../${TCC_PKG}/lib/lib-arm64.c
    tcc-boot1 -ar cr ${LIBDIR}/tcc/libtcc1.a libtcc1.o lib-arm64.o
else
    tcc-boot1 -ar cr ${LIBDIR}/tcc/libtcc1.a libtcc1.o
fi

tcc-boot1 -c -D HAVE_CONFIG_H=1 -I include -I include/linux/${MES_ARCH} -o unified-libc.o unified-libc.c
tcc-boot1 -ar cr ${LIBDIR}/libc.a unified-libc.o
cd ../${TCC_PKG}

# Test boot1
tcc-boot1 -version

# boot2
tcc-boot1 \
    -g \
    -v \
    -static \
    -o tcc-boot2 \
    -D BOOTSTRAP=1 \
    -D HAVE_BITFIELD=1 \
    -D HAVE_FLOAT=1 \
    -D HAVE_LONG_LONG=1 \
    -D HAVE_SETJMP=1 \
    -I . \
    -I ${PREFIX}/include/mes \
    -D TCC_TARGET_${TCC_TARGET_ARCH}=1 \
    -D CONFIG_TCCDIR=\"${LIBDIR}/tcc\" \
    -D CONFIG_TCC_CRTPREFIX=\"${LIBDIR}\" \
    -D CONFIG_TCC_ELFINTERP=\"/mes/loader\" \
    -D CONFIG_TCC_LIBPATHS=\"${LIBDIR}:${LIBDIR}/tcc\" \
    -D CONFIG_TCC_SYSINCLUDEPATHS=\"${PREFIX}/include/mes\" \
    -D TCC_LIBGCC=\"${LIBDIR}/libc.a\" \
    -D TCC_LIBTCC1=\"libtcc1.a\" \
    -D CONFIG_TCCBOOT=1 \
    -D CONFIG_TCC_STATIC=1 \
    -D CONFIG_USE_LIBGCC=1 \
    -D TCC_VERSION=\"0.9.26\" \
    -D ONE_SOURCE=1 \
    -L . \
    tcc.c
cp tcc-boot2 ${BINDIR}
chmod 755 ${BINDIR}/tcc-boot2
cd ../${MES_PKG}
tcc-boot2 -c -D HAVE_CONFIG_H=1 -I include -I include/linux/${MES_ARCH} -o ${LIBDIR}/crt1.o lib/linux/${MES_ARCH}-mes-gcc/crt1.c
if match ${ARCH} x86; then
    tcc-boot2 -c -D HAVE_CONFIG_H=1 -I include -I include/linux/${MES_ARCH} -o ${LIBDIR}/crtn.o lib/linux/${MES_ARCH}-mes-gcc/crtn.c
    tcc-boot2 -c -D HAVE_CONFIG_H=1 -I include -I include/linux/${MES_ARCH} -o ${LIBDIR}/crti.o lib/linux/${MES_ARCH}-mes-gcc/crti.c
fi

tcc-boot2 -c -D HAVE_CONFIG_H=1 -D HAVE_LONG_LONG=1 -D HAVE_FLOAT=1 -I include -I include/linux/${MES_ARCH} -o libtcc1.o lib/libtcc1.c
if match ${ARCH} riscv64; then
    tcc-boot2 -c -D HAVE_CONFIG_H=1 -I include -I include/linux/${MES_ARCH} -o lib-arm64.o ../${TCC_PKG}/lib/lib-arm64.c
    tcc-boot2 -ar cr ${LIBDIR}/tcc/libtcc1.a libtcc1.o lib-arm64.o
else
    tcc-boot2 -ar cr ${LIBDIR}/tcc/libtcc1.a libtcc1.o
fi

tcc-boot2 -c -D HAVE_CONFIG_H=1 -I include -I include/linux/${MES_ARCH} -o unified-libc.o unified-libc.c
tcc-boot2 -ar cr ${LIBDIR}/libc.a unified-libc.o
cd ../${TCC_PKG}

# Test boot2
tcc-boot2 -version

# We have our final tcc 0.9.26!
cp ${BINDIR}/tcc-boot2 ${BINDIR}/tcc
chmod 755 ${BINDIR}/tcc
rm ${BINDIR}/tcc-boot2
cp ${BINDIR}/tcc ${BINDIR}/tcc-0.9.26
chmod 755 ${BINDIR}/tcc-0.9.26

# Also recompile getopt, we don't need to do this during the boot* stages
# because nothing is linked against it
cd ../${MES_PKG}
tcc -c -D HAVE_CONFIG_H=1 -I include -I include/linux/${MES_ARCH} lib/posix/getopt.c
tcc -ar cr ${LIBDIR}/libgetopt.a getopt.o

cd ../..

# Checksums
if match x${UPDATE_CHECKSUMS} xTrue; then
    sha256sum -o ${pkg}.${ARCH}.checksums \
        /usr/bin/tcc-boot1 \
        /usr/bin/tcc \
        /usr/lib/mes/libc.a \
        /usr/lib/mes/libgetopt.a \
        /usr/lib/mes/crt1.o \
        /usr/lib/mes/crti.o \
        /usr/lib/mes/crtn.o \
        /usr/lib/mes/tcc/libtcc1.a

    cp ${pkg}.${ARCH}.checksums ${SRCDIR}
else
    sha256sum -c ${pkg}.${ARCH}.checksums
fi

File /steps/tcc-0.9.26/sources

Source file is 'task3/steps/tcc-0.9.26/sources'.
URL: https://github.com/FransFaase/MES-replacement/blob/64abad6a2a55cbef00ffa065e1c019c6a1932acf/task3/steps/tcc-0.9.26/sources
f https://lilypond.org/janneke/tcc/tcc-0.9.26-1147-gee75a10c.tar.gz 6b8cbd0a5fed0636d4f0f763a603247bc1935e206e1cc5bda6a2818bab6e819f tcc-0.9.26.tar.gz

File /steps/tcc-0.9.26/sources.SHA256SUM

(Source not found at '(null)')

File /external/distfiles/tcc-0.9.26.tar.gz

Source file is 'task3//distfiles/tcc-0.9.26.tar.gz'.
URL: https://github.com/FransFaase/MES-replacement/blob/64abad6a2a55cbef00ffa065e1c019c6a1932acf/task3//distfiles/tcc-0.9.26.tar.gz (Not shown)

File /steps/tcc-0.9.26/simple-patches/remove-fileopen.before

Source file is 'task3/steps/tcc-0.9.26/simple-patches/remove-fileopen.before'.
URL: https://github.com/FransFaase/MES-replacement/blob/64abad6a2a55cbef00ffa065e1c019c6a1932acf/task3/steps/tcc-0.9.26/simple-patches/remove-fileopen.before
    if (ret == 1)
        return ar_usage(ret);

    if ((fh = fopen(argv[i_lib], "wb")) == NULL)
    {
        fprintf(stderr, "tcc: ar: can't open file %s \n", argv[i_lib]);
        goto the_end;
    }

File /steps/tcc-0.9.26/simple-patches/remove-fileopen.after

Source file is 'task3/steps/tcc-0.9.26/simple-patches/remove-fileopen.after'.
URL: https://github.com/FransFaase/MES-replacement/blob/64abad6a2a55cbef00ffa065e1c019c6a1932acf/task3/steps/tcc-0.9.26/simple-patches/remove-fileopen.after
    if (ret == 1)
        return ar_usage(ret);

File /steps/tcc-0.9.26/simple-patches/addback-fileopen.before

Source file is 'task3/steps/tcc-0.9.26/simple-patches/addback-fileopen.before'.
URL: https://github.com/FransFaase/MES-replacement/blob/64abad6a2a55cbef00ffa065e1c019c6a1932acf/task3/steps/tcc-0.9.26/simple-patches/addback-fileopen.before
    // write header

File /steps/tcc-0.9.26/simple-patches/addback-fileopen.after

Source file is 'task3/steps/tcc-0.9.26/simple-patches/addback-fileopen.after'.
URL: https://github.com/FransFaase/MES-replacement/blob/64abad6a2a55cbef00ffa065e1c019c6a1932acf/task3/steps/tcc-0.9.26/simple-patches/addback-fileopen.after
    if ((fh = fopen(argv[i_lib], "wb")) == NULL)
    {
        fprintf(stderr, "tcc: ar: can't open file %s \n", argv[i_lib]);
        goto the_end;
    }

    // write header

File /external/distfiles/mes-0.27.1.tar.gz

Source file is 'task3//distfiles/mes-0.27.1.tar.gz'.
URL: https://github.com/FransFaase/MES-replacement/blob/64abad6a2a55cbef00ffa065e1c019c6a1932acf/task3//distfiles/mes-0.27.1.tar.gz (Not shown)

File /usr/lib/mes/libc.a.tmp

(Source not found at '(null)')

File /usr/lib/mes/tcc/libtcc1.a.tmp

(Source not found at '(null)')

File /usr/lib/mes/libgetopt.a.tmp

(Source not found at '(null)')

Output files

Executables files: Intermediary files (not from sources and used): Produced (not from source and also not used):

Parse program

Below the Bash script task3.sh to produce the trace.txt file. (The line with chroot should be uncommented.)

#!/bin/sh

set -x

cp -f task3/kaem.x86 rootfs/kaem.x86
cp -f task3/tools-seed-kaem.kaem rootfs/x86
cp -f task3/tools-mini-kaem.kaem rootfs/x86
cp -f task3/check-tools.kaem rootfs/x86
cp -f task3/tools-kaem.kaem rootfs/x86
cp -f task3/after.kaem rootfs/x86
cp -f task3/seed.kaem rootfs

sudo chroot --userspec=${USER}:${USER} rootfs /bootstrap-seeds/POSIX/x86/kaem-optional-seed
#sudo strace -f -o trace2.txt -e trace=open,openat,close,chmod,chdir,dup,fcntl,link,linkat,unlink,fork,execve chroot --userspec=${USER}:${USER} rootfs /bootstrap-seeds/POSIX/x86/kaem-optional-seed

Below the version of the scan_trace.cpp program is given that is used to produce this page.

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>

// ---------------------------------

char *copystr(const char *str)
{
    char *new_str = (char*)malloc(strlen(str) + 1);
    strcpy(new_str, str);
    return new_str;
}

FILE *fout = stdout;

#define MAX_FILENAME_LEN 500

// ---------------------------------

class SubModule
{
public:
    char *path;
    char *url;
    SubModule *next;
    SubModule(const char *p, const char *u, SubModule *n) : next(n)
    {
        path = copystr(p);
        url = copystr(u);
    }
};

SubModule* lbs_subModules = 0;
SubModule* dist_subModules = 0;

void addSubModule(const char *path, const char *url) { lbs_subModules = new SubModule(path, url, lbs_subModules); }
void addDistSubModule(const char *path, const char *url) { dist_subModules = new SubModule(path, url, dist_subModules); }

const char *source_dir = "";
size_t len_source_dir;

void read_commit_hash(const char *path, char *commit)
{
    FILE *f = fopen(path, "r");
    if (f == 0)
        commit[0] = '\0';
    else
    {
        if (fgets(commit, 41, f))
            commit[40] = '\0';
        else
            commit[0] = '\0';
        fclose(f);
    }
    fprintf(fout, "Head file: '%s': %s\n", path, commit);
}

void read_sub_modules(const char *fn, char *modules_dir)
{
    char complete_path[MAX_FILENAME_LEN+1];
    strcpy(complete_path, fn);
    char *s_path = complete_path + strlen(complete_path);
    char *m_path = modules_dir + strlen(modules_dir);
    strcpy(s_path, ".gitmodules");
    FILE *f = fopen(complete_path, "r");
    if (f == 0)
        return;
    //fprintf(fout, "Parsing %s %s\n", complete_path, modules_dir);
    
    char path[MAX_FILENAME_LEN+1];
    char url[MAX_FILENAME_LEN+1];
    
    while (fgets(path, MAX_FILENAME_LEN, f))
    {
        if (!strncmp(path, "\tpath = ", 8) == 0)
            continue;
        if (fgets(url, MAX_FILENAME_LEN, f) && strncmp(url, "\turl = ", 7) == 0)
        {
            //fprintf(fout, "1: %s2: %s", path, url);
            while (path[strlen(path)-1] < ' ') path[strlen(path)-1] = '\0';
            while (url[strlen(url)-1] < ' ') url[strlen(url)-1] = '\0';
            char *s = strstr(url, ".git");
            if (s != 0) *s = '\0';
            sprintf(s_path, "%s/", path + 8);
            char *source = complete_path + len_source_dir;

            sprintf(m_path, "%s/HEAD", path + 8);
            char commit[41];
            read_commit_hash(modules_dir, commit);

            //fprintf(fout, "Head file: '%s': %s\n", modules_dir, commit);
            sprintf(m_path, "%s/modules/", path + 8);

            char complete_url[MAX_FILENAME_LEN+1];
            if (strncmp(url + 7, "https://github.com/", 19) == 0)
            {
                if (commit[0] == '\0')
                    sprintf(complete_url, "%s/blob/main/%%s", url + 7);
                else
                    sprintf(complete_url, "%s/blob/%s/%%s", url + 7, commit);
            }
            else if (strncmp(url + 7, "https://git.savannah.nongnu.org/git/", 36) == 0)
            {
                if (commit[0] == '\0')
                    sprintf(complete_url, "https://git.savannah.nongnu.org/gitweb/?p=%s.git;a=blob;f=%%s", url + 43);
                else
                    sprintf(complete_url, "https://git.savannah.nongnu.org/gitweb/?p=%s.git;a=blob;f=%%s;id=%s", url + 43, commit);
            }
            else
                sprintf(complete_url, "%s%%s", url + 7);
            //printf("Submodule %s %s|\n", source, complete_url);
            addSubModule(source, complete_url);
            read_sub_modules(complete_path, modules_dir);
        }
    }
}

char live_bootstrap_commit[41];

void init_subModules()
{
    // Root directory:
    char path[MAX_FILENAME_LEN+1];
    snprintf(path, MAX_FILENAME_LEN, "%s.git/refs/heads/main", source_dir);
    read_commit_hash(path, live_bootstrap_commit);
    snprintf(path, MAX_FILENAME_LEN, "https://github.com/FransFaase/MES-replacement/blob/%s/%%s",
        live_bootstrap_commit[0] == '\0' ? "main" : live_bootstrap_commit);
    addSubModule("", path);

    // Sub modules
    char modules_dir[MAX_FILENAME_LEN+1];
    snprintf(modules_dir, MAX_FILENAME_LEN, "%s.git/modules/", source_dir);
    read_sub_modules(source_dir, modules_dir);

    // Exclude some directories
    addSubModule("distfiles", "--");
    
    // Extra for files that have been unpacked from distribution
    addDistSubModule("/steps/tcc-0.9.26/build/mes-0.26/", "https://git.savannah.gnu.org/cgit/mes.git/tree/%s?h=v0.26");
    addDistSubModule("/steps/tcc-0.9.26/build/tcc-0.9.26-1147-gee75a10c/", "https://github.com/TinyCC/tinycc/tree/d5e22108a0dc48899e44a158f91d5b3215eb7fe6/%s");
    addDistSubModule("/steps/mes-0.26/build/mes-0.26/", "https://git.savannah.gnu.org/cgit/mes.git/tree/%s?h=v0.26");
    addDistSubModule("/steps/mes-0.26/build/nyacc-1.00.2/", "https://git.savannah.gnu.org/cgit/nyacc.git/tree/%s?h=V1.00.2");

}

char *get_url(const char *path, SubModule *subModules)
{
    for (SubModule *subModule = subModules; subModule != 0; subModule = subModule->next)
    {
        size_t path_len = strlen(subModule->path);
        if (strncmp(path, subModule->path, path_len) == 0)
        {
            char url[MAX_FILENAME_LEN+1];
            snprintf(url, MAX_FILENAME_LEN, subModule->url, path + path_len);
            return copystr(url);
        }
    }
    return 0;
}

// ---------------------------------

class File;
class Action;
class Process;



class LineInFile
{
public:
    const char *text;
    File *file;
    long line;
    LineInFile *next;
    LineInFile(const char *t, File *f, long l) : text(copystr(t)), file(f), line(l), next(0) {}
    LineInFile(LineInFile *lif, int offset = 0) : text(lif->text + offset), file(lif->file), line(lif->line), next(0) {}
};

class MergeChild;

int nr_files = 0;
class File
{
public:
    char *name;
    int nr;
    bool is_source;
    char *source_name;
    char *url;
    File *copy_from;
    Action *actions;
    File *next;
    
    File(const char *fn) : is_source(false), source_name(0), url(0), copy_from(0), actions(0), next(0)
    {
        name = copystr(fn);
        nr = nr_files++;
    }

    void init_source();

    bool exec_before_created();
    
    bool used_as_input();
    
    bool produced_and_not_removed();
};

File *files = 0;

int nr_processes = 0;
class Process
{
public:
    int nr;
    unsigned long pid;
    Process *parent;
    Action *actions;
    Process *next;
    
    Process(unsigned long _pid) : pid(_pid), parent(0), actions(0), next(0)
    {
        nr = ++nr_processes;
    }
    bool hasInputUseOf(File *f);
    Action *lastOpenAction(int handle);
};

Process *all_processes = 0;
Process **ref_next = &all_processes;
Process *next_process(unsigned long pid)
{
    Process *process = new Process(pid);
    *ref_next = process;
    ref_next = &process->next;
    return process;
}

Process *find_process(unsigned long pid)
{
    Process *cached_process = 0;
    if (cached_process != 0 && cached_process->pid == pid)
        return cached_process;
    for (Process *process = all_processes; process != 0; process = process->next)
        if (process->pid == pid)
        {
            cached_process = process;
            return process;
        }
    return 0;
}

class MergeChild
{
public:
    File *child;
    MergeChild *next;
    
    MergeChild(File *file) : child(file), next(0) {}
};

File *get_file(const char *full_fn /*, bool use_alias = true*/)
{
    File **ref = &files;
    for (; *ref != 0; ref = &(*ref)->next)
        if (strcmp((*ref)->name, full_fn) == 0)
            return /*(*ref)->alias != 0 && use_alias ? (*ref)->alias :*/ (*ref);
    *ref = new File(full_fn);
    return *ref;
}



    

unsigned long read_unsigned_long(char *&s)
{
    unsigned long result = 0;
    if (*s == '0')
    {
        for (s++; '0' <= *s && *s <= '7'; s++)
            result = 8 * result + *s - '0';
        return result;
    }
    for (; '0' <= *s && *s <= '9'; s++)
        result = 10 * result + *s - '0';
    return result;
}

long read_long(char *&s)
{
    long sign = 1;
    long result = 0;
    if (*s == '-')
    {
        sign = -1;
        s++;
    }
    for (; '0' <= *s && *s <= '9'; s++)
        result = 10 * result + *s - '0';
    return sign * result;
}

int indent_depth = 0;
void indent(FILE *fout) { fprintf(fout, "%*.*s", indent_depth, indent_depth, ""); }

FILE *fout_usage = 0;

class Action
{
    public:
    char kind; // one of 'e' - execute, 'o' - open, 'r' - removed, 'c' - change mode, 'E' - execute child
    bool o_rdonly;
    bool o_wronly;
    bool o_rdwr;
    bool o_creat;
    bool o_trunc;
    bool o_excl;
    int file_handle;
    bool is_closed;
    int mode;
    bool from_archive;
    Process *child_process;
    
    File *file;
    Process *process;
    
    char json_kind;
    Process *file_created_by;

    Action *next_in_process;
    Action *next_on_file;
    
    Action (File *_file, Process *_process, char _kind)
    : kind(_kind),
      o_rdonly(false), o_wronly(false), o_rdwr(false), o_creat(false), o_trunc(false), o_excl(false), file_handle(-1), is_closed(false),
      mode(0),
      from_archive(false),
      child_process(0), 
      file(_file), process(_process),
      json_kind(_kind),
      file_created_by(0),
      next_in_process(0), next_on_file(0)
    {
        Action **ref_action_in_process = &process->actions;
        while (*ref_action_in_process != 0) ref_action_in_process = &(*ref_action_in_process)->next_in_process;
        *ref_action_in_process = this;
        if (file != 0)
        {
            Action **ref_action_on_file = &file->actions;
            while (*ref_action_on_file != 0) ref_action_on_file = &(*ref_action_on_file)->next_on_file;
            *ref_action_on_file = this;
        }
    }
    
    const char *oper_name()
    {
        return kind == 'e' ? "Executes" :
               kind == 'r' ? "Delete" :
               is_produced() ? "Produces" :
               kind != 'o' ? 0 :
               o_rdonly ? "Uses as input" :
               o_wronly ? "Writes" :
               o_rdwr ? "Modifies" :
               "Uses";
    }
    
    bool is_input() { return kind == 'o' && !is_produced() && o_rdonly; }   
    
    bool is_produced() { return kind == 'o' && (o_creat || ((o_wronly || o_rdwr) && o_trunc)); }
};

bool Process::hasInputUseOf(File *f)
{
    for (Action *action = actions; action != 0; action = action->next_in_process)
        if (action->file == f && action->o_rdonly)
            return true;
    return false;
}

Action *Process::lastOpenAction(int handle)
{
    Action *last_open_action = 0;
    for (Action *action = actions; action != 0; action = action->next_in_process)
        if (action->kind == 'o' && action->file_handle == handle)
            last_open_action = action;
    return last_open_action;
}

#define NR_MAPPIGS 21
struct 
{
    const char *from;
    const char *to;
    bool has_url;
} source_mapping[NR_MAPPIGS] = {
    {"bootstrap-seeds/POSIX/x86/kaem-optional-seed", "src/kaem-minimal_s", false},
    {"bootstrap-seeds/POSIX/x86/hex0-seed", "src/hex0_s", false},
    {"kaem.x86", "task3/kaem.x86", true},
    {"x86/tools-seed-kaem.kaem", "task3/tools-seed-kaem.kaem", true},
    {"x86/tools-mini-kaem.kaem", "task3/tools-mini-kaem.kaem", true},
    {"x86/check-tools.kaem", "task3/check-tools.kaem", true},
    {"x86/tools-kaem.kaem", "task3/tools-kaem.kaem", true},
    {"x86/after.kaem", "task3/after.kaem", true},
    {"x86/hex0_s.hex0", "src/hex0_s.hex0", false},
    {"x86/kaem-minimal_s.hex0", "src/kaem-minimal_s.hex0", false},
    {"x86/hex2_s.hex0", "src/hex2_s.hex0", false},
    {"x86/blood-elf_s.macro", "src/blood-elf_s.macro", false},
    {"x86/blood-elf_s.blood_elf", "src/blood-elf_s.blood_elf", false},
    {"x86/M1_s.macro", "src/M1_s.macro", false},
    {"x86/M1_s.blood_elf", "src/M1_s.blood_elf", false},
    {"x86/stack_c_s.M1", "src/stack_c_s.M1", false},
    {"x86/stack_c_intro.M1", "src/stack_c_intro.M1", true},
    {"x86/ELF-x86-debug.hex2", "M2libc/x86/ELF-x86-debug.hex2", true},
    {"seed.kaem", "task3/seed.kaem", true},
    {"configurator.x86.checksums", "task3/configurator.x86.checksums", true},
    {"script-generator.x86.checksums", "task3/script-generator.x86.checksums", true},
};    

void File::init_source()
{
    if (actions == 0 || actions->next_on_file != 0)
        return;
    
    if (actions->kind == 'o' && actions->is_produced())
    {
        if (actions->process->actions->kind == 'e' && strcmp(actions->process->actions->file->name, "/usr/bin/untar") == 0)
        {
            actions->from_archive = true;
            url = get_url(name, dist_subModules);
        }
    }
    else if (actions->kind == 'e' || actions->kind == 'o')
    {
        is_source = true;
        bool has_url = true;
        char *n = name;
        if (n[0] == '/')
            n++;
        for (int i = 0; i < NR_MAPPIGS; i++)
            if (strcmp(n, source_mapping[i].from) == 0)
            {
                source_name = copystr(source_mapping[i].to);
                has_url = source_mapping[i].has_url;
                break;
            }
        if (source_name == NULL)
        {
            if (strncmp(n, "src/", 4) == 0)
                source_name = copystr(n);
            else if (strncmp(n, "external/distfiles/", 19) == 0)
            {
                char buffer[200];
                sprintf(buffer, "task3/%s", n + 8);
                source_name = copystr(buffer);
            }
            else if (strncmp(n, "steps/", 6) == 0)
            {
                char buffer[200];
                sprintf(buffer, "task3/%s", n);
                source_name = copystr(buffer);
            }
        }
        
            /*
        if (source_name == NULL)
        {
            if (strncmp(n, "external/distfiles/", 19) == 0)
                n += 9;
        
            static const char *paths[] = { "replacement/", "*seed/", "*seed/stage0-posix/", "*"};
            for (size_t i = 0; i < sizeof(paths)/sizeof(paths[0]); i++)
            {
                char poss_source_name[MAX_FILENAME_LEN];
                if (paths[i][0] == '*')
                {
                    strcpy(poss_source_name, source_dir);
                    strcat(poss_source_name, paths[i] + 1);
                }
                else
                    strcpy(poss_source_name, paths[i]);
                strcat(poss_source_name, n);
                if (access(poss_source_name, R_OK) == 0)
                {
                    source_name = copystr(poss_source_name);
                    break;
                }
            }
        }
            */
    
        if (source_name != 0 && has_url)
            url = get_url(source_name + len_source_dir, lbs_subModules);
    }
}

bool File::exec_before_created()
{
    bool is_created = false;
    for (Action *action = actions; action != 0; action = action->next_on_file)
        if (action->kind == 'o' && action->o_creat && !action->from_archive)
            is_created = true;
        else if (action->kind == 'r')
            is_created = false;
        else if (action->kind == 'e' && !is_created)
            return true;
    return false;
}

bool File::used_as_input()
{
    return actions != 0 && (actions->o_rdonly || actions->o_rdwr);
}

bool File::produced_and_not_removed()
{
    if (used_as_input())
        return false;
    bool is_created = false;
    for (Action *action = actions; action != 0; action = action->next_on_file)
        if (action->kind == 'o' && (action->o_creat || action->o_wronly || (action->o_rdwr && action->o_trunc)) && !action->from_archive)
            is_created = true;
        else if (action->kind == 'r')
            is_created = false;
        else if (action->kind == 'e' && !is_created)
            return false;
    return is_created;
}

// ----------------------------------



bool accept_string(const char *str, char *&s)
{
    char *t = s;
    while (*str != '\0' && *t != '\0')
    {
        if (*str != *t)
            return false;
        t++;
        if (*str == ' ')
        {
            while (*t == ' ')
                t++;
        }
        str++;
    }
    s = t;
    return true;
}

bool parse_filename(char *filename, char *&s)
{
    if (*s != '"')
        return false;
    s++;
    for (int i = 0; i < MAX_FILENAME_LEN; i++)
    {
        if (*s == '"')
        {
            filename[i] = '\0';
            s++;
            return true;
        }
        while (s[0] == '/' && s[1] == '/')
            s++;
        filename[i] = *s++;
    }
    
    fprintf(fout, "file name too long\n");
    exit(-1);
    return false;
}

char cd_path[MAX_FILENAME_LEN] = "/";

void add_cd_path(char *filename)
{
    char buf[2*MAX_FILENAME_LEN+1];

    //fprintf(log_file, "add_cd_path %s %s => ", cd_path, filename);
    if (filename[0] == '/')
    {
        char *s = filename;
        while (s[1] == '/')
            s++;
        strcpy(buf, s);
        //fprintf(fout, "add_cd_path %s %s => %s\n", cd_path, filename, buf);
        strcpy(filename, buf);
        return;
    }
    strcpy(buf, cd_path);
    int i = strlen(buf);
    while (i > 0 && buf[i-1] == '/')
        i--;
    char *f = filename;
    while (f[0] != '\0')
    {
        if (f[0] == '.' && (f[1] == '\0' || f[1] == '/'))
        {
            f++;
            while (f[0] == '/')
                f++;
        }
        else if (f[0] == '.' && f[1] == '.' && (f[2] == '\0' || f[2] == '/'))
        {
            f += 2;
            while (f[0] == '/')
                f++;
            while (i > 0 && buf[i-1] != '/')
                i--;
            while (i > 0 && buf[i-1] == '/')
                i--;
        }
        else
        {
            buf[i++] = '/';
            while (f[0] != '\0' && f[0] != '/')
                buf[i++] = *f++;
            while (f[0] == '/')
                f++;
        }
    }
    buf[i] = '\0';
    if (i > MAX_FILENAME_LEN)
    {
        fprintf(fout, "add_cd_path reached lengt %d\n", i);
        exit(1);
    }
    //fprintf(fout, "add_cd_path %s %s => %s\n", cd_path, filename, buf);
    strcpy(filename, buf);
    //fprintf(log_file, "%s\n", filename);
}

void read_filename(char *filename, char *&s)
{
    if (!parse_filename(filename, s))
    {
        fprintf(fout, "Failed to parse filename from '%s'\n", s);
        exit(0);
    }
    add_cd_path(filename);
}

bool accept_openat(char *&s)
{
    char *s2 = s;
    if (strncmp(s2, "openat(", 7) != 0)
        return false;
    s2 += 7;
    if (strncmp(s2, "AT_FDCWD", 8) == 0)
        s2 += 8;
    else
        while ('0' <= *s2 && *s2 <= '9')
            s2++;
    if (strncmp(s2, ", ", 2) != 0)
        return false;
    s = s2 + 2;
    return true;
}

#define NR_PARR_COMMANDS 4
        
bool process_trace_file(const char *trace_fn)
{
    FILE *f = fopen(trace_fn, "r");
    
    char buffer[10000];
    
    struct Command
    {
        bool active;
        unsigned long pid;
        char cmd[10000];
    };
    Command cmd[NR_PARR_COMMANDS];
    for (int i = 0; i < NR_PARR_COMMANDS; i++)
        cmd[i].active = false;

    long line_nr = 0;
    bool skip_first = true;
    
    while (fgets(buffer, 9999, f))
    {
        line_nr++;
        
        int len = strlen(buffer);
        if (len > 0 && buffer[len-1] != '\n')
        {
            printf("Line '%s' does not end with newline\n", buffer);
            return false;
        }

        if (skip_first && strstr(buffer, "kaem-optional-seed") == 0)
            continue;
        skip_first = false;

        //fprintf(fout, "Line: %s", buffer);
        
        char filename[MAX_FILENAME_LEN+1];
        
        char *s = buffer;
        unsigned long pid = read_unsigned_long(s);
        Process *process = find_process(pid);
        if (process == NULL)
        {
            printf("Line %ld: Did not process for %lu\n", line_nr, pid);
            process = next_process(pid);
        }
        
        while (*s == ' ' || *s == '\t')
            s++;
        char *command = s;
        //fprintf(fout, "%lu: %s", pid, s);
        if (strncmp(s, "<... ", 5) == 0)
        {
            printf("DEBUG: resumd\n");
            char *ns = strstr(s, "resumed>");
            if (ns == 0)
            {
                printf("Line '%s' expect 'resumed>'\n", buffer);
                return false;
            }
            s = ns + 8;
            bool found = false;
            for (int i = 0; i < NR_PARR_COMMANDS; i++)
                if (cmd[i].active && cmd[i].pid == pid)
                {
                    printf("DEBUG: more resumed: '%s'\n", s);
                    strcat(cmd[i].cmd, s);
                    printf("DEBUG: makes: '%s'\n", cmd[i].cmd);
                    char *s_unf = strstr(cmd[i].cmd, " <unfinished ...>");
                    if (s_unf != 0)
                    {
                        *s_unf = '\0';
                        s = 0;
                    }
                    else
                    {
                        cmd[i].active = false;
                        s = cmd[i].cmd;
                    }
                    found = true;
                    break;
                }
            if (!found)
            {
                printf("Line: '%s' is not correct continuation\n", buffer);
                return false;
            }
        }
        else if (strstr(s, " <unfinished ...>") != 0)
        {
            bool found = false;
            for (int i = 0; i < NR_PARR_COMMANDS; i++)
                if (!cmd[i].active)
                {
                    cmd[i].active = true;
                    cmd[i].pid = pid;
                    strcpy(cmd[i].cmd, s);
                    char *s_unf = strstr(cmd[i].cmd, " <unfinished ...>");
                    if (s_unf != 0)
                    {
                        *s_unf = '\0';
                        s = 0;
                    }
                    printf("DEBUG: Unfinshed %lu: '%s'\n", pid, cmd[i].cmd);
                    found = true;
                    break;
                }
            if (!found)
            {
                printf("Line: '%s' too many parralel commands. Increase NR_PARR_COMMANDS\n", buffer);
                return false;
            }
        }
        
        if (s == 0)
        {
            // nothing to process
        }
        else if (accept_string("execve(", s))
        {
            read_filename(filename, s);
            File *exec_file = get_file(filename);
            new Action(exec_file, process, 'e');
            if (strcmp(filename, "/usr/bin/tcc-boot0") == 0)
            {
                fprintf(fout, "Stop at %lu: %s\n", pid, s);
                break;
            }
            exec_file->init_source();
        }
        else if (accept_string("open(", s) || accept_openat(s))
        {
            read_filename(filename, s);
            //fprintf(fout, "open %s", s);
            bool o_rdonly = false;
            bool o_wronly = false;
            bool o_rdwr = false;
            bool o_creat = false;
            bool o_trunc = false;
            bool o_excl = false;
            if (!accept_string(", ", s))
                fprintf(fout, "Expecting ', at '%s'\n", s);
            for (;*s != '\0'; s++)
            {
                if (accept_string("O_RDONLY", s))
                    o_rdonly = true;
                else if (accept_string("O_WRONLY", s))
                    o_wronly = true;
                else if (accept_string("O_RDWR", s))
                    o_rdwr = true;
                else if (accept_string("O_CREAT", s))
                    o_creat = true;
                else if (accept_string("O_TRUNC", s))
                    o_trunc = true;
                else if (accept_string("O_EXCL", s))
                    o_excl = true;
                else if (   accept_string("O_NONBLOCK", s) || accept_string("O_CLOEXEC", s)
                         || accept_string("O_DIRECTORY", s) || accept_string("O_NOCTTY", s)
                         || accept_string("O_PATH", s) || accept_string("O_NOFOLLOW", s))
                    ;
                else
                {
                    fprintf(fout, "Unknown %s", s);
                    break;
                }
                if (*s == ',')
                    break;
                if (*s != '|')
                    break;
            }
            unsigned long mode = 0;
            if (accept_string(", ", s))
            {
                mode = read_unsigned_long(s);
            }
            if (!accept_string(") = ", s))
            {
                fprintf(fout, "Expecting ') = ' at '%s'\n", s);
                return false;
            }
            long handle = read_long(s);
            //if (*s != '\n')
            //  fprintf(fout, "open end with '%s'\n", s);
            if ((o_rdonly ? 1 : 0) + (o_wronly ? 1 : 0) + (o_rdwr ? 1 : 0) != 1)
                fprintf(fout, "Warning: Open '%s' as undefined read/write mode\n", filename);

            if (handle > -1)
            {
                File *file = get_file(filename);
                Action *action = new Action(file, process, 'o');
                action->file_handle = handle;
                action->o_rdonly = o_rdonly;
                action->o_wronly = o_wronly;
                action->o_rdwr = o_rdwr;
                action->o_creat = o_creat;
                action->o_trunc = o_trunc;
                action->o_excl = o_excl;
                if (o_creat)
                    action->mode = mode;
                file->init_source();
            }
        }
        else if (accept_string("close(", s))
        {
            unsigned long handle = read_unsigned_long(s);
            if (*s != ')')
                fprintf(fout, "Expecting ')' at '%s'\n", s);
            Action *last_open_action = process->lastOpenAction(handle);
            if (last_open_action == 0)
                fprintf(fout, "Error: Handle %ld not opened by process %d\n", handle, process->nr);
            else if (last_open_action->is_closed)
                fprintf(fout, "Warning: File %s already closed for process %d\n", last_open_action->file->name, process->nr);
            else
                last_open_action->is_closed = true; 
        }
        else if (accept_string("chmod(", s))
        {
            read_filename(filename, s);
            unsigned long mode = 0;
            if (accept_string(", ", s))
            {
                mode = read_unsigned_long(s);
            }
            if (*s != ')')
            {
                fprintf(fout, "Expecting ')' at '%s'\n", s);
                return false;
            }
            File *file = get_file(filename);
            Action *action = new Action(file, process, 'c');
            action->mode = mode;
        }
        else if (accept_string("chdir(", s))
        {
            read_filename(filename, s);
            if (!accept_string(") = ", s))
            {
                fprintf(fout, "Expecting ') = ' at '%s'\n", s);
                return false;
            }
            
            long result = read_long(s);
            //if (!accept_string("-1 ENOENT (No such file or directory)", s))
            //  result = read_unsigned_long(s);
            if (result == 0)
                strcpy(cd_path, filename);
        }
        else if (accept_string("unlink(", s))
        {
            read_filename(filename, s);
            if (*s != ')')
                fprintf(fout, "Expecting ')' at '%s'\n", s);
            File *file = get_file(filename);
            new Action(file, process, 'r');
        }
        else if (accept_string("fork(", s))
        {
            if (!accept_string(") = ", s))
            {
                fprintf(fout, "Expecting ') = ' at '%s'\n", s);
                return false;
            }
            long new_pid = read_unsigned_long(s);
            if (*s != '\n')
                fprintf(fout, "fork end with '%s'\n", s);
            Process *new_process = next_process(new_pid);
            //fprintf(fout, "fork created %lu %lu\n", new_pid, new_process->pid);
            new_process->parent = process;
            Action *action = new Action(0, process, 'E');
            action->child_process = new_process;
        }
        else if (accept_string("+++ exited with ", s))
        {
        }
        else if (accept_string("--- SIGCHLD ", s))
        {
        }
        else if (accept_string("--- SIGWINCH ", s))
        {
        }
        else if (accept_string("fcntl(", s))
        {
            // just ignore
        }
        else
        {
            fprintf(fout, "Unknown: '%s'\n", command);
            break;
        }
    }
    fclose(f);
    
    return true;
}
    
// ----------------------------------------------------

class Source
{
public:
    const char *url;
    Source *next;
    
    Source(const char *u, Source *n) : url(u), next(n) {}
};


void collect_sources(Process *process, Source **ref_sources)
{
    //indent(fout); fprintf(fout, "Process %d\n", process->nr);
    //indent_depth += 4;
    for (Action *action = process->actions; action != 0; action = action->next_in_process)
    {
        if (action->kind == 'o' && (action->o_rdonly || (action->o_rdwr && !action->o_trunc)))
        {
            File *file = action->file;      
            if (file->url != 0)
            {
                const char *url = file->url;
                //indent(fout); fprintf(fout, "Found %s\n", url);
                Source **ref_source = ref_sources;
                while (*ref_source != 0 && strcmp((*ref_source)->url, url) < 0)
                    ref_source = &(*ref_source)->next;
                if (*ref_source == 0 || strcmp((*ref_source)->url, url) > 0)
                    *ref_source = new Source(url, *ref_source);
            }
            else
            {
                Process *produced_by = 0;
                for (Action *file_action = file->actions; file_action != 0; file_action = file_action->next_on_file)
                    if (file_action->process == process)
                        break;
                    else if (file_action->kind == 'r')
                        produced_by = 0;
                    else if (file_action->is_produced())
                        produced_by = file_action->process;
                if (produced_by != 0)
                    collect_sources(produced_by, ref_sources);
            }
        }
    }
    //indent_depth -= 4;
}



bool include_source = false;

void output_file(FILE *f, FILE *f_source, bool binary)
{
    if (f_source == 0) return;
    
    fprintf(f, "<PRE>");
    if (binary)
    {
        int i = 0;
        unsigned char ch = fgetc(f_source);
        while (!feof(f_source))
        {
            fprintf(f, " %02X", ch);
            if (++i % 10 == 0)
                fprintf(f, "\n");
            ch = fgetc(f_source);
        }
    }
    else
    {
        char ch = fgetc(f_source);
        if (ch != -1)
        {
            int col = 0;
            while (!feof(f_source))
            {
                col++;
                if (ch == '<')
                    fprintf(f, "&lt;");
                else if (ch == '>')
                    fprintf(f, "&gt;");
                else if (ch == '&')
                    fprintf(f, "&amp;");
                else if ((unsigned char)ch == 160)
                    fprintf(f, "&nbsp;");
                else if ((unsigned char)ch == 169)
                    fprintf(f, "&copy;");
                else if ((unsigned char)ch == 194)
                    fprintf(f, "&Acirc;");
                else if ((unsigned char)ch == 195)
                    fprintf(f, "&Atilde;");
                else if ((unsigned char)ch == 197)
                    fprintf(f, "&Aring;");
                else if ((unsigned char)ch == 216)
                    fprintf(f, "&Oslash;");
                else if ((unsigned char)ch == 231)
                    fprintf(f, "&ccedil;");
                else if ((unsigned char)ch == 246)
                    fprintf(f, "&ouml;");
                else if (ch < 0)
                    fprintf(f, "&#%d;", (unsigned char)ch);
                else if (ch == '\n' || ch == 12)
                {
                    fprintf(f, "\n");
                    col = 0;
                }
                else if (ch == '\t')
                {
                    fprintf(f, " ");
                    while (col % 4 > 0)
                    {
                        fprintf(f, " ");
                        col++;
                    }
                }
                else if (ch < ' ')
                    ; // skip control characters
                else
                    fprintf(f, "%c", ch);
                ch = fgetc(f_source);
            }
        }
    }
    
    fprintf(f, "</PRE>");
    fclose(f_source);
}



void write_html_file(FILE *f, File *file, bool binary)
{
    fprintf(f, "<H3><A NAME=\"F%d\">File %s</A></H3>\n\n<UL>\n", file->nr, file->name);
    
    for (Action *action = file->actions; action != 0; action = action->next_on_file)
    {
        if (action->kind == 'r')
            break;
        if (action->kind == 'e')
            fprintf(f, "<LI>Executed in <A HREF=\"#S%d\">Process %d</A>\n", action->process->nr, action->process->nr);
        if (action->kind == 'o')
        {
            if (action->o_wronly || action->o_rdwr)
                break;
            if (action->o_rdonly)
                fprintf(f, "<LI>Input for <A HREF=\"#S%d\">Process %d</A>\n", action->process->nr, action->process->nr);
        }
    }
    fprintf(f, "</UL>\n\n");
    
    FILE *f_source = fopen(file->source_name, "r");

    if (f_source == 0)
    {
        fprintf(f, "(Source not found at '%s')\n", file->source_name);
        return;
    }

    //if (strncmp(file->source_name, source_dir, len_source_dir) == 0)
    //  fprintf(f, "Live-bootstrap source file is '%s'.<BR>\n", file->source_name + len_source_dir);
    //else
        fprintf(f, "Source file is '%s'.<BR>\n", file->source_name);
    if (file->url != 0)
    {
        fprintf(f, "URL: <A HREF=\"%s\">%s</A>\n", file->url, file->url);
        //fprintf(fout, "Source: %s, URL: %s\n", file->source_name, file->url);
    }
    else
        fprintf(f, "<B>No URL</B>\n");
    
    size_t len = strlen(file->source_name);
    
    if (   (len > 7 && strcmp(file->source_name + len - 7, ".tar.gz") == 0)
        || (len > 8 && strcmp(file->source_name + len - 8, ".tar.bz2") == 0))
    {
        fprintf(f, "(Not shown)\n");
        fclose(f_source);
        return;
    }
    
    output_file(f, f_source, binary);
}


void write_html(FILE *f)
{
    fprintf(f, 
        "<HTML><HEAD>\n<TITLE>MES-replacement listing</TITLE>\n"
        "</HEAD><BODY>\n\n<H1>MES-replacement listing</H1>"
        "<!--ONEWAY-->\n"
        "This page gives all the steps that are taken to arrive at <tt>tcc-boot0</tt>\n"
        "executable that is similar to the one in the <A HREF=\"https://github.com/fosslinux/live-bootstrap\"\n"
        ">fosslinux/live-bootstrap</A> project for this project, which does not rely on\n"
        "the GNU Mes compiler. (The header files and the source for a standard library\n"
        "that are part of the GNU Mes compiler, are used.)\n"
        "<p>"
        "This page is generated the <A HREF=\"https://github.com/FransFaase/MES-replacement/tree/%s/scan_trace.cpp\"\n"
        "><TT>scan_trace.cpp</TT></A>, which parses the <TT>trace.txt</TT> file that is produced by\n"
        "running the <A HREF=\"https://github.com/FransFaase/MES-replacement/blob/main/task3.sh\"\n"
        "><TT>task3.sh</TT></A> Bash script (where the line with the <tt>chroot</tt> command is uncommented)\n"
        "for the commit <A HREF=\"https://github.com/FransFaase/MES-replacement/tree/%s\">\n"
        "<tt>%.8s</TT></A>.\n"
        "<P>\n"
        "<UL>\n"
        "<LI><A HREF=\"#Seeds\">Binary seeds files</A>\n"
        "<LI><A HREF=\"#Processes\">Processes</A>\n"
        "<LI><A HREF=\"#Input\">Input source files</A>\n"
        "<LI><A HREF=\"#Output\">Output files</A>\n"
        "<LI><A HREF=\"#Parser\">Parse program</A>\n"
        "</UL>\n", live_bootstrap_commit, live_bootstrap_commit, live_bootstrap_commit);

    fprintf(f, "\n\n<H2><A NAME=\"Seeds\">Binary seeds files</A></H2>\n\n");
    
    for (File *file = files; file != 0; file = file->next)
        if (file->exec_before_created())
            write_html_file(f, file, true);
     
    fprintf(f, "\n<H2><A NAME=\"Processes\">Processes</A></H2>\n\n");
    for (Process *process = all_processes; process != 0; process = process->next)
    {
        fprintf(f, "<H3><A NAME=\"S%d\">Process %d</A></H3>\n\n", process->nr, process->nr);
        if (process->parent != 0)
            fprintf(f, "(Executed by <A HREF=\"#S%d\">Process %d</A>)\n", process->parent->nr, process->parent->nr);
        fprintf(f, "<UL>\n");
        for (Action *action = process->actions; action != 0; action = action->next_in_process)
        {
            if (action->kind == 'E' && action->child_process != 0)
            {
                fprintf(f, "<LI>Executes <A HREF=\"#S%d\">Process %d</A>\n", action->child_process->nr, action->child_process->nr);
            }
            else
            {
                const char *oper = action->oper_name();
                if (oper != 0)
                {
                    bool repeated = false;
                    for (Action *prev_action = process->actions; prev_action != action; prev_action = prev_action->next_in_process)
                        if (prev_action->kind == 'o' && prev_action->file == action->file && prev_action->oper_name() == oper)
                        {
                            repeated = true;
                            break;
                        }
                    
                    if (!repeated)
                    {
                        File *file = action->file;
                        fprintf(f, "<LI>%s ", oper);
                        
                        if (action->is_produced())
                        {
                            fprintf(f, "%s\n<UL>\n", file->name);
                            for (Action *file_action = action->next_on_file; file_action != 0; file_action = file_action->next_on_file)
                                if (file_action->kind == 'r')
                                {
                                    fprintf(f, "<LI>Deleted by <A HREF=\"#S%d\">process %d</A>\n", file_action->process->nr, file_action->process->nr);
                                    break;
                                }
                                else if (file_action->kind == 'o' && (file_action->o_creat || ((file_action->o_wronly || file_action->o_rdwr) && file_action->o_trunc)))
                                    break;
                                else if (file_action->kind == 'e' || file_action->o_rdonly)
                                    fprintf(f, "<LI>%s <A HREF=\"#S%d\">process %d</A>\n",
                                        file_action->kind == 'e' ? "Used as executable" : 
                                        file_action->kind == 'o' ? (file_action->o_rdonly ? "Used as input" : file_action->o_wronly ? "Produced by" : file_action->o_rdwr ? "Modified by" : "Modified by") :
                                        "Used in",
                                        file_action->process->nr, file_action->process->nr);
                            fprintf(f, "</UL>\n\n");
                        }
                        else
                        {
                            Process *produced_by = 0;
                            for (Action *file_action = file->actions; file_action != 0; file_action = file_action->next_on_file)
                                if (file_action->process == process)
                                    break;
                                else if (file_action->kind == 'r')
                                    produced_by = 0;
                                else if (file_action->is_produced())
                                    produced_by = file_action->process;
                            if (file->is_source)
                                fprintf(f, "<A HREF=\"#F%d\">%s</A>", file->nr, file->name);
                            else
                                fprintf(f, "%s", action->file->name);
                            File *file_copy_from = file;
                            while (file_copy_from->copy_from != 0)
                                file_copy_from = file_copy_from->copy_from;
                            if (file_copy_from->url != 0)
                            {
                                fprintf(f, " from <A HREF=\"%s\">source</A>", file_copy_from->url);
                                if (file != file_copy_from)
                                    fprintf(f, " (through copy)");
                                if (produced_by)
                                    fprintf(f, " (produced by <A HREF=\"#S%d\">process %d</A>)", produced_by->nr, produced_by->nr);
                            }
                            else if (produced_by != 0)
                                fprintf(f, " produced by <A HREF=\"#S%d\">process %d</A>", produced_by->nr, produced_by->nr);
                            fprintf(f, "\n");
                        }
                    }
                }
            }
        }
        fprintf(f, "</UL>\n\n");
        
        if (process->nr == 731)
        {
            Source *sources = 0;
            //fprintf(fout, "Process %d\n", process->nr);
            collect_sources(process, &sources);
            
            fprintf(f, "<P>Sources used:\n<UL>\n");
            for (Source *source = sources; source != 0; source = source->next)
                fprintf(f, "<LI> %s\n", source->url);
            fprintf(f, "</UL>\n");
        }
    }
        
    fprintf(f, "<H2><A NAME=\"Input\">Input source files</A></H2>\n\n");
    
    for (File *file = files; file != 0; file = file->next)
        if (file->used_as_input()) //(file->is_source && !file->exec_before_created())
            write_html_file(f, file, false); 

    fprintf(f, "\n<H2><A NAME=\"Output\">Output files</A></H2>\n\n\n");
 
    for (int t = 0; t < 3; t++)
    {
        switch (t)
        {
            case 0: fprintf(f, "Executables files:\n<UL>\n"); break;
            case 1: fprintf(f, "Intermediary files (not from sources and used):\n<UL>\n"); break;
            case 2: fprintf(f, "Produced (not from source and also not used):\n<UL>\n"); break;
        }
        for (File *file = files; file != 0; file = file->next)
            if (!file->used_as_input() && !file->exec_before_created())
            {
                bool used = false;
                bool executed = false;
                unsigned long mode = 0;
                int process_nr = -1;
                for (Action *action = file->actions; action != 0; action = action->next_on_file)
                {
                    if (action->kind == 'e')
                        executed = true;
                    else if (action->kind == 'o')
                    {
                        if (action->o_creat || action->o_wronly)
                        {
                            mode = action->mode;
                            process_nr = action->process->nr;
                        }
                        else if (action->o_rdonly || (action->o_rdwr && !action->o_trunc))
                            used = true;
                    }
                    else if (action->kind == 'r')
                    {
                        used = false;
                        executed = false;
                        process_nr = -1;
                    }
                    else if (action->kind == 'c')
                    {
                        mode = action->mode;
                    }
                }
                if (process_nr != -1)
                {
                    bool is_executable = (mode & 0700) == 0700;
                    if (   (t == 0 && is_executable)
                        || (t == 1 && file->url == 0 && !is_executable && used)
                        || (t == 2 && file->url == 0 && !is_executable && !used))
                    {
                        fprintf(f, "<LI> %s", file->name);
                        if (process_nr > 0)
                            fprintf(f, " produced by <A HREF=\"#S%d\">Process %d</A>", process_nr, process_nr);
                        if (mode != 0 && mode != 0600 && mode != 0700)
                            fprintf(f, " (mode is %lo)", mode);
                        if (executed)
                            fprintf(f, " (also executed)");
                        fprintf(f, "\n");
                    }
                }
            }
        fprintf(f, "</UL>\n\n");
    }

    fprintf(f, "\n<H2><A NAME=\"Parser\">Parse program</A></H2>\n\n");
    fprintf(f, "Below the Bash script <TT>task3.sh</TT> to produce the <TT>trace.txt</TT> file.\n"
            "(The line with <tt>chroot</TT> should be uncommented.)<P>\n");
    output_file(f, fopen("task3.sh", "r"), false);
    fprintf(f, "Below the version of the <TT>scan_trace.cpp</TT> program is given that is used to produce this page.\n<P>\n");
    output_file(f, fopen("scan_trace.cpp", "r"), false);

    fprintf(f,
        "\n\n"
        "<P><HR>\n"
        "<ADDRESS>\n"
        "<A HREF=\"index.html\">Home</A>\n"
        "</ADDRESS>\n"
        "</BODY></HTML>\n");
}

bool only_graph = false;

void write_json(FILE *f)
{
    // calculate json_kind and file_created_by
    for (File *file = files; file != 0; file = file->next)
    {
        bool file_exists = false;
        Process *file_created_by = 0;
        for (Action *action = file->actions; action != 0; action = action->next_on_file)
        {
            if (action->kind == 'r')
                file_exists = false;
            else if (action->kind == 'o')
            {
                if (action->o_rdonly)
                    action->json_kind = 'R';
                else if (!file_exists || action->o_wronly)
                {
                    action->json_kind = 'W';
                    file_exists = true;
                    file_created_by = action->process;
                }
                else
                    action->json_kind = 'M';
            }
            action->file_created_by = file_created_by;
        }
    }

    fprintf(f, "var data = {\n  processes:[\n");
    for (Process *process = all_processes; process != 0; process = process->next)
    {
        fprintf(f, "\t{ nr:%d, x:null, y:0, w:0, h:0, ie:\"\", iw:0, oe:\"\", ow:0, elf:null, ins:[], outs:[]", process->nr);
        if (process->parent != 0)
            fprintf(f, ", parent:%d", process->parent->nr);
        fprintf(f, ", actions:[");
        bool first = true;
        bool is_M2_Mesoplanet = false;
        for (Action *action = process->actions; action != 0; action = action->next_in_process)
        {
            // Some clean-up for M2_Mesoplanet driver program
            if (action->kind == 'e' && (strcmp(action->file->name, "/x86/bin/M2-Mesoplanet") == 0 || strcmp(action->file->name, "/usr/bin/M2-Mesoplanet") == 0))
                is_M2_Mesoplanet = true;
            if (is_M2_Mesoplanet)
            {
                if (action->json_kind == 'W' && strstr(action->file->name, "/M2-Mesoplanet-000000") == 0)
                    continue;
                if (action->json_kind == 'R' && action->next_in_process != 0 && action->next_in_process->kind == 'E')
                    continue;
            }
            if (   action->json_kind == 'R' && action->next_in_process != 0 && action->next_in_process->kind == 'E'
                && action->next_on_file != 0 && action->next_on_file->kind == 'e' 
                && action->next_in_process->child_process == action->next_on_file->process)
                continue;
            
            if (action->json_kind == 'R')
            {
                bool already_include = false;
                for (Action *prev_action = process->actions; prev_action != action; prev_action = prev_action->next_in_process)
                    if (prev_action->json_kind == 'R' && prev_action->file == action->file)
                    {
                        already_include = true;
                        break;
                    }
                if (already_include)
                    continue;
            }

            fprintf(f, "%s%s{ kind:\"%c\"", first ? "" : ",", only_graph ? "" : "\n\t\t", action->json_kind);
            if (action->file != 0)
            {
                fprintf(f, ", file:%d", action->file->nr);
                if (action->file_created_by != 0)
                    fprintf(f, ", by:%d", action->file_created_by->nr);
            }
            if (action->child_process != 0)
                fprintf(f, ", child:%d", action->child_process->nr);
            fprintf(f, " }");
            first = false;
        }
        fprintf(f, "%s}%s\n", only_graph ? "]" : first ? "] \n" : "\n\t  ]\n\t", process->next != 0 ? "," : "");
    }
    fprintf(f, "  ],\n  files:[\n");

    for (File *file = files; file != 0; file = file->next)
    {
        fprintf(f, "\t{ nr:%d, name:\"%s\", type:\"%s\", x:null, y:0, label:\"\", w:0", file->nr, file->name,
                file->exec_before_created() ? "seed" : "");
        if (!only_graph)
        {
            if (file->is_source && file->source_name != 0)
                fprintf(f, ", src:\"%s\"",
                        file->source_name /*+ (strncmp(file->source_name, source_dir, len_source_dir) == 0 ? len_source_dir : 0)*/);
            if (file->url != 0)
                fprintf(f, ", url:\"%s\"", file->url);
            if (file->copy_from != 0)
                fprintf(f, ", copy_from:%d", file->copy_from->nr);
        }
        fprintf(f, ", actions:[");
        bool first = true;
        Action *prev_action = 0;
        for (Action *action = file->actions; action != 0; action = action->next_on_file)
        {
            if (prev_action == 0 || action->json_kind != prev_action->json_kind || action->process->nr != prev_action->process->nr)
            {
                fprintf(f, "%s%s{ kind:\"%c\", proc:%d }", first ? "" : ",", only_graph ? "" : "\n\t\t", action->json_kind, action->process->nr);
                first = false;
            }
            prev_action = action;
        }
        fprintf(f, "%s]", only_graph || first ? "" : "\n\t  ");
        if (file->is_source && file->source_name != 0 && !only_graph)
        {
            size_t len = strlen(file->source_name);
            
            if (   (len <= 7 || strcmp(file->source_name + len - 7, ".tar.gz") != 0)
                && (len <= 8 || strcmp(file->source_name + len - 8, ".tar.bz2") != 0))
            {
                FILE *f_source = fopen(file->source_name, "r");
                if (f_source != 0)
                {
                    fprintf(f, ",\n\t  lines:[\n");
                    if (file->exec_before_created())
                    {
                        fprintf(f, "\t\t\"");
                        int i = 0;
                        unsigned char ch = fgetc(f_source);
                        while (!feof(f_source))
                        {
                            if (i == 10)
                            {
                                fprintf(f, "\",\n\t\t\"");
                                i = 0;
                            }
                            fprintf(f, "%s%02X", i == 0 ? "" : " ", ch);
                            i++;
                            ch = fgetc(f_source);
                        }
                        fprintf(f, "\"\n");
                    }
                    else
                    {
                        char ch = fgetc(f_source);
                        bool first = true;
                        if (ch != -1)
                        {
                            int col = 0;
                            bool in_line = false;
                            while (!feof(f_source))
                            {
                                if (ch == '\n' && in_line)
                                {
                                    fprintf(f, "\"");
                                    in_line = false;
                                    ch = fgetc(f_source);
                                    col = 0;
                                    continue;
                                }
                                if (!in_line)
                                {
                                    fprintf(f, "%s\t\t\"", first ? "" : ",\n");
                                    first = false;
                                    if (ch == '\n')
                                    {
                                        fprintf(f, "\"");
                                        ch = fgetc(f_source);
                                        continue;
                                    }
                                    in_line = true;
                                }
                                if (ch < ' ' && ch != '\t')
                                {
                                    ch = fgetc(f_source);
                                    continue;
                                }
                                col++;
                                if (ch == '"')
                                    fprintf(f, "\\" "\"");
                                else if (ch == '\\')
                                    fprintf(f, "\\\\");
                                else if (ch == '<')
                                    fprintf(f, "&lt;");
                                else if (ch == '>')
                                    fprintf(f, "&gt;");
                                else if (ch == '&')
                                    fprintf(f, "&amp;");
                                else if ((unsigned char)ch == 160)
                                    fprintf(f, "&nbsp;");
                                else if ((unsigned char)ch == 169)
                                    fprintf(f, "&copy;");
                                else if ((unsigned char)ch == 194)
                                    fprintf(f, "&Acirc;");
                                else if ((unsigned char)ch == 195)
                                    fprintf(f, "&Atilde;");
                                else if ((unsigned char)ch == 197)
                                    fprintf(f, "&Aring;");
                                else if ((unsigned char)ch == 216)
                                    fprintf(f, "&Oslash;");
                                else if ((unsigned char)ch == 231)
                                    fprintf(f, "&ccedil;");
                                else if ((unsigned char)ch == 246)
                                    fprintf(f, "&ouml;");
                                else if (ch < 0)
                                    fprintf(f, "&#%d;", (unsigned char)ch);
                                else if (ch == '\t')
                                {
                                    fprintf(f, " ");
                                    while (col % 4 != 0)
                                    {
                                        fprintf(f, " ");
                                        col++;
                                    }
                                }
                                else
                                    fprintf(f, "%c", ch);
                                ch = fgetc(f_source);
                            }
                            if (col > 0)
                                fprintf(f, "\"\n");
                        }
                    }
                    fprintf(f, "\t  ]\n");
                }
            }
        }
        fprintf(f, "%s}", first && !file->is_source ? " " : "\t");
        fprintf(f, "%s\n", file->next != 0 ? "," : "");
    }
    fprintf(f, "  ]\n");
    fprintf(f, "}\n");
    return;
         
    for (Process *process = all_processes; process != 0; process = process->next)
    {
        fprintf(f, "<H3><A NAME=\"S%d\">Process %d</A></H3>\n\n", process->nr, process->nr);
        if (process->parent != 0)
            fprintf(f, "(Executed by <A HREF=\"#S%d\">Process %d</A>)\n", process->parent->nr, process->parent->nr);
        fprintf(f, "<UL>\n");
        
        if (process->nr == 731)
        {
            Source *sources = 0;
            //fprintf(fout, "Process %d\n", process->nr);
            collect_sources(process, &sources);
            
            fprintf(f, "<P>Sources used:\n<UL>\n");
            for (Source *source = sources; source != 0; source = source->next)
                fprintf(f, "<LI> %s\n", source->url);
            fprintf(f, "</UL>\n");
        }
    }
        
    fprintf(f, "<H2><A NAME=\"Input\">Input source files</A></H2>\n\n");
    
    for (File *file = files; file != 0; file = file->next)
        if (file->used_as_input()) //(file->is_source && !file->exec_before_created())
            write_html_file(f, file, false); 

    fprintf(f, "\n<H2><A NAME=\"Output\">Output files</A></H2>\n\n\n");
 
    for (int t = 0; t < 3; t++)
    {
        switch (t)
        {
            case 0: fprintf(f, "Executables files:\n<UL>\n"); break;
            case 1: fprintf(f, "Intermediary files (not from sources and used):\n<UL>\n"); break;
            case 2: fprintf(f, "Produced (not from source and also not used):\n<UL>\n"); break;
        }
        for (File *file = files; file != 0; file = file->next)
            if (!file->used_as_input() && !file->exec_before_created())
            {
                bool used = false;
                bool executed = false;
                unsigned long mode = 0;
                int process_nr = -1;
                for (Action *action = file->actions; action != 0; action = action->next_on_file)
                {
                    if (action->kind == 'e')
                        executed = true;
                    else if (action->kind == 'o')
                    {
                        if (action->o_creat || action->o_wronly)
                        {
                            mode = action->mode;
                            process_nr = action->process->nr;
                        }
                        else if (action->o_rdonly || (action->o_rdwr && !action->o_trunc))
                            used = true;
                    }
                    else if (action->kind == 'r')
                    {
                        used = false;
                        executed = false;
                        process_nr = -1;
                    }
                    else if (action->kind == 'c')
                    {
                        mode = action->mode;
                    }
                }
                if (process_nr != -1)
                {
                    bool is_executable = (mode & 0700) == 0700;
                    if (   (t == 0 && is_executable)
                        || (t == 1 && file->url == 0 && !is_executable && used)
                        || (t == 2 && file->url == 0 && !is_executable && !used))
                    {
                        fprintf(f, "<LI> %s", file->name);
                        if (process_nr > 0)
                            fprintf(f, " produced by <A HREF=\"#S%d\">Process %d</A>", process_nr, process_nr);
                        if (mode != 0 && mode != 0600 && mode != 0700)
                            fprintf(f, " (mode is %lo)", mode);
                        if (executed)
                            fprintf(f, " (also executed)");
                        fprintf(f, "\n");
                    }
                }
            }
        fprintf(f, "</UL>\n\n");
    }

    fprintf(f, "\n<H2><A NAME=\"Parser\">Parse program</A></H2>\n\n");
    fprintf(f, "Below the Bash script <TT>task3.sh</TT> to produce the <TT>trace.txt</TT> file.\n"
            "(The line with <tt>chroot</TT> should be uncommented.)<P>\n");
    output_file(f, fopen("task3.sh", "r"), false);
    fprintf(f, "Below the version of the <TT>scan_trace.cpp</TT> program is given that is used to produce this page.\n<P>\n");
    output_file(f, fopen("scan_trace.cpp", "r"), false);
    
    fprintf(f,
        "\n\n"
        "<P><HR>\n"
        "<ADDRESS>\n"
        "<A HREF=\"index.html\">Home</A>\n"
        "</ADDRESS>\n"
        "</BODY></HTML>\n");
}

int main(int argc, char *argv[])
{
    const char *data_js_filename = "docs/data.js";
    
    if (argc == 3 && strcmp(argv[1], "-d") == 0)
    {
        only_graph = true;
        data_js_filename = argv[2];
    }
    
    len_source_dir = strlen(source_dir);

    init_subModules();
    
    if (!process_trace_file("trace.txt"))
        return 0;
    
    for (Process *process = all_processes; process != 0; process = process->next)
    {
        Action *action = process->actions;
        if (   action != 0 && action->kind == 'e'
            && action->file != 0 && strcmp(action->file->name, "/usr/bin/cp") == 0)
        {
            action = action->next_in_process;
            if (action != 0 && action->kind == 'o' && action->o_rdonly)
            {
                File *source = action->file;
                action = action->next_in_process;
                if (action != 0 && action->kind == 'o' && action->o_wronly)
                {
                    fprintf(fout, "Copy %s -> %s\n", source->name, action->file->name);
                    action->file->copy_from = source;
                }
            }
        }
    }
        

    
    if (!only_graph)
    {
        FILE *f_html = fopen("docs/listing.html", "w");
        if (f_html != 0)
        {
            write_html(f_html);
            fclose(f_html);
        }
    }
        
    FILE *f_json = fopen(data_js_filename, "w");
    if (f_json != 0)
    {
        write_json(f_json);
        fclose(f_json);
    }
    
    return 0;
}


Home